Grunt如何使用不同的参数运行任务

时间:2017-04-08 16:02:42

标签: gruntjs frontend

下面的源配置示例处理来自src dir的文件。 src2目录也应该使用相同的任务进行处理并推送到build2。配置需要进行哪些更改。

module.exports = function (grunt) {
  var saveLicense = require('uglify-save-license');

  grunt.initConfig({
    clean : {
      build : {
        src : ['build']
      },
    },
    copy : {
      files : {
        cwd : 'src',
        src : '**/*',
        dest : 'build',
        expand : true
      }
    },
    ...

1 个答案:

答案 0 :(得分:0)

grunt-contrib-copygrunt-contrib-clean与许多其他grunt插件一样,允许在每个Targets中指定多个Task

对于您的方案,您只需在copy任务中配置两个目标(一个目标可复制src文件夹,另一个目标可复制src2文件夹)

您还可以在clean任务中配置两个目标(一个目标用于清除build文件夹,另一个目标用于清除build2文件夹)

<强> Gruntfile.js

您的Gruntfile.js可以配置为以下内容:

module.exports = function(grunt) {

    var saveLicense = require('uglify-save-license');

    grunt.initConfig({

        // The 'clean' task now includes two targets.
        // named 'build1' and 'build2'
        clean: {
            build1: {
                src: ['build']
            },
            build2: {
                src: ['build2']
            }
        },

        // The 'copy' task now includes two targets.
        // named 'src1' and 'src2'
        copy: {
            src1: {
                cwd: 'src',
                src: '**/*',
                dest: 'build',
                expand: true
            },
            src2: {
                cwd: 'src2',
                src: '**/*',
                dest: 'build2',
                expand: true
            }
        }

        // ...

    });

    grunt.loadNpmTasks('grunt-contrib-copy');
    grunt.loadNpmTasks('grunt-contrib-clean');

    // Registering the Targets in the Tasks....

    grunt.registerTask('copySrc1', ['copy:src1']);
    grunt.registerTask('cleanBuild1', ['clean:build1']);

    grunt.registerTask('copySrc2', ['copy:src2']);
    grunt.registerTask('cleanBuild2', ['clean:build2']);

    grunt.registerTask('copyBoth', ['copy']);
    grunt.registerTask('cleanBoth', ['clean']);

};

运行Grunt任务

您会注意到在代码段末尾有六次调用.registerTask(...)功能。即; copySrc1cleanBuild1copySrc2cleanBuild2copyBothcleanBoth

它们允许您通过命令行运行以下命令:

$ grunt copySrc1

(这会将src文件夹复制到build文件夹)

$ grunt cleanBuild1

(这将清除build文件夹)

$ grunt copySrc1

(这会将src2文件夹复制到build2文件夹)

$ grunt cleanBuild2

(这将清除build2文件夹)

$ grunt copyBoth

(这会将src文件夹复制到build文件夹,并将src2文件夹复制到build2文件夹

$ grunt cleanBoth

(这会清除buildbuild2文件夹)

备注

您可能只需要保留两个.registerTask(...)函数,如下所示:

grunt.registerTask('copyBoth', ['copy']);
grunt.registerTask('cleanBoth', ['clean']);

但是,我包含了其他四个.registerTask(...)函数,因为它们演示了如何使用分号表示法(:)在任务中调用单个目标。例如:

grunt.registerTask('copySrc1', ['copy:src1']);

在上面的代码段中,['copy:src1']部分只运行src1任务中名为copy的目标。

鉴于:

grunt.registerTask('copyBoth', ['copy']);

...不引用copy任务中的任何目标(即没有使用分号表示法),因此将运行所有目标。

要进一步了解“任务”,“目标”,您可以阅读我对此post的回答。

希望有所帮助!