2016-04-28 33 views
10

考慮,我們有一個的WebPack配置是這樣的:不要重建的WebPack束如果項文件沒有改變

entry: { 
    app: './main.js', 
    lib: './vendor.js', 
} 

vendor.js文件只包含了一堆的要求從node_modules庫。 99%的時間我建立捆綁(S)輸出lib.js捆綁是完全一樣的。

我可以以某種方式告訴的WebPack,如果vendor.js文件並沒有改變(或preferrably像檢查lib.jspackage.json修改日期其他自定義條件來檢測,如果我有可能模塊的新版本中node_modules)我做不想重建lib.js捆綁?由於打字稿傳輸等原因,我的CI服務器需要大量時間。

回答

2

據我所知,Webpack只知道一個文件是否已經建立,因爲有很多因素可以改變文件內容。文件的修改日期實際上沒有提供足夠的信息來確定它不應該再次生成,所以我建議不要這樣做或者您可能最終會在某些時候破壞您的構建並讓人們感到困惑。

但是,如果您確實認爲需要這樣做,但如果您希望使Webpack配置變爲動態並使用fs.stat來讀取vendor.js,然後只將其作爲條目添加(如果其更改)。事情大致是這樣的:

var fs = require('fs'); 

var config = { 
    entry: { 
     app: './main.js' 
    } 
    ... 
}; 

var stats = fs.statSync('./vendor.js'); 
if (new Date(stats.mtime).getTime() > process.env.LAST_VENDOR_BUILD_TIMESTAMP) { 
    config.lib = './vendor.js'; 
    // Then save new Date().getTime() somewhere like a DB and 
    // pass it in as LAST_VENDOR_BUILD_TIMESTAMP on next build. 
} 

module.exports = config; 

正如你看到的爲您解決問題的唯一辦法是,每個構建都需要有知識約之前的作品,來實現這一目標。這是不受歡迎的,因爲你的版本應該是獨立的,而不關心以前的版本結果。

或者,您也應該嘗試從構建中排除一些node_modules,如果它需要很長時間。我之前沒有構建過打字稿項目,但我排除了所有node_modules,而且我的構建運行速度更快。除此之外,你不應該介意你的CI服務器有點慢,至少它會很強大。

相關問題