正如我們在 起步 中提到的,在 webpack 配置中有多種方式定義 entry 屬性。除了解釋爲什麼它可能非常有用,我們還將向你展示如何去配置 entry 屬性。
1、單個入口(簡寫)語法
用法:entry: string|Array <string
webpack.config.js
module.exports = {
entry: './path/to/my/entry/file.js'
};
entry 屬性的單個入口語法,是下面的簡寫:
webpack.config.js
module.exports = {
entry: {
main: './path/to/my/entry/file.js'
}
};
當你向 entry 傳入一個數組時會發生什麼?向 entry 屬性傳入文件路徑數組,將創建出一個 多主入口(multi-main entry)。在你想要一次注入多個依賴文件,並且將它們的依賴導向(graph)到一個 chunk 時,這種方式就很有用。
當你正在尋找爲「只有一個入口起點的應用程序或工具(即 library)」快速設置 webpack 配置的時候,這會是個很不錯的選擇。然而,使用此語法在擴展配置時有失靈活性。
2、對象語法
用法:entry: {[entryChunkName: string]: string|Array<string }
webpack.config.js
module.exports = {
entry: {
app: './src/app.js',
adminApp: './src/adminApp.js'
}
};
對象語法會比較繁瑣。然而,這是應用程序中定義入口的最可擴展的方式。
“webpack 配置的可擴展”是指,這些配置可以重複使用,並且可以與其他配置組合使用。這是一種流行的技術,用於將關注點從環境(environment)、構建目標(build target)、運行時(runtime)中分離。然後使用專門的工具(如 webpack-merge)將它們合併起來。
3、常見場景
以下列出一些入口配置和它們的實際用例:
3.1 分離 app(應用程序) 和 vendor(第三方庫) 入口
在 webpack < 4 的版本中,通常將 vendor 作爲單獨的入口起點添加到 entry 選項中,以將其編譯爲單獨的文件(與 CommonsChunkPlugin 結合使用)。而在 webpack 4 中不鼓勵這樣做。而是使用 optimization.splitChunks 選項,將 vendor 和 app(應用程序) 模塊分開,併爲其創建一個單獨的文件。不要 爲 vendor 或其他不是執行起點創建 entry。
3.2 多頁面應用程序
webpack.config.js
module.exports = {
entry: {
pageOne: './src/pageOne/index.js',
pageTwo: './src/pageTwo/index.js',
pageThree: './src/pageThree/index.js'
}
};
這是什麼? 我們告訴 webpack 需要三個獨立分離的依賴圖(如上面的示例)。
爲什麼? 在多頁面應用程序中,服務器會傳輸一個新的 HTML 文檔給你的客戶端。頁面重新加載此新文檔,並且資源被重新下載。然而,這給了我們特殊的機會去做很多事:
使用 optimization.splitChunks 爲頁面間共享的應用程序代碼創建 bundle。由於入口起點增多,多頁應用能夠複用入口起點之間的大量代碼/模塊,從而可以極大地從這些技術中受益。
根據經驗:每個 HTML 文檔只使用一個入口起點。