我正在尝试使用grunt-contrib-requirejs任务启动并运行 一般来说是RequireJS的新手并且从未使用过optimizer / 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');
});
B-dep.js
console.log('b.js dependency loaded');
运行grunt requirejs
时,我收到Done, without errors.
消息,但看不到任何优化文件 - 我猜这个错误是在Gruntfile中,可能是路径。
你看到有什么东西袭击了你吗?为什么没有优化,虽然它说Done, without errors.
?
答案 0 :(得分:1)
你似乎没有告诉它优化某些东西。您应该设置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'
就是这样的原因。
答案 1 :(得分:0)
检查我的配置,这是我用来创建名为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"
]
}
}
}