我开始在我的一个项目中使用 GruntJS。 我已经很容易地使用简单的别名编写了一个简单的构建脚本。
但是我的脚本包含许多基本相同的任务,唯一的区别是一些参数,例如源文件夹和目标文件夹。
例如:
sass: {
options:{
trace: true,
debugInfo: true,
style: 'compressed'
},
html: {
files: {
'build/html/css/main.css': 'sass/html.sass'
}
},
html2: {
files: {
'build/html2/css/main.css': 'sass/html2.sass'
}
},
html3: {
files: {
'build/html3/css/main.css': 'sass/html3.sass'
}
}
}
我想实现的是只有一个任务,然后将参数 (dest,src) 传递给该任务。
我尝试使用 MultiTasks 来实现:
grunt.registerTask('sass2', 'Run all Sass compilation tasks.', function() {
var projects = ['html','html2','html3'];
projects.forEach(function(proj){
grunt.config.set('sass.files.dest', 'build/' + proj + '/css/main.css');
grunt.config.set('sass.files.src', 'sass/' + proj + '.sass');
grunt.log.writeln(grunt.config.get('sass.files.dest'));
grunt.log.writeln(grunt.config.get('sass.files.src'));
grunt.task.run('sass');
});
});
Grunt 日志为参数输出正确的值,但是只有 html3 sass 被编译。
我不明白为什么只有一个项目被编译,我该如何解决这个问题。
也许还有另一种方法可以解决这个问题。一个更好的方法。也许使用模板?
如有任何帮助或提示,我们将不胜感激。
谢谢!
最佳答案
仅使用最后一个配置,因为 grunt.task.run 将它们排入队列以在当前任务完成后运行。来自API :
排队一项或多项任务。 taskList 中的每个指定任务将在当前任务完成后立即按照指定的顺序运行
你拥有的是:
- 设置配置 1
- 设置配置2
- 设置配置3
- 使用当前事件的配置运行三个任务,即 #3。
相反,您可以执行类似这样的操作来动态创建大量配置部分,然后运行这些任务:
grunt.config.set('sass.' + proj + '.files', [{
src: 'sass/' + proj + '.sass',
dest: 'build/' + proj + '/css/main.css'
}]);
然后用您新创建的部分调用 runtask:
grunt.task.run('sass:' + proj);
关于javascript - GruntJS、多任务和 grunt.option,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16634486/