14

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

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

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

4

3 回答 3

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

};
于 2014-01-23T08:06:37.370 回答
14

有一个名为grunt-hub的 grunt 任务似乎可以做你想做的事情。

咕噜中心:

一个 Grunt 任务,用于监视和运行多个 Grunt 项目的任务。

枢纽任务

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

我没用过,但它可能满足你的要求。此外,您可能希望研究更低级别的内容,例如grunt-exec或创建自己的任务以生成子进程。

于 2012-12-04T01:26:40.950 回答
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

从文件夹运行任务。

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

于 2015-04-11T22:44:53.763 回答