我正在尝试创建一个 Jade 任务,该任务将具有一个具有非常相似选项的构建和开发任务,除了一个开发布尔值和不同的目的地。我能够实现这一目标的最简单方法是:
jade: {
dev: {
options: {
data: {
dev: true, // dev true
config: ...,
pkg: ...,
helpers: ...
}
},
files: [{
dest: '<%= config.workingDir %>',
...
}]
},
build: {
options: {
data: { // no dev
config: ...,
pkg: ...,
helpers: ...
}
},
files: [{
dest: '<%= config.buildDir %>',
...
}]
}
}
不过,这里有相当多的重复,特别是如果我想在轨道上添加更多选项。因此,我正在尝试创建一个可以从命令行和监视任务中工作的构建任务。
我得到的最接近的是这个设置,我可以从命令行运行grunt jade --dev
,但不能在监视任务中设置开发布尔值。
build: {
options: {
data: {
dev: '<%= grunt.option("dev") %>',
config: ...,
pkg: ...,
helpers: ...
}
},
files: [{
dest: '<%= grunt.option("dev") ? config.workingDir : config.buildDir %>',
...
}]
}
监视任务:
watch: {
jade: {
...
tasks: ['jade'] // the option is false
}
}
我还尝试创建一个自定义任务来设置选项然后运行 watch,在监听 watch 事件时我可以看到选项设置正确
grunt.registerTask('dev', 'Grunt dev mode', function(){
grunt.option('dev', true);
grunt.task.run('watch');
});
grunt.event.on('watch', function(action, filepath, target) {
console.log(grunt.option('dev')); // true
});
即使日志将 dev 布尔值显示为 true,也会传递错误的任务选项。那么,综上所述,我是要以正确的方式设置选项,还是只是坚持执行重复相同信息的构建和开发任务?
我也尝试过使用 grunt.util._.expand 方法,但收效甚微。
data: "<%= grunt.util._.extend(jade.options.data, {dev: true}) %>",