2016-04-07 103 views
2

使用grunt-watch監視文件更改對於添加/更改操作非常有用,因爲當它使用更改列表調用任務時,任務的files(或fileSrc)屬性將包含添加/更改文件。使用grunt觀察刪除的文件

與刪除的文件不同。如果您觀察已刪除的文件並調用任務,則刪除的文件將不會出現在任務的filesSrc屬性或files屬性的規範化部分中。

除了手動歸一特定files元件的orig屬性,有一種方法強制刪除的文件出現在fileSrcfiles歸一化部分?如果沒有,那麼規範orig(我不想重新發明輪子)的最佳方法是什麼?

回答

2

很可能插件傾銷從設計文件陣列被刪除的文件,該插件但是不發出watchevent,你可以傾聽:

grunt.initConfig({ 
    watch: { 
    scripts: { 
     files: ['**'], 
    }, 
    }, 
}); 
grunt.event.on('watch', function(action, filepath, target) { 
    if (target === 'scripts' && action === 'deleted') { 
    // your code goes here 
    } 
}); 

還有方法來建立一個觀察任務它專門爲觀察者檢測到刪除時運行特定任務。這兩種方法都在plugin's documentation中列出。

+0

是的,我已經使用了「按需編譯文件」中描述的技術。 'watch'事件的麻煩在於只能有一個全局'watch'監聽器,並且如果您有多個watch目標同時運行,則無法知道某個特定事件來自哪個目標。 – gzak

+0

例如,如果您以jslint作爲例子,並假設您需要運行另一個執行非常像jslint(稱爲jslint2)但非單獨(但重疊)文件集的監視目標,那麼監視器監聽器將不會選擇,但要爲jslint和jslint2兩個集合的聯合中的任何文件更改運行(否則它可能會丟失其中一個目標中的某些文件)。但這意味着某些文件可能會被jslint化(或jslint2'ed),而這本來不應該是。 – gzak

+0

改變你的條件來檢查目標:'if(target ==='jslint'&& action ==='deleted')' – theaccordance