我在项目中添加了Grunt构建自动化。
我创建了一个自定义任务,为其他任务设置变量,现在我想使用我设置的值运行任务。
grunt.registerTask('dist-flow', function () {
if (!grunt.option('env')) {
grunt.option('env', 'prod');
console.log(grunt.option('env'));
}
grunt.registerTask('dist',['dev_prod_switch']);
grunt.task.run('distdev');
});
但每当我运行dist-flow
任务时,它会将env
设置为prod
,但dev_prod_switch
始终采用我为dev_prod_switch
设置的默认值。
所以我想从任务中设置选项并使用新值运行特定任务。
答案 0 :(得分:3)
根据您的问题和评论,我假设您的Gruntfile.js
看起来像这样。
module.exports = function(grunt) {
grunt.initConfig({
dev_prod_switch: {
options: {
environment: grunt.option('env') || 'dev',
env_char: '#',
env_block_dev: 'env:dev',
env_block_prod: 'env:prod'
},
all: {
files: {
'appCommon/config.js': 'appCommon/config.js',
}
}
},
});
grunt.registerTask('dist-flow', function () {
if (!grunt.option('env') ) {
grunt.option('env', 'prod');
console.log(grunt.option('env'));
}
grunt.registerTask('dist',['dev_prod_switch']);
grunt.task.run('distdev');
});
};
您的问题是您尝试在任务中设置option
,并在initConfig
对象中将其读回。问题是,initConfig
在您的任务之前运行,因此在运行environment
任务时dist-flow
已设置为默认值。
environment: grunt.option('env') || 'dev',
grunt.option('env', 'prod');
在您的任务中,您可以通过grunt.config
访问您的配置选项,因此您可以像这样修改配置对象中的值。
grunt.config.data.dev_prod_switch.options.environment = grunt.option('env');
module.exports = function(grunt) {
grunt.initConfig({
dev_prod_switch: {
options: {
environment: grunt.option('env') || 'dev',
env_char: '#',
env_block_dev: 'env:dev',
env_block_prod: 'env:prod'
},
all: {
files: {
'appCommon/config.js': 'appCommon/config.js',
}
}
},
});
grunt.registerTask('dist-flow', function () {
if (!grunt.option('env') ) {
grunt.option('env', 'prod');
console.log(grunt.option('env'));
grunt.config.data.dev_prod_switch.options.environment = grunt.option('env');
console.log(grunt.config.data.dev_prod_switch.options.environment);
}
grunt.registerTask('dist',['dev_prod_switch']);
grunt.task.run('distdev');
});
};