Webpack5打包web3.js1.4.0出现Cannot read property 'custom' of undefined错误如何解决
修复方案
错误根因
Webpack 5 默认移除了Node.js核心模块的内置polyfill,你使用的node-polyfill-webpack-plugin对util模块的polyfill覆盖不完整,导致assert库调用require('util/').inspect时返回undefined,读取inspect.custom属性时报错。
修复步骤
- 第一步:手动安装完整的util polyfill
npm install util --save
- 第二步:修改webpack配置,新增resolve配置明确指向util polyfill,修改后的完整配置如下:
// webpack configuration file const NodePolyfillPlugin = require("node-polyfill-webpack-plugin"); const path = require('path'); module.exports = { mode: 'development', output: { path: path.resolve(__dirname, 'dist/dev'), filename: '[name].bundle.js', }, entry: { index: './src/index.js' }, // 新增以下resolve配置 resolve: { alias: { 'util': require.resolve('util/') }, fallback: { "util": require.resolve("util/") } }, module: { rules: [ { test: /\.css$/, use: ['css-loader'], } ] }, plugins: [ new NodePolyfillPlugin() ] }
- 第三步:清理webpack缓存后重新打包
删除项目下node_modules/.cache目录,再执行打包命令即可解决报错。
可选优化方案
如果允许升级依赖版本,可将web3.js升级到1.7.0及以上版本,新版本已优化了Node核心模块依赖逻辑,可从根源避免这类polyfill缺失问题。
内容的提问来源于stack exchange,提问作者Ilya Loskutov
相关产品推荐
相关产品推荐

