我可以在我的代码组织项目中有多个gruntjs文件吗?

我为我的项目使用gruntjs,并想知道是否有可能在我的项目中有多个grunt.js文件? 我问的原因是我的项目是这样组织的:

grunt.js | |- project1 | | | |-grunt.js | |- project2 | |- project3 (etc..) 

我想要顶级的grunt.js来构build所有的项目。 但随着项目列表的增长,我不希望我的顶级grunt.js文件变得巨大。 所以我想组织它,以便最高级的咕噜声可以调用项目级咕噜文件来构build它们。 或者如果有人想要构buildproject1,他们可以到project1文件夹并运行它自己的grunt.js。 可以这样做吗? 如果是这样,我该如何调用其他grunt文件? 如果没有,那么除了拥有一个巨大的grunt.js文件之外,还有什么其他解决scheme? 谢谢。

Solutions Collecting From Web of "我可以在我的代码组织项目中有多个gruntjs文件吗?"

有一个叫grunt-hub的咕task任务似乎在做你想做的事情。

咕噜毂:

一个Grunt任务来监视和运行多个Grunt项目的任务。

中心任务

中心任务是用于在多个项目上运行任务。 它想知道使用哪个Gruntfiles以及在每个Grunt项目上运行哪些任务。 例如,如果我想在每个Grunt项目上一个文件夹进行绒毛和testing:

我没有使用它,但它可能会满足您的要求。 你也可以考虑更低层次的,比如grunt-exec或者创build自己的任务来产生subprocess。

我最近用一个简单的解决scheme解决了这个问题。
我实现了grunt.config.merge(config)来replacegrunt.initConfig(config) 。 您可以多次调用它,它将简单地将configuration合并到一个configuration中。

更新 :从Grunt v0.4.5开始, grunt.config.merge函数是内置的,所以你不再需要把它作为一个单独的库。

这使我可以按function组织我的configuration。
我为每个function创build了一个configuration文件,例如desktop-javascripts.jsdesktop-css.jsmobile-javascripts.jsmobile-css.js
另外,它们在default-options.js共享相同的configuration,所以我可以指定压缩设置,而不是。

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' ] } } }); }; 

我知道这个问题可能会很久,但我想澄清一下,有一种方法可以用适当的方式来组织代码。

为了防止这样的多呼叫:

 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'); 

将它们replace为:

 require('load-grunt-tasks')(grunt); 

并使用:

 grunt-config-dir 

从文件夹运行任务。

要了解更多信息, 请查看。