我想在我的Grunt任务的配置中定义变量,这些变量正在被我的任务取代。
我的用例是我尝试根据包含多个站点配置的config.json创建单独的JS输出文件。
我的配置示例:
extractProjectConfigs: {
options: {
merge: '<%= yeoman.dist %>/extracted.js',
configWrapper: 'window.config = {{ extractedConfig }};'
},
prod: {
src: ['./config/*.json'],
dest: '.tmp/scripts/{{ configKey }}/searchbox.js'
}
}
在我的extractProjectConfigs
任务中,我定义了变量configKey
和extractedConfig
,并且我希望两者的值都在我的配置中。
我怎样才能做到这一点?我已经尝试在我的配置定义(即<%= extractedConfig %>
或<%= configKey %>
)中包含Grunt模板,但由于Grunt模板在将变量传递给我的任务之前解析变量,它基本上意味着我的变量变成空字符串。
答案 0 :(得分:1)
原来Grunt模板是正确的方法。 Grunt模板在将<%= %>
传递给任务之前解析由extractProjectConfigs: {
options: {
merge: '<%= yeoman.dist %>/extracted.js',
configWrapper: 'window.config = {{= extractedConfig }};'
},
prod: {
src: ['./config/*.json'],
dest: '.tmp/scripts/{{= configKey }}/searchbox.js'
}
}
定义的变量。但是,Grunt模板还提供了一种确定自己的变量分隔符的方法,它允许您在任务运行后使用Grunt模板进行解析,这意味着我可以在配置中使用变量。
我最终使用了以下配置:
function parseTemplate(template, vars) {
grunt.template.addDelimiters('double-brackets', '{{', '}}');
return grunt.template.process(template, {
data: vars,
delimiters: 'double-brackets'
});
}
在我的任务中,我使用以下自定义Grunt模板函数来解析配置:
var dest = parseTemplate(file.dest, {
projectKey: 'foo'
});
然后可以在任务中使用此功能,例如:
grunt.file.write
然后可以在grunt.file.write(dest, 'write something to dest with projectKey replaced by foo');
:{{1}}