[英]Grunt reloading JSON from file and updating task options
我正在使用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();
});
};
如您所见,我已尝试解决问题,但是concat
任务中未使用更新的modules
变量。 该任务使用启动grunt默认任务时加载的变量值。
您应该能够使用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);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.