Sto scrivendo il plugin jQuery che contiene molto codice. Quindi ho deciso di separare il codice e renderlo più modulare per me (lo sviluppatore). Per questo io uso require.js.
Ora ho 6 js file:requirejs - combina diversi file in file js singoli che non dipendono dal requirejs
- utils.js
- base-row.jas
- a-row.js
- b-row.js
- my-table.js
- main.js
file da 1 a 5 definisce "classi" JavaScript e hanno dependecies tra loro stessi. La classe "primaria" che gestisce tutto il concerto è my-table.js. main.js ha dipendenze solo per i miei-table.js e crea un plugin da esso:
require([
'my-table'
], function(MyTable) {
jQuery.fn.myTable = function(options) {
var table = new MyTable(this, options);
this.data('myTable', table);
return this;
};
});
Ora voglio creare da questi file un unico grande file js che contiene tutti i file 6 senza alcuna dipendenza (ad eccezione di jQuery che l'utente dovrebbe fare riferimento ad esso). Per questo ho usato r.js (http://requirejs.org/docs/optimization.html) e come risultato ho ottenuto un file js grande che dipende da require.js (e contiene chiamate da definire e richiedere). Ho seguito questo: http://requirejs.org/docs/faq-optimization.html#wrap e ho usato almond.js per combinare tutti i miei file per l'utilizzo che non dipende da require.js. Funziona bene
Il problema è perché ho bisogno di tutti definire e richiedere chiamate di metodo e almond.js? Perché l'ottimizzatore non poteva concatenare solo i risultati di funzione (come descritto in questa domanda: Why do concatenated RequireJS AMD modules need a loader?) come questo:
(function() {
var utils = «function() {
....
return Utils;
}»();
var baseRow = «function(A) {
....
return BaseRow;
}»(utils);
....
....
var myTable = .....
//<--This is require call and therefore doesn't return a thing
(function(MyTable) {
jQuery.fn.myTable = function(options) {
var table = new MyTable(this, options);
this.data('myTable', table);
return this;
};
})(myTable);
})();
Come risultato di questo processo, ho deciso di controllare le cose e unito manualmente tutti i file un file minificato. Finisco con un file più piccolo di 3k poi la versione a mandorla!
Non trovo la logica dietro l'ottimizzatore r.js che crea il risultato dipendente da require.js. Nel mio caso, nessuno dovrà usare nessuno dei file, il mio file js primario è l'unico consumatore. Cosa ne pensi?