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