Mój config rozwoju (w "index.html" pliku) dla RequireJS jest:RequireJS ścieżki 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>
Ale na produkcji mam tylko 2 pliki konkatenowanych dla bibliotek i wtyczek:
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
Jak więc teraz napisać moje "ścieżki" konfiguracji? Nie mam żadnych 'bibliotek/kątowych-1.1.5.min.js' i innych ścieżek.
Moje rozwiązanie jest napisać:
paths: {
angular: 'libraries',
underscore: 'libraries'
}
kojarzy mi angularjs i podkreślnik do pliku 'libraries.js' i wszystko działa idealnie. (Nie ma potrzeby stosowania jQuery i wszystkich wtyczek - są to już moduły AMD).
Ale czy jest to właściwy sposób pisania ścieżek? Moje rozwiązanie wydaje mi się trochę brudnym rozwiązaniem, a nie najlepszym rozwiązaniem.
Moi r.js budować proces:
({
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:
Czego chcę:
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, to jest jasne o "prio rity ", więc nie potrzebuję pierwszych i drugich tagów" script "(ale muszę oddzielić" Require.js "od" libraries.js ") - RequireJS załaduje je automatycznie. Ale co zrobić z bibliotekami innymi niż AMD w pliku "libraries.js"?
AngularJS i UnderscoreJS to moduły inne niż AMD, dlatego muszę używać "shim", prawda? Ale aby wykonać pracę "shim", potrzebuję również użyć "ścieżek", więc "shim" może zlokalizować moduły shimmed, prawda? Ale nadal mam tylko 1 plik - "libraries.js" i nie mogę go zapisać w opcji "ścieżka" ... Naprawdę utknąłem ...
Nie powinieneś dodawać dodatkowych tagów skryptów, require.js, i powinien je załadować.Czy moja odpowiedź poniżej na temat opcji pierwszeństwa jest niejasna? –
To wszystko jest świetne z twoją odpowiedzią, właśnie zrobiłem aktualizację przed przeczytaniem twojej aktualizacji :) – artuska