Javascript 我的项目中是否可以有多个gruntjs文件用于代码组织?

Javascript 我的项目中是否可以有多个gruntjs文件用于代码组织?,javascript,node.js,gruntjs,Javascript,Node.js,Gruntjs,我正在为我的项目使用gruntjs,我想知道在我的项目中是否可能有多个grunt.js文件?我问的原因是我的项目是这样组织的: grunt.js | |- project1 | | | |-grunt.js | |- project2 | |- project3 (etc..) 我想要顶级的grunt.js来构建所有的项目。然而,随着项目列表的增加,我不希望我的顶级grunt.js文件变得庞大。所以我想组织它,以便顶级grunt可以调用项目级grunt文件来构建它们。或者,如果有人想要

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

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

我想要顶级的grunt.js来构建所有的项目。然而,随着项目列表的增加,我不希望我的顶级grunt.js文件变得庞大。所以我想组织它,以便顶级grunt可以调用项目级grunt文件来构建它们。或者,如果有人想要构建project1,他们可以转到project1文件夹并运行它自己的grunt.js。这能做到吗?如果是,我如何调用其他grunt文件?如果没有,那么除了拥有一个巨大的grunt.js文件之外,还有什么替代方案?谢谢。

有一个叫grunt的任务,它似乎在做你想做的事情

格伦特枢纽: 用于在多个Grunt项目上监视和运行任务的Grunt任务

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


我没有用过,但它可能符合你的要求。此外,您可能还想研究更低级的问题,例如grunt exec,或者创建自己的任务来生成子进程。

我最近用一个非常简单的解决方案解决了这个问题。
我实现了
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
中共享公共配置,因此我可以指定压缩设置以及其他设置

例子 Grunfile.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');

};
desktop-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');
替换为:

require('load-grunt-tasks')(grunt);
和使用:

grunt-config-dir
从文件夹中运行任务


要了解更多信息,

对于单个项目来说,这似乎是一个更好的解决方案(如问题的措辞)