Webpack v4 升級(jí)到 v5 記錄

好處

  1. 開(kāi)啟 sideEffects,能真正啟用 tree shaking,移除不在使用的代碼,效果見(jiàn)附錄一
  2. 真正的內(nèi)容 hash 文件名,確保長(zhǎng)效緩存,不會(huì)因?yàn)橐腠樞蜃兓壬刹煌募?/li>
  3. cache 新增,編譯更快速
  4. 等等其他一些優(yōu)化(其實(shí)我也不知道還有什么了)

步驟

  1. 安裝最新的 webpack webpack-cli
  2. 升級(jí)所有 webpack 的 Plugins 和 Loaders
  3. 修改 webpack.dll.config.js
  4. 更新 webpackDevServer.config.js

整個(gè)代碼改動(dòng)詳見(jiàn) pr-4

Package 依賴包的變更

升級(jí) webpack 對(duì)應(yīng)的 plugin、loader 等到最新版。

詳見(jiàn)鏈接

Webpack 配置的變更

新增的配置

  • cache add
  • output.assetModuleFilename add
  • output.library delete
  • output.futureEmitAssets delete
  • output.jsonpFunction delete
  • output.globalObject delete
  • module.rules[0].parser delete
  • eslint-loader delete
  • url-loader -> assets
  • file-loader -> assets/resource
  • node delete
  • OptimizeCSSAssetsPlugin delete
  • CssMinimizerPlugin add
  • PnpWebpackPlugin delete
  • ModuleScopePlugin update
  • HotModuleReplacementPlugin delete
  • WatchMissingNodeModulesPlugin delete
  • WebpackManifestPlugin update
  • IgnorePlugin update
  • ESLintPlugin add

詳見(jiàn)鏈接

Webpack dev server 配置的變更

新增的配置

  • static
  • setupMiddlewares
  • devMiddleware

移除的配置

  • writeToDisk
  • disableHostCheck
  • before(app)

詳見(jiàn)鏈接

啟動(dòng)腳本 start.js 的變更

  const serverConfig = {
    ...createDevServerConfig(
      proxyConfig,
      urls.lanUrlForConfig,
    ),
    host: HOST,
    port,
  }
  // const devServer = new WebpackDevServer(compiler, serverConfig)
  const devServer = new WebpackDevServer(serverConfig, compiler)

  // devServer.listen(port, HOST, err => {})
  devServer.startCallback(() => {})

詳見(jiàn)鏈接

參考文檔

附錄一

// sideEffect 效果

// 以下為 webpack4 打包后的資源大小
File sizes after gzip:

  121.49 KB        build/static/js/common.d05d0b00.js
  100.56 KB        build/static/js/vendor.9ecccad1.js
  60.49 KB         build/static/css/order.7fc1215c.css
  55.52 KB         build/static/css/common.b0d314b9.css
  48.05 KB (-1 B)  build/static/js/order.f5fa0c3e.js
  14.28 KB         build/static/js/iconfontjs.a44f5d02.js

// 同樣的頁(yè)面在 webpack5 打包后的資源大小
File sizes after gzip:

  100.06 kB (-2.92 kB)  build/static/js/vendor.a0ae263b.js
  98.3 kB (-26.11 kB)   build/static/js/common.ef269b3b.js
  59.78 kB (-2.16 kB)   build/static/css/order.caefc24e.css
  56.81 kB (-43 B)      build/static/css/common.92c401c1.css
  29.2 kB (-20.01 kB)   build/static/js/order.cbc641bd.js
  19.17 kB              build/static/js/vendor_other.727b5c6a.js
  14.56 kB (-68 B)      build/static/js/iconfontjs.b7bc4526.js
  2.22 kB               build/static/css/vendor_other.e96e4e1f.css

// 同樣的 common.js 在開(kāi)啟 sideEffects 后會(huì)減少 26K,從 BundleAnalyzerPlugin 看是移除了 `html2canvas` 等庫(kù)

附錄二

// 例子 order.js,改變 import 一個(gè)文件的順序,分別打包:

...
import { beNum } from "../common/task_tools"
import { getTheme } from "../activity/group_buying/utils"
...

...
import { getTheme } from "../activity/group_buying/utils"
import { beNum } from "../common/task_tools"
...

// 結(jié)果如下:

// webpack4 下
order.6e9f9902.js -> order.f5fa0c3e.js

// webpack5 下
order.cbc641bd.js -> order.cbc641bd.js
webpack5-webpack4

注: 以上數(shù)據(jù)針對(duì)真實(shí)項(xiàng)目,非此 demo 代碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容