为什么我的 grunt-contrib-requirejs 没有优化任何东西?
Why does my grunt-contrib-requirejs does not optimize anything?
我正在努力起床 运行 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
我已经在浏览器中对其进行了测试,所有依赖项都已正确加载。
我的 Grunt 文件:
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.
?
检查我的配置,这是我用来创建名为 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"
]
}
}
}
你似乎没有告诉它优化某事。您应该设置一个 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
是不够的,因为这只告诉优化器应该从哪里获取 运行时配置 。它不会告诉优化器该文件是一个模块。请注意 name
中缺少 .js
扩展名不是错误。您应该避免在模块名称中使用扩展,除非有特定的原因需要扩展。 name
是相对于 baseUrl
所以这就是为什么它是 'main'
而不是 'js/main'
.
我正在努力起床 运行 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
我已经在浏览器中对其进行了测试,所有依赖项都已正确加载。
我的 Grunt 文件:
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.
?
检查我的配置,这是我用来创建名为 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"
]
}
}
}
你似乎没有告诉它优化某事。您应该设置一个 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
是不够的,因为这只告诉优化器应该从哪里获取 运行时配置 。它不会告诉优化器该文件是一个模块。请注意 name
中缺少 .js
扩展名不是错误。您应该避免在模块名称中使用扩展,除非有特定的原因需要扩展。 name
是相对于 baseUrl
所以这就是为什么它是 'main'
而不是 'js/main'
.