mio config sviluppo (nel file "index.html") per RequireJS è:RequireJS percorsi config
<script src="require-2.1.5.min.js"></script>
<script>
require.config({
baseUrl: 'js',
paths: {
angular: 'libraries/angular-1.1.5.min',
jquery: 'libraries/jquery-2.0.0.min',
underscore: 'libraries/underscore-1.4.4.min',
...
zeroclipboard: 'plugins/zeroclipboard-1.0.7.min',
tablesorter: 'plugins/jquery.tablesorter-2.9.1.min',
...
},
shim: {
'angular': {
exports: 'angular'
},
'underscore': {
exports: '_'
}
},
packages: [
{
name: 'index',
location: 'app/index',
main: 'main'
}
]
});
require(['index']);
</script>
Ma sulla produzione ho solo 2 file concatenati per le librerie e plugin:
js/libraries.js // all jQuery, AngularJS, RequireJS, Underscore and other libraries concatenated
js/plugins.js // all plugins (already an AMD modules, no need for "shim" config) concatenated
Quindi, come posso scrivere i miei "percorsi" di configurazione ora? Non ho alcun 'libraries/angular-1.1.5.min.js' e altri percorsi.
La mia soluzione è quella di scrivere:
paths: {
angular: 'libraries',
underscore: 'libraries'
}
associo AngularJS e sottolineatura per file '' libraries.js e tutto funziona perfettamente. (Non c'è bisogno di jQuery e tutti i plugin - sono già un modulo AMD).
Ma è un modo giusto per scrivere percorsi? La mia soluzione mi sembra una soluzione sporca, non la soluzione migliore.
miei r.js processo di compilazione:
({
baseUrl: 'scripts',
paths: {
jquery: 'jquery-2.0.0.min',
...
tablesorter: 'jquery.tablesorter-2.0.5.min',
zeroclipboard: 'zeroclipboard-1.0.7.min'
},
name: 'foo/main',
exclude: [
'angular',
'jquery',
...
'tablesorter',
'zeroclipboard'
],
optimize: 'uglify',
out: 'production/js/foo.js'
})
UPD 1:
Quello che voglio:
www.mysite.com/about.html:
<script src="js/libraries.js"></script><-- jQuery (already AMD), AngularJS (not AMD), RequireJS, Underscore (not AMD) and other libraries already here, only 1 http request needed //-->
<script src="js/plugins.js"></script><-- all AMD //-->
<script>
require.config({
baseUrl: 'js',
paths: {
angular: WHAT I NEED TO WRITE HERE?,
underscore: WHAT I NEED TO WRITE HERE?
},
shim: {
'angular': {
exports: 'angular'
},
'underscore': {
exports: '_'
}
},
packages: [
{
name: 'about',
location: 'js',
main: 'about'
}
]
});
require(['about']); // will load "js/about.js"
</script>
UPD 2:
Ok, è chiaro su "prio rity ", quindi, non ho bisogno del primo e del secondo tag« script »(ma ho bisogno di separare" Require.js "da" libraries.js ") - RequireJS li caricherà automaticamente. Ma cosa si dovrebbe fare con le librerie non AMD nel file "libraries.js"?
AngularJS e UnderscoreJS sono moduli non AMD, è per questo che devo usare "shim", giusto? Ma per far funzionare "shim", ho bisogno di usare anche "path", quindi "shim" può individuare i moduli shimmed, giusto? Ma ho ancora solo 1 file - "libraries.js" e non riesco a scriverlo in opzione "percorso" ... Solo davvero bloccato ...
Non si dovrebbe aggiungere in quei tag di script aggiuntivi, require.js può, e dovrebbe, caricare quelli per voi.La mia risposta qui sotto sull'opzione prioritaria non è chiara? –
È tutto fantastico con la tua risposta, ho appena fatto un aggiornamento prima di leggere il tuo aggiornamento :) – artuska