Runtime
runtime,以及伴隨的 manifest 數據,主要是指:在瀏覽器運行時,webpack 用來連接模塊化的應用程序的所有代碼。runtime 包含:在模塊交互時,連接模塊所需的加載和解析邏輯。包括瀏覽器中的已加載模塊的連接,以及懶加載模塊的執行邏輯。
Manifest
那么,一旦你的應用程序中,形如 index.html 文件、一些 bundle 和各種資源加載到瀏覽器中,會發生什么?你精心安排的 /src 目錄的文件結構現在已經不存在,所以 webpack 如何管理所有模塊之間的交互呢?這就是 manifest 數據用途的由來……
當編譯器(compiler)開始執行、解析和映射應用程序時,它會保留所有模塊的詳細要點。這個數據集合稱為 "Manifest",當完成打包並發送到瀏覽器時,會在運行時通過 Manifest 來解析和加載模塊。無論你選擇哪種模塊語法,那些 import 或 require 語句現在都已經轉換為 __webpack_require__ 方法,此方法指向模塊標識符(module identifier)。通過使用 manifest 中的數據,runtime 將能夠查詢模塊標識符,檢索出背后對應的模塊。
所以,現在你應該對 webpack 在幕后工作有一點了解。“但是,這對我有什么影響呢?”,你可能會問。答案是大多數情況下沒有。runtime 做自己該做的,使用 manifest 來執行其操作,然后,一旦你的應用程序加載到瀏覽器中,所有內容將展現出魔幻般運行。然而,如果你決定通過使用瀏覽器緩存來改善項目的性能,理解這一過程將突然變得尤為重要。
通過使用 bundle 計算出內容散列(content hash)作為文件名稱,這樣在內容或文件修改時,瀏覽器中將通過新的內容散列指向新的文件,從而使緩存無效。一旦你開始這樣做,你會立即注意到一些有趣的行為。即使表面上某些內容沒有修改,計算出的哈希還是會改變。這是因為,runtime 和 manifest 的注入在每次構建都會發生變化。
