Я борюсь с оптимизатором requirejs и модулями без AMD
Я борюсь с оптимизатором requirejs. Этот код будет работать, если я просто загружу его в браузере без оптимизации. Если я запустил оптимизатор, я получаю
: ENOENT, no such file or directory 'C:\Users\dev\checkout\src\main\webapp\resources\scripts\
json2.js'
In module tree: main
Это код
requirejs.config({
paths : {
jquery : "lib/jquery",
bootstrap : "lib/bootstrap",
modals : "lib/modals",
tablesort : "lib/tablesort",
json2 : "lib/json2"
},
shim : {
"bootstrap" : [ "jquery" ],
"modals" : [ "jquery" ],
"tablesort" : [ "jquery" ],
"json2" : [ "jquery" ]
}
});
require([ "jquery", "json2","bootstrap", "modals", "tablesort", "registermodule", "personsmodule" ], function($) {
Что нужно сделать, чтобы оптимизатор работал? Я попытался поставить lib/json2 в require. Затем я получаю проблемы jQuery, потому что это не модули AMD.
Изменить: все еще борется с этим. Пробовал самый простой пример. Работает отлично в браузере, но оптимизатор жалуется на то, что не находит файлы. lib/jquery.js и lib/modal.js.
requirejs.config({
paths : {
jquery : "lib/jquery",
modals : "lib/modals"
},
shim : {
"bootstrap" : [ "jquery" ],
"modals" : [ "jquery" ]
}
});
require([ "jquery", "modals" ], function($) {
console.log($("#leverandor_span").text());
$("#register_modal").modal("show");
});
Ответы
Ответ 1
Проблема: require.config() не обрабатывается r.js. Эта конфигурация предназначена только для среды выполнения. Для r.js нам нужно создать другой файл, чтобы настроить пути и другие материалы.
Создайте файл (например, app.build.js) и настройте пути
({
appDir: "../",
baseUrl: "./",
dir: "dist",
modules: [
{
name: "bootloader"
}
],
paths: {
// libraries path
"json": "lib/json2",
"jquery": "lib/jquery",
"underscore": "lib/underscore",
"bootstrap": "lib/bootstrap",
"backbone": "lib/backbone",
"hogan": "lib/hogan",
// require plugins
"css": "lib/css",
"hgn": "lib/hgn",
"text": "lib/text"
}
})
запустите оптимизатор:
$r.js -o app.build.js
Подробнее здесь:
http://japhr.blogspot.it/2011/12/optimizing-requirejs-part-2.html
Параметры файла сборки:
http://requirejs.org/docs/optimization.html#wholeproject
Ответ 2
См. mainConfigFile
. Это было введено в действие, поэтому вам не нужно копировать требуемую конфигурацию в файлы времени выполнения/оптимизации времени, сохраняя свою структуру DRY:
//By default all the configuration for optimization happens from the command
//line or by properties in the config file, and configuration that was
//passed to requirejs as part of the app runtime "main" JS file is *not*
//considered. However, if you prefer the "main" JS file configuration
//to be read for the build so that you do not have to duplicate the values
//in a separate configuration, set this property to the location of that
//main JS file. The first requirejs({}), require({}), requirejs.config({}),
//or require.config({}) call found in that file will be used.
mainConfigFile: '../some/path/to/main.js',