我正在尝试使用Grunt、usemin 2、requirements和uglify。我在构建中观察到的是,requirements没有正确地将我的依赖项包含到我的单个连接构建文件中。当我从/dist中运行index.html时,我看到在寻找'jquery', 'app'和一些第三方js文件时出现错误,或者有时"define is not defined"。
我读了下面关于grunt-usemin和删除require块的问题,但是这些线程中仍然存在一些问题。
- 处理RequireJS, concat, uglify的推荐方法
- 如何处理v2.0中的需求
我继续搜索,发现了这篇文章《如何集成Yeoman和Requirejs》,当我从使用grunt-contrib- requirerequirements改为grunt- requirerequirements时,我看到Requirejs优化器在运行。不幸的是,我仍然看到这些错误:
Uncaught ReferenceError: define is not defined.
在我的index.html中有以下内容:
<!-- build:js js/main.js -->
<script src="bower_components/requirejs/require.js"></script>
<script src="js/main.js"></script>
<!-- endbuild -->
这是我的Grunt文件:http://jsbin.com/futocusu/3/edit?js
在第112期中有关于创建一篇关于使用Yeoman的文章的讨论,但我认为它还没有写出来。
有没有人想出最好的方法来使用usemin v2与grunt和需求输出到一个单一的concat+uglify文件上构建?我也不确定使用grunt-contrib- requires和grunt- requires有什么区别,以及何时使用哪一个。
看起来好像你在main.js中做得太多了。
我在Gruntfile.js
中有以下构建任务grunt.registerTask('build', [
'copy', // copies the src directory to dist (htdocs)
'requirejs', // do an r.js build to concat modular dependencies
'concat:head', // concats js in the head
'uglify:head', // compresses js in the head
'uglify:foot', // compresses js in the foot
'cssmin', // minifies and concats css
'usemin', // runs through html and inputs minified js and css
'clean:afterBuild' // deletes files that are not required for build
]);
下面是每个相关的Grunt任务(对我来说,这些任务存储在单独的文件中,因为我使用load-grunt-config)。如果你想在你的gruntfile中使用这些,那么你所需要做的就是抓取返回对象中的所有内容,并将其粘贴到gruntfile中的任务值中:
module.exports = function (grunt, options) {
return {
main: {
cwd: 'src/',
src: '**',
dest: 'dist/',
expand: true,
flatten: false
},
};
};
requirejs
module.exports = function(grunt, options) {
return {
compile: {
options: {
appDir: "src/to/require/app",
baseUrl: "./",
mainConfigFile: "src/to/require/app/common",
dir: "dist/to/require/app",
// build a common layer
modules: [
{
"name": "common"
}
]
}
}
};
};
concat
module.exports = function (grunt, options) {
return {
head: {
/* other stuff */
},
foot: {
src: [
'dist/to/require/app/some_other_js.js',
'dist/to/require/app/external/require.js',
'dist/to/require/app/external/require.text.js',
'dist/to/require/app/common.js'
],
dest: 'src/to/require/app/compiled_footer_js.js',
}
};
};
糟蹋
module.exports = function (grunt, options) {
return {
head: {
/* other stuff *
},
foot: {
files: {
'src/to/require/app/compiled_footer_js.min.js': ['src/to/require/app/compiled_footer_js.js']
}
}
};
};
usemin
module.exports = function (grunt, options) {
return {
html: [
'src/path/to/index.html'
]
};
};