4

我开始在我的一个项目中使用 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 被编译。

我不明白为什么只有一个项目被编译,我该如何解决这个问题。

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

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

谢谢!

4

1 回答 1

6

仅使用最后一个配置,因为 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);
于 2013-05-19T21:06:42.803 回答