处理grunt.js中的*no files*错误

handling *no files* error in grunt.js

本文关键字:no 错误 files 中的 grunt js 处理      更新时间:2023-09-26

我正在写一些grunt插件。我使用this.files.forEach来遍历源文件。这似乎是推荐的解决方案。一个任务的代码看起来,或多或少,像这样:

grunt.registerMultiTask(..., ..., function(){
  // init
  this.files.forEach(function (f) {
    // do something
  }
});

this.files,控制台日志,看起来像这样:

[ { src: [Getter], dest: 'tmp/external-sources.json', orig: { src: [Object], dest: 'tmp/external-sources.json' } } ]

然而,当没有可识别的源文件时,我陷入了麻烦。据我所知,this.files.forEach在现有文件上迭代,因此[Getter](不知道,那是什么)不会对不存在的文件执行迭代。

现在,这对我来说是个问题,因为我经常更改文件路径。如果我错误地配置了新路径,我不会得到关于无效路径的通知。处理这个问题的唯一方法是扫描长时间的控制台输出,这对于大型项目来说是非常令人沮丧的。我想在源列表为空时得到通知


问题是……实际上,是:当给定任务/目标没有源文件时,我如何强制grunt大喊?*我可以全局改变这个行为吗?我的意思是,我能让grunt喊出所有任务的空源列表吗?我是不是误会了什么?如果有,请纠正我。

据我所知,this.files.forEach迭代现有的文件

files对象包含所有在Gruntfile中定义的src对象,包括不存在的文件/路径。所以它也会遍历不存在的路径。

[Getter](不知道,那是什么)不会对不存在的文件执行迭代

正确,files对象中的src方法只会获取一个现有文件。

我想在源列表为空时得到通知

你可以在orig.src上迭代每个files和错误句柄。
请注意,如果您的srcundefinednull, grunt将警告您并中止,这是您正在寻找的行为。你可以使用--force标志来继续,但我强烈反对这样做。

的例子:

Gruntfile.js

module.exports = function(grunt) {
  grunt.initConfig({
    myTask: {
      dev: {
        files: [
          {src: 'existingFile.js', dest: 'newFile'},
          {src: 'nonExistingFile.js', dest: 'newFile2'}
        ]
      }
    }
  });
  grunt.loadTasks('my_tasks');
  grunt.registerTask('default', ['myTask']);
};

my_tasks/task.js

module.exports = function(grunt) {
    grunt.registerMultiTask('myTask', '', function() {
        this.files.forEach(function(f) {
            f.orig.src.forEach(function(src) {
                //do something with src
            });
        }); 
    });
};