【问题标题】:grunt dynamic task on watch event监视事件上的 grunt 动态任务
【发布时间】:2014-11-28 16:52:35
【问题描述】:

嗨,我有一个问题,我需要为不同的目录观看更少的任务。 我需要一种方法来编辑较少的任务,而不是复制它们,我需要在其中使用变量 dir。

这是我的代码:

module.exports = function(grunt) {

grunt.initConfig({
    pkg : grunt.file.readJSON('package.json'),

    dirLess : 'less',
    dirCss : 'css',
    dirImages : 'images',
    dirDT : 'theme-cdt',
    dirPB : 'theme-cpb',
    dirMCS : 'theme-cmcs',
    dirSprites : '<%= dirImages %>/sprites',
    dirIconFont : './fonts',
    dirCssMin : '<%= dirCss %>/min',
    less : {
        devDT : {
            options : {
                outputSourceFiles: true,
                sourceMap : true,
                sourceMapFilename : '<%= dirDT %>/<%= dirCss %>/style.css.map',
                sourceMapBasepath : '<%= dirDT %>/<%= dirCss %>/',
            },
            files : {
                '<%= dirDT %>/<%= dirCss %>/style.css' : '<%= dirDT %>/<%= dirLess %>/style.less'
            },
        },
        devIeDT : {
            files : {
                '<%= dirDT %>/<%= dirCss %>/style-ie9-bootstrap.css': '<%= dirDT %>/<%= dirLess %>/style-bootstrap.less',
                '<%= dirDT %>/<%= dirCss %>/style-ie9-common.css': '<%= dirDT %>/<%= dirLess %>/style-common.less',
                '<%= dirDT %>/<%= dirCss %>/style-ie9-view.css': '<%= dirDT %>/<%= dirLess %>/style-view.less',
                '<%= dirDT %>/<%= dirCss %>/style-ie8.css': '<%= dirDT %>/<%= dirLess %>/style-ie8.less'
            },
        },
        devPB : {
            options : {
                outputSourceFiles: true,
                sourceMap : true,
                sourceMapFilename : '<%= dirPB %>/<%= dirCss %>/style.css.map',
                sourceMapBasepath : '<%= dirPB %>/<%= dirCss %>/',
            },
            files : {
                '<%= dirPB %>/<%= dirCss %>/style.css' : '<%= dirPB %>/<%= dirLess %>/style.less'
            },
        },
        devIePB : {
            files : {
                '<%= dirPB %>/<%= dirCss %>/style-ie9-bootstrap.css': '<%= dirPB %>/<%= dirLess %>/style-bootstrap.less',
                '<%= dirPB %>/<%= dirCss %>/style-ie9-common.css': '<%= dirPB %>/<%= dirLess %>/style-common.less',
                '<%= dirPB %>/<%= dirCss %>/style-ie9-view.css': '<%= dirPB %>/<%= dirLess %>/style-view.less',
                '<%= dirPB %>/<%= dirCss %>/style-ie8.css': '<%= dirPB %>/<%= dirLess %>/style-ie8.less'
            },
        },
        devMCS : {
            options : {
                outputSourceFiles: true,
                sourceMap : true,
                sourceMapFilename : '<%= dirMCS %>/<%= dirCss %>/style.css.map',
                sourceMapBasepath : '<%= dirMCS %>/<%= dirCss %>/',
            },
            files : {
                '<%= dirMCS %>/<%= dirCss %>/style.css' : '<%= dirMCS %>/<%= dirLess %>/style.less'
            },
        },
        devIeMCS : {
            files : {
                '<%= dirMCS %>/<%= dirCss %>/style-ie9-bootstrap.css': '<%= dirMCS %>/<%= dirLess %>/style-bootstrap.less',
                '<%= dirMCS %>/<%= dirCss %>/style-ie9-common.css': '<%= dirMCS %>/<%= dirLess %>/style-common.less',
                '<%= dirMCS %>/<%= dirCss %>/style-ie9-view.css': '<%= dirMCS %>/<%= dirLess %>/style-view.less',
                '<%= dirMCS %>/<%= dirCss %>/style-ie8.css': '<%= dirMCS %>/<%= dirLess %>/style-ie8.less'
            },
        }
    },
    watch : {
        devDT : {
            files : [ '<%= dirDT %>/<%= dirLess %>/*.less', '<%= dirDT %>/<%= dirLess %>/bootstrap-less/*.less', '<%= dirDT %>/<%= dirLess %>/bootstrap-less/mixins/*.less',
                      '<%= dirDT %>/<%= dirLess %>/common/*.less', '<%= dirDT %>/<%= dirLess %>/components/*.less', '<%= dirDT %>/<%= dirLess %>/plugin/*.less', '<%= dirDT %>/<%= dirJsAcc %>/*.js',
                      '<%= dirDT %>/<%= dirIconFont %>/_iconfont.less', 'Gruntfile.js' ], // '<%= dirJs %>/*.js'
            tasks : [ 'less:devDT', 'less:devIeDT' ], // 'uglify:dev', 'autoprefixer:all'
            options : {
                livereload: 12344,
                reload: true
            },
        },
        devPB : {
            files : [ '<%= dirPB %>/<%= dirLess %>/*.less', '<%= dirPB %>/<%= dirLess %>/bootstrap-less/*.less', '<%= dirPB %>/<%= dirLess %>/bootstrap-less/mixins/*.less',
                      '<%= dirPB %>/<%= dirLess %>/common/*.less', '<%= dirPB %>/<%= dirLess %>/components/*.less', '<%= dirPB %>/<%= dirLess %>/plugin/*.less', '<%= dirPB %>/<%= dirJsAcc %>/*.js',
                      '<%= dirPB %>/<%= dirIconFont %>/_iconfont.less', 'Gruntfile.js' ], // '<%= dirJs %>/*.js'
            tasks : [ 'less:devPB', 'less:devIePB' ], // 'uglify:dev', 'autoprefixer:all'
            options : {
                livereload: 12346,
                reload: true
            },
        },
        devMCS : {
            files : [ '<%= dirMCS %>/<%= dirLess %>/*.less', '<%= dirMCS %>/<%= dirLess %>/bootstrap-less/*.less', '<%= dirMCS %>/<%= dirLess %>/bootstrap-less/mixins/*.less',
                      '<%= dirMCS %>/<%= dirLess %>/common/*.less', '<%= dirMCS %>/<%= dirLess %>/components/*.less', '<%= dirMCS %>/<%= dirLess %>/plugin/*.less', '<%= dirMCS %>/<%= dirJsAcc %>/*.js',
                      '<%= dirMCS %>/<%= dirIconFont %>/_iconfont.less', 'Gruntfile.js' ], // '<%= dirJs %>/*.js'
            tasks : [ 'less:devMCS', 'less:devIeMCS' ], // 'uglify:dev', 'autoprefixer:all'
            options : {
                livereload: 12347,
                reload: true
            },
        }
    },
    concurrent: {
        all: {
            tasks: ['watch:devDT', 'watch:devPB', 'watch:devMCS'],
            options: {
                logConcurrentOutput: true
            }
        }
    }
});

grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-concurrent');

grunt.registerTask('default', [ 'less:devMCS', 'less:devIeMCS', 'less:devPB', 'less:devIePB', 'less:devDT', 'less:devIeDT' ]);
grunt.registerTask('conc', ['concurrent:all'])
// grunt.registerTask('mcs', [ 'watch:devMCS' ]);
// grunt.registerTask('pb', [ 'watch:devPB' ]);
// grunt.registerTask('dt', [ 'watch:devDT' ]);
};

我需要将所有相同的 less 任务压缩到一个通用程序中,该通用程序可以与一个 less:dev 一起动态使用,将目录传递给任务。

我在互联网上搜索,我发现唯一的事情是在任务调用中使用全局变量,但是当这个事件嵌套在其他事件中时,这个变量在嵌套事件中丢失(例如,监视任务获取变量,但任务运行较少此监视任务中的内容丢失且未设置)。

谢谢

【问题讨论】:

    标签: javascript gruntjs grunt-contrib-watch


    【解决方案1】:

    使用传递给您的任务的参数来动态创建“自定义”任务。例如:

    watch: {
        service: {
            files: ['src/**/*.*'],
            tasks: ['<%= grunt.task.current.args[1] %>']
        }
    }
    

    然后您可以将值(在本例中为myARG)传递给任务:

    grunt.registerTask('serve', ['build', 'watch:service:myARG']);
    

    这使得任务等同于

    watch: {
        service: {
            files: ['src/**/*.*'],
            tasks: ['myARG']
        }
    }
    

    如果需要,您可以使用多个冒号 : 传递多个值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多