327、Webpack學習筆記02 -【入口起點】 2020.04.22

正如我們在 起步 中提到的,在 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 文檔只使用一個入口起點。

4、參考文獻

[01] 入口起點 - Webpack 官方文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章