3

我正在编写一个 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']

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

['test/common/data/common1.json',
 'test/common/data/common2.json',
 'test/prod/data/prod.json']
4

1 回答 1

2

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

在我的插件中,我可以通过该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以查看所有代码。

于 2013-03-23T03:31:44.400 回答