在一个grunt插件中,如何获得一个全局和目标特定选项的组合?

时间:2013-03-23 03:31:44

标签: javascript node.js plugins gruntjs

我正在编写一个grunt插件,其中包含可以是值数组的选项。值特别是文件(与任务本身的files属性中指定的文件不同)。我的任务设置如下所示:

grunt.initConfig({
    assemble: {
      options: {
        data: ['test/common/data/common1.json', 'test/common/data/common2.json']
      },
      dev: {
        options: {
          data: ['test/dev/data/dev.json']
        },
        files: {
          'test/actual': ['test/files/dev.hbs']
        }
      },
      prod: {
        options: {
          data: ['test/prod/data/prod.json']
        },
        files: {
          'test/actual': ['test/files/prod.hbs']
        }
      },
    }

});

在我的插件中,我希望能够获取数据选项,其中包含全局选项和目标选项中指定的所有文件的列表。

对于开发目标grunt assemble:dev,我会在this.options.data

中看到这一点
['test/common/data/common1.json',
 'test/common/data/common2.json',
 'test/dev/data/dev.json']

对于产品目标grunt assemble:prod,我会在this.options.data

中看到这一点
['test/common/data/common1.json',
 'test/common/data/common2.json',
 'test/prod/data/prod.json']

1 个答案:

答案 0 :(得分:1)

我找到了解决这个问题的方法,但我不确定它是否是最佳选择。

在我的插件中,我可以通过grunt.config方法访问全局和目标特定选项。

var globalDataFiles = grunt.config(['assemble', 'options', 'data']) || [];
var targetDataFiles = grunt.config(['assemble', this.target, 'options', 'data']) || [];

使用lodash ... var _ = require('lodash');

我可以联合数组:

var data = _.union(globalDataFiles, targetDataFiles);

我在插件中做了一些,但这就是我最初解决这个问题的方法。

请查看https://github.com/assemble/assemble/blob/master/tasks/assemble.js以查看所有代码。