我正在使用一个JSON格式的配置文件,其中包含其中一个文件更改时我连接的其他文件的名称。它到目前为止工作得很好,但我想让Grunt在配置文件更改后重新加载(我删除或添加一些内容到JSON)并更新其他任务选项(concat任务)。
这是我简化的Gruntfile.js:
module.exports = function(grunt) {
function getModules() {
var modules = grunt.file.readJSON('src/js/modules.json').modules;
for ( var module in modules ) {
if ( modules.hasOwnProperty(module) ) {
modules[module] = 'src/js/modules/' + modules[module] + '.js';
}
}
modules.push('src/js/scripts.js');
return modules;
}
var modules = getModules();
grunt.initConfig({
concat: {
options: {
separator: ';',
},
dist: {
src: modules,
dest: 'assets/js/scripts.min.js',
},
},
watch: {
js_modules: {
files: ['src/js/modules.json'],
tasks: ['reload_modules', 'concat'],
options: {
spawn: false,
livereload: true,
},
}
}
});
grunt.registerTask('reload_modules', "Reload JavaScript modules", function() {
modules = getModules();
});
};
正如您所看到的,我尝试解决了我的问题,但modules
任务中未使用更新的concat
变量。该任务使用启动grunt默认任务时加载的变量值。
答案 0 :(得分:1)
您应该能够使用grunt.config.merge
覆盖配置:
var config = {
// ...
};
grunt.config.init(config);
grunt.registerTask('reload_modules', "Reload JavaScript modules", function() {
config.concat.options.dist.src = getModules();
grunt.config.merge(config);
});