Ci piace RequireJS e AMD durante lo sviluppo, dove possiamo modificare un modulo, premere ricarica nel nostro browser e vedere immediatamente il risultato. Ma quando arriva il momento di concatenare i nostri moduli in un unico file per la distribuzione di produzione, ci deve evidentemente essere un caricatore AMD ancora presente, sia che caricatore è RequireJS stesso o il suo più piccolo partner “mandorla”, come spiegato qui:Perché i moduli concatenati di RequireJS AMD richiedono un caricatore?
http://requirejs.org/docs/faq-optimization.html#wrap
La mia confusione è: perché è necessario un caricatore? A meno che non si abbiano circostanze insolite che rendono necessario effettuare chiamate require()
all'interno dei moduli, sembrerebbe che una serie di moduli AMD possa essere concatenata senza alcun caricatore presente. L'esempio più semplice possibile sarebbe una coppia di moduli come il seguente.
ModA.js:
define([], function() {
return {a: 1};
});
ModB.js:
define(['ModA'], function(A) {
return {b : 2};
});
Attribuite questi due moduli, sembra che una concatenazione potrebbe semplicemente produrre il testo riportato di seguito, e non appesantire il server di produzione o di browser con larghezza di banda o calcolo extra richiesta da RequireJS o Almond.
immagino una concatenazione che produce (e sto usando chevron virgolette «» per mostrare dove i frammenti dei due moduli di cui sopra sono stati inseriti):
Questo, per quanto posso vedere, riprodurrebbe correttamente la semantica di AMD, con un minimo di colla estranea JavaScript. C'è un tale concatenatore disponibile? In caso contrario, sarei un pazzo a pensare che dovrei scriverne uno? Ci sono davvero poche basi di codice che consistono in moduli semplici e puliti scritti con define()
e che non necessitino mai di ulteriori chiamate require()
all'interno di questo kick-off in seguito a fasci di codice asincroni?
Come hai risolto questo problema? Ho scoperto che usando almond, il file min è più grande di 3k quindi il file concatenato (9K vs 6K). – Naor