处理*没有文件* grunt.js中的错误

时间:2015-05-15 16:34:47

标签: javascript node.js gruntjs

我正在写一些咕噜的插件。我使用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大喊?  *我可以全局更改此行为吗?我的意思是,我可以告诉咕噜声为所有任务喊出空的源列表吗?  *我误解了什么吗?如果是的话,请纠正我。

1 个答案:

答案 0 :(得分:0)

  

据我所知,this.files.forEach遍历现有的   文件

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

  

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

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

  

我希望在源列表为空时收到通知

您可以从那里为每个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
            });
        }); 
    });
};