Grunt.js:我如何自己规范文件,就像Grunt那样

Grunt.js: how do I normalize files myself, the way that Grunt does?

本文关键字:Grunt 范文件 文件 那样 就像 自己 js 何自己      更新时间:2023-09-26

使用grunt创建新任务时,即:

grunt.registerMultiTask('name', 'description', function() {...});

一个files对象在任务函数中作为this.files可用。这是在grunt配置中查看传递给task.files的值并对其进行解析,展开任何globbing的标准化结果。

第1期:

第一个问题是,我有一个任务可能需要重复执行几次。每次,它都希望使用files对象来获得与初始配置参数匹配的所有文件等的最新列表。例如:

grunt.registerMultiTask('sometask', 'description', function sometask() {
    var files = this.files;
    //do some stuff with files, then run this func again if needbe:
    if(somecondition) sometask.call(this);
});

这里的问题是,files对象没有更新以反映我对文件结构所做的任何更改,因此下次调用该函数时,文件列表可能已过期。

我想做的是:

grunt.registerMultiTask('sometask', 'description', function sometask(renormal) {
    //update this.files if we need to:
    if(renormal) {
        this.files = renormalize(this.data.files);
    }
    var files = this.files;
    //do some stuff with files, then run this func again if needbe:
    if(somecondition_is_matched) sometask.call(this, renormal);
});

第2期:

此外,也许我想制作一个需要两个大量文件映射的插件,所以在grunt配置中,我可能会有这样的东西:

grunt.initConfig({
    ...
    someplugin: {
        filesOne: [{
            cwd: "hello"
            src: ["something/**"],
            dest: "another"
        }],
        filesTwo: {
            "another2": ["soemthing2/*", "!something2/*.js"]
        }
    }
    ...
});

在插件中,我希望能够规范化filesOnefilesTwo,就像grunt规范化"files"一样,这样用户就可以以所有常用格式输入src-dest文件映射。

所以

grunt API似乎公开了用于扩展模式等的函数,但似乎没有提供任何东西来实现它在文件对象的后台所做的规范化。

我有什么遗漏吗?

实际上有一个方法grunt.task.normalizeMultiTaskFiles:

grunt.registerMultiTask('sometask', 'description', function() {
    var filesOne = grunt.task.normalizeMultiTaskFiles(
        {files: this.data.filesOne}, this.target);
    var filesTwo = grunt.task.normalizeMultiTaskFiles(
        {files: this.data.filesTwo}, this.target);
})