2015-05-15 25 views
0

我在寫一些grunt插件。我使用this.files.forEach來遍歷源文件。這似乎是推薦的解決方案。任務的代碼看起來,更多或更少,像這樣:處理*沒有文件* grunt.js中的錯誤

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爲所有任務喊出空的源列表嗎? *我誤解了一些東西嗎?如果是這樣,請糾正我。

回答

0

據我所看到的,this.files.forEach遍歷現有 文件

files對象包含在你的Gruntfile定義的所有src對象,包括非現有文件/路徑。所以它也會迭代不存在的路徑。

[Getter](不知道,那是什麼)不執行對不存在的文件

這是正確的迭代,在files對象的src方法只會得到一個現有的文件。

我想,當源列表爲空

你可以從那裏迭代爲每個files和錯誤處理過orig.src通知。
請注意,如果您的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 
      }); 
     }); 
    }); 
};