Избегать дублирования конфигурации "путей" в главном файле RequireJS и файле сборки r.js?
Вот (часть) структура моей папки:
- Узел-тест
- bower_components
- строить
- общественности
- main.js
- build.js
Запуск оптимизатора с r.js -o build.js
и следующая конфигурация работает нормально:
// main.js file
requirejs.config({
baseUrl: '../bower_components',
paths: {
'domready': 'domready/ready',
'jquery': 'jquery/jquery',
}
});
requirejs(['domready', 'jquery'], function (domReady, $) {
domReady(function () {
});
});
// build.js file
({
baseUrl: "bower_components",
name: "./almond/almond",
include: "./../public/main",
out: "build/main.js",
paths: {
'domready': 'domready/ready',
'jquery': 'jquery/jquery',
},
preserveLicenseComments: false
})
Однако, если я удалю paths
конфигурация в build.js
это больше не работает:
Отслеживание зависимостей для: ./almond/almond Ошибка: ENOENT, нет такого файла или каталога 'C:\Users\Marco\Documents\Progetti\nodejs-opt\bower_components\domready.js' В дереве модулей: ../public/main
Ошибка: Ошибка: ENOENT, такого файла или каталога нет: C: \ Users \ Marco \ Documents \ Progetti \ nodejs-opt \ bower_components \ domready.js 'В дереве модулей: ../public/main
at Object.fs.openSync (fs.js:427:18)
Я хотел бы быть СУХИМ, избегая добавления зависимости дважды. Это возможно?
1 ответ
Если вы хотите использовать ту же конфигурацию из кода времени выполнения, чтобы найти расположение своих библиотек, вы можете использовать параметр mainConfigFile:
... если вы предпочитаете, чтобы конфигурация "основного" файла JS читалась для сборки, чтобы вам не приходилось дублировать значения в отдельной конфигурации, задайте для этого свойства расположение этого основного файла JS. Будет использован первый вызов requirejs({}), require({}), requirejs.config({}) или require.config({}), найденный в этом файле.
Что-то вроде этого:
({
baseUrl: "bower_components",
mainConfigFile: '/some/path/main.js', // adjust path as needed
name: "./almond/almond",
include: "./../public/main",
out: "build/main.js",
preserveLicenseComments: false
})