Почему мой grunt-contrib-requirejs ничего не оптимизирует?
Я пытаюсь начать работу с задачей https://github.com/gruntjs/grunt-contrib-requirejs.
Будучи новичком в RequireJS в целом и никогда не использовав оптимизатор /r.js, я действительно запутался, как заставить это работать.
Для начала я настроил простую структуру каталогов:
root
├── js
│ ├── helper
│ │ ├── a.js
│ │ ├── b.js
│ │ └── d-dep.js
│ └── main.js
├── node_modules
│ └── [dependencies from package.json]
├── Gruntfile.js
└── package.json
Я проверил это в браузере, и все зависимости загружены там правильно.
Мой Gruntfile:
module.exports = function(grunt) {
grunt.config.init({
requirejs: {
options: {
baseUrl: 'js/',
mainConfigFile: 'js/main.js',
dir: 'target/',
keepBuildDir: true
}
}
});
require('load-grunt-tasks')(grunt);
}
main.js:
require(["helper/a", "helper/b"], function(util) {
console.log('main.js loaded');
});
a.js
console.log('a.js loaded');
b.js
define(['js/helper/b-dep.js'], function(bdep) {
console.log('b.js loaded');
});
б-dep.js
console.log('b.js dependency loaded');
При беге grunt requirejs
Я получаю Done, without errors.
сообщение, но не вижу ни одного оптимизированного файла - я предполагаю, что ошибка в Gruntfile, возможно, с путем.
Вы видите что-нибудь, что поражает вас? Почему ничего не оптимизировано, хотя написано Done, without errors.
?
2 ответа
Вы, кажется, не говорите, чтобы что-то оптимизировать. Вы должны иметь name
опция, установленная, чтобы сказать, что является основным модулем. Также вам не хватает одного уровня конфигурации в конфигурации, которую вы передаете grunt. options
объект должен быть внутри более конкретной цели, например compile
:
requirejs: {
compile: { // <<== nest the options in this.
options: {
baseUrl: 'js/',
mainConfigFile: 'js/main.js',
name : 'main', // <<=== add this
dir: 'target/',
keepBuildDir: true
}
}
}
Настройка mainConfigFile
недостаточно, потому что это говорит оптимизатору, откуда он должен получить конфигурацию времени выполнения. Он не сообщает оптимизатору, что файл является модулем. Обратите внимание, что отсутствие .js
расширение в name
это не ошибка Вам следует избегать использования расширения в именах модулей, если только нет особой причины, которая требует расширения. А также name
относительно baseUrl
так вот почему 'main'
не 'js/main'
,
Проверьте мой конфиг, это то, что я использую для создания файла с именем all.js
requirejs : {
dist : {
options : {
waitSeconds : 0,
baseUrl : "./app/",
name : 'assets/js/main',
mainConfigFile: 'app/assets/js/main.js',
out : "dist/assets/js/all.js",
optimize : "uglify2",
inlineText : true,
findNestedDependencies : true,
paths : {
requireLib : "assets/bower_components/requirejs/require",
},
include : [
"requireLib"
]
}
}
}