Javascript GruntJS、多任务和grunt.option

Javascript GruntJS、多任务和grunt.option,javascript,node.js,gruntjs,Javascript,Node.js,Gruntjs,我开始在我的一个项目中使用GruntJS。 我已经很容易地用简单的别名编写了一个简单的构建脚本 但是,我的脚本包含许多基本相同的任务,唯一的区别是一些参数,如源文件夹和目标文件夹 例如: sass: { options:{ trace: true, debugInfo: true, style: 'compressed' }, html: { f

我开始在我的一个项目中使用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)传递给该任务

我尝试使用多任务来实现这一点:

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将它们排队,以便在当前任务完成后运行。从:

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

你所拥有的是:

  • 设置配置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);

谢谢你的提示!你差点就成功了。你的代码不起作用。经过一些尝试后,这就是工作代码:grunt.config.set('sass.+proj+'.files',[{src:'sass/'+proj+'.sass',dest:'build/'+proj+'/css/main.css'}]);然后只需调用grunt.task.run('sass:'+proj)@Mike,谢谢,更新了上面的第一个代码片段,这样以后找到这个答案的任何人都可以更轻松地使用它。你也可以考虑把这个标记为被接受的答案。