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

时间:2012-12-04 00:47:47

标签: javascript node.js gruntjs

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

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

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

3 个答案:

答案 0 :(得分:15)

我最近用一个非常简单的解决方案解决了这个问题 我实施了grunt.config.merge(config)来替换grunt.initConfig(config)。你可以多次调用它,它只是将配置合并到一个配置中。

更新:从Grunt v0.4.5开始,grunt.config.merge函数是内置的,因此您不再需要将其作为单独的库包含。

这允许我按功能组织我的配置 我为每个功能创建了一个配置文件,例如desktop-javascripts.jsdesktop-css.jsmobile-javascripts.jsmobile-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.