通过自定义Grunt任务处理文件

Process files by custom Grunt task

本文关键字:任务处理 文件 Grunt 自定义      更新时间:2023-09-26

我是新手…我只是试图实现一个自定义任务(使用TypeScript),它将迭代一组给定的文件并进行一些处理。这是我到目前为止得到的…

function gruntFile(grunt: IGrunt): void {
    grunt.registerMultiTask("custom", "...", () => {
        this.files.forEach(function(next) {
            ...
        });
    });
    var config: grunt.config.IProjectConfig = {
        custom: {
            files: [ 
                "folder1/*.json", 
                "folder2/**/*.json"
            ]
        }
    };
    grunt.initConfig(config);
}
(module).exports = gruntFile;

目前,我挣扎于配置以及如何在我的自定义任务处理程序函数中访问文件数组。Grunt给了我一个错误,它不能读取属性forEach的undefined。我还尝试了一个配置,看起来像这样…

var config = {
    custom: {
        files : [
            { src: "folder1/*.json" },
            { src: "folder2/**/*.json" }
        ]
    }
};

不确定,但我在一些教程中看到过……

我已经看到了几个示例grunt-文件,但是在每个示例中,配置看起来有点不同,或者文件与导入的任务和模块一起使用,因此示例没有显示如何访问配置的文件。任何帮助我更好地理解它是如何工作的(以及我做错了什么)的指导都是感激的。

我发现我可以通过config-property查询选项,但我不确定这是否是正确的方法。在我的任务处理程序中,我这样做是为了查询配置文件的列表…

var files = grunt.config.get("custom.files");

…它返回预期的数组(但我发现通过路径表达式查询选项有点奇怪)。我意识到(通过使用TypeScript) this的范围不是当前任务的上下文;这就是为什么files总是未定义的原因。将对registerMutliTask的调用更改为…

grunt.registerMultiTask("custom", "...", function() { ... });

…修复了这个问题。我在路径表达式中使用通配符;我希望Grunt可以扩展这些表达式,并给我一个所有匹配路径的列表。这个功能存在吗,还是我必须自己创建?

通过使用以下代码,我能够遍历配置的文件(文件模式)…

grunt.registerMultiTask("custom", "...", function() {
    grunt.file
        .expand(this.data)
        .forEach(function(file) {
            ...
        });
});