應對 Angular Webpack5 缺少預設的 polyfills

Eric Li
hefemk
Published in
Jun 15, 2023

Angular 從 v13 開始使用 Webpack5,在引入某個第三方套件後,建置(Build) 遇到錯誤:

BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.

If you want to include a polyfill, you need to:
- add a fallback 'resolve.fallback: { "path": require.resolve("path-browserify") }'
- install 'path-browserify'
If you don't want to include a polyfill, you can use an empty module like this:
resolve.fallback: { "path": false }

再追蹤一下,其實是引入的套件做了這件事:

return require("path").resolve(__dirname);

結合以上,這個錯誤是好理解的。意思是在 webpack < 5 時,預設會包含 node.js 核所需所要的 polyfills,而現在因為 Webpack >=5 所以不再包含,也明確指出缺少的是 path-browserify

應對方式:

  1. 安裝缺少依賴 yarn add path-browserify
  2. 調整 tsconfig.app.json (若沒有該檔,改調整 tsconfig.json)。在 compilerOptions 內加上 paths 設定。提醒:tsconfig.app.json 檔案內的 baseUrlpath 解析的一環,需確認目前所在目錄,以決定是否要跳到上 n 層,可別眼花了。
"paths": {
"path": [ "../node_modules/path-browserify" ],
}

--

--