javascript - GruntJS、多任务和 grunt.option

标签 javascript node.js gruntjs

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

相关文章:

node.js - 找不到模块 'angular2/angular2'

javascript - Nodejs 和 express 无法定位资源文件(CSS & JS 文件)

node.js - NPM 可以在 `npm install` 命令后建议附加和可选包吗?

node.js - 带有 grunt 的 Nodeunit 找不到模块 'tap'

javascript - 未找到服务中的 Angular 7 类

javascript - 我可以让不同的浏览器以相同的方式显示 HTML 表单错误消息吗?

gruntjs - Grunt版本不包含dist文件夹中的Bower组件

gruntjs - grunt cssmin 保留一个非缩小版本

javascript - Jquery/Javascript 数据表 : How to display row data into html textfield on row selection

javascript - jquery 获取自定义(编造的)属性值