按自定义Grunt任务处理文件

时间:2016-08-23 07:35:43

标签: javascript node.js typescript gruntjs

我是grunt的新手...我只是尝试实现一个自定义任务(使用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。我也尝试了一个看起来像......

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

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

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

更新

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

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

...返回预期的数组(但我发现通过路径表达式查询选项有点奇怪)。我意识到(通过使用TypeScriptthis的范围不是当前任务的上下文;这就是files始终未定义的原因。将通话更改为registerMutliTask至...

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

...解决了这个问题。我在path-expression中使用通配符;我希望Grunt可以扩展这些表达式并给我一个所有匹配路径的列表。这个功能是否存在,或者我是否必须自己创建?

1 个答案:

答案 0 :(得分:2)

我可以使用以下代码迭代配置的文件(文件模式)...

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