我正在为我的项目使用gruntjs,并想知道我的项目中是否可以有多个grunt.js文件?我问的原因是我的项目是这样组织的:
grunt.js
|
|- project1
| |
| |-grunt.js
|
|- project2
|
|- project3 (etc..)
我希望顶级grunt.js构建所有项目。但是随着项目列表的增长,我不希望我的顶级grunt.js文件变得庞大。所以我想组织它,以便顶级grunt可以调用项目级别的grunt文件来构建它们。或者,如果有人想要构建project1,他们可以转到project1文件夹并运行它自己的grunt.js。可以这样做吗?如果是这样,我该如何调用其他grunt文件?如果没有,那么除了拥有一个巨大的grunt.js文件之外,还有什么替代解决方案?感谢。
答案 0 :(得分:15)
我最近用一个非常简单的解决方案解决了这个问题
我实施了grunt.config.merge(config)
来替换grunt.initConfig(config)
。你可以多次调用它,它只是将配置合并到一个配置中。
更新:从Grunt v0.4.5开始,grunt.config.merge
函数是内置的,因此您不再需要将其作为单独的库包含。
这允许我按功能组织我的配置
我为每个功能创建了一个配置文件,例如desktop-javascripts.js
,desktop-css.js
,mobile-javascripts.js
,mobile-css.js
。
此外,它们在default-options.js
中共享通用配置,因此我可以指定压缩设置,而不是。
Gruntfile.js:
module.exports = function(grunt) {
require('./default-options.js')(grunt);
require('./desktop-javascripts.js')(grunt);
require('./desktop-css.js')(grunt);
require('./mobile-javascripts.js')(grunt);
require('./mobile-css.js')(grunt);
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-watch');
};
桌面javascripts.js:
module.exports = function(grunt) {
// Configure all JavaScript tasks:
grunt.registerTask('desktop-javascripts', [ 'concat:JS', 'jshint' ]);
grunt.config.merge({
concat: { 'JS': { files: allJS } },
jshint: { 'JS': { files: allJS } },
watch: { 'JS': { files: allJS, tasks: [ 'desktop-javascripts' ] } }
});
};
答案 1 :(得分:13)
有一项名为grunt-hub的咕噜咕噜任务,似乎可以做你想做的事。
咕噜毂:
在多个Grunt项目上观察和运行任务的Grunt任务。
中心任务
中心任务用于在多个项目上运行任务。它想知道使用哪个Gruntfiles以及在每个Grunt项目上运行哪些任务。例如,如果我想在每个Grunt项目中对一个文件夹进行lint和测试:
我没有使用它,但它可能符合您的要求。此外,您可能希望查看更低级别,例如 grunt-exec 或创建自己的任务以生成子进程。
答案 2 :(得分:0)
我知道这个问题可能已经过时了,但我想澄清一下如何以正确的方式组织代码。
为了防止这样的多次通话:
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-qunit');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-concat');
将其替换为:
require('load-grunt-tasks')(grunt);
并使用:
grunt-config-dir
从文件夹运行任务。
要了解更多信息,check this out.