Require.js создает не конкатенационные скрипты, загруженные с помощью Jam
Следуя одной из глав "Разработка Backbone.js Apllication" Эдди Османи (O'Reilly) о Grunt-BBB (Backbone Boilerplate Buddy), я просто не смог создать профиль сборки.
Вот дерево файловой системы, используемое для этого:
/builds
/closure
/rhino
/config
/build.js
build.sh
/development
/* Grunt-BBB files after init */
/app
/styles
index.css
app.js
config.js
main.js
router.js
/test
/* Not important files used for testing */
/vendor
/h5bp
/css
main.css
normalize.css
/jam
/backbone
backbone.js
package.json
/bakbone.layoutmanager
bakbone.layoutmanager.js
package.json
/jquery
jquery.js
package.json
/lodash
lodash.js
lodash.min.js
lodash.underscore.min.js
package.json
require.config.js
require.js
/js
/libs
almond.js
require.js
/distribution
/* Empty dist directory where the optimized / minified / concatenated files should go */
Вот шаги, которые я следовал в /development
каталог:
1) Установить Grunt-BBB (npm install -g bbb
)
2) Загрузите r.js, часть проекта Require.js (git clone https://github.com/backbone-boilerplate/grunt-bbb
)
3) Инициализировать файлы шаблона (bbb init
)
Вот файл build.js, который я использовал для настройки загрузчика AMD r.js для компилятора Google Closure:
({
appDir: '../../development',
baseUrl: 'app',
dir: '../../distribution',
optimize: 'closure', // 'uglify2'
paths: {
backbone: '../vendor/jam/backbone/backbone',
'backbone.layoutmanager': '../vendor/jam/backbone.layoutmanager/backbone.layoutmanager',
jquery: '../vendor/jam/jquery/jquery',
lodash: '../vendor/jam/lodash/backbone.min'
},
modules: [
{
name: 'main'
}
],
onBuildRead: function(moduleNames, path, contents) {
return contents;
//return contents.replace(/console\.log\(([^\)]+)\);/g, '')
// .replace(/debugger;/, '');
}
})
и это файл build.sh, который я использую:
#!/usr/bin/env bash
# r.js directory
RJSDIR="r.js"
RJS="$RJSDIR/dist/r.js"
# Rhino directory
RHINODIR="rhino"
RHINO="$RHINODIR/js.jar"
# Google Closure Compiler directory
CLOSUREDIR="closure"
CLOSURE="$CLOSUREDIR/compiler.jar"
# Build config directory
CONFIGDIR="config"
CONFIG="$CONFIGDIR/build.js"
# Launch compillation
java -Xms256m -Xmx256m -classpath "$RHINO":"$CLOSURE" org.mozilla.javascript.tools.shell.Main "$RJS" -o "$CONFIG" $@
Моя цель - оптимизировать, минимизировать, объединить все файлы JavaScrit, включая библиотеки и шаблоны (которых у меня еще нет, я использую только шаблоны), а также файлы CSS.
Результат, который я получаю, бегая ./build.sh
заключается в том, что все файлы правильно минимизированы (кроме встраивания правил CSS, но это не имеет значения) и объединены, но ресурсы, которые загружаются и управляются Jam (диспетчером пакетов, который объединяет NPM и Require.js), не объединяются.
Причина в том, что, поскольку они уже загружены / управляются Jam, они не объявляются повторно в файлах JavaScript в стиле AMD.
В заключение мои вопросы следующие:
Как я могу переписать мой
build.js
файл конфигурации, чтобы ресурсы, загруженные Jam, также были включены и объединены в файле release / dist?Как сделать так, чтобы объединенные ресурсы не копировались в каталог realse / dist? Можно ли настроить это в
build.js
файл или это должно идти в моемbuild.sh
файл?
Редактировать: новый файл build.js:
({
appDir: '../../development',
baseUrl: 'app',
dir: '../../distribution',
optimize: 'closure', // 'uglify2'
paths: {
requirejs : '../vendor/jam/require',
backbone: '../vendor/jam/backbone/backbone',
'backbone.layoutmanager': '../vendor/jam/backbone.layoutmanager/backbone.layoutmanager',
jquery: '../vendor/jam/jquery/jquery',
lodash: '../vendor/jam/lodash/backbone.min'
},
name: 'main',
include: ['requirejs'],
onBuildRead: function(moduleNames, path, contents) {
return contents;
//return contents.replace(/console\.log\(([^\)]+)\);/g, '')
// .replace(/debugger;/, '');
}
})
А вот и ошибка:
file:///vendor/js/libs/require.jsFailed to load resource: The requested URL was not found on this server.
file:///app/styles/index.cssFailed to load resource: The requested URL was not found on this server.
1 ответ
require.js никогда не включается в r.js, если вы не указали это сделать. Смотрите эту ссылку:
http://requirejs.org/docs/optimization.html
Ссылка относится к параметрам командной строки, но параметры файла компоновки в целом такие же:
вам нужно определить фиктивный модуль для require.js в ваших путях:
paths: {
requireLib : '/path/to/require.js'
backbone: '../vendor/jam/backbone/backbone',
'backbone.layoutmanager': '../vendor/jam/backbone.layoutmanager/backbone.layoutmanager',
jquery: '../vendor/jam/jquery/jquery',
lodash: '../vendor/jam/lodash/backbone.min'
},
и включите это:
name "main",
include: ["requireLib"],
Вы можете убедиться, что все исключенные зависимости разрешены, установив:
findNestedDependencies: true,
Вы можете настроить выходной путь, используя 'out' в вашем файле сборки
out: "path/to/my/builtfile-1.0.0.js",
Извините, я не знаю достаточно о джеме, чтобы сказать, будет ли джем отменять эту настройку
_Pez