GruntJS,多任务和grunt.option

我开始为我的一个项目使用GruntJS。 我轻而易举地完成了使用简单的别名编写一个简单的构build脚本。

然而,我的脚本包含许多基本相同的任务,唯一的区别是一些参数,如源文件夹和目标文件夹。

例如:

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来实现这个function:

 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日志输出params的正确值,但只有html3 sass被编译。

我不明白为什么只有其中一个项目被编译,我怎么解决这个问题。

也许有另一种方法来解决这个问题。 一个更好的方法。 也许使用模板?

任何forms的帮助或提示将不胜感激。

谢谢!

只有最后一个configuration被使用,因为grunt.task.run队列它们在当前任务完成运行。 从API :

排队一个或多个任务。 taskList中的每个指定任务将在当前任务完成后立即运行,并按指定的顺序运行

你有什么是:

  • 设置configuration1
  • 设置configuration2
  • 设置configuration3
  • 使用当前活动的configuration(#3)运行三个任务。

相反,你可以做这样的事情dynamic地创build大量的configuration部分,然后运行这些任务:

 grunt.config.set('sass.' + proj + '.files', [{ src: 'sass/' + proj + '.sass', dest: 'build/' + proj + '/css/main.css' }]); 

然后用新创build的部分调用runtask:

 grunt.task.run('sass:' + proj);