构建时babel-loader输出id为null的module对象导致webpack-command解析报错
问题产生原因
- 核心是已经废弃的
webpack-command包与高版本webpack(v4及以上)兼容性不足导致的:高版本webpack中未被引用的孤儿模块(你调试输出中也能看到对应模块标记了orphan: true)、被tree shaking判定需要剔除的模块不会被分配数字id,module.id会被设为null,但webpack-command的parse.js文件逻辑中未做判空处理,直接调用toString()方法就抛出了类型错误。 - 补充:
babel-loader只是正常输出webpack返回的模块对象,不是这个错误的根因。
可行解决方案
方案1(推荐,永久修复):替换废弃的webpack-command
webpack-command早已停止维护,官方已使用webpack-cli作为默认的命令行工具,直接替换即可:
- 卸载webpack-command:
# npm用户 npm uninstall webpack-command # yarn用户 yarn remove webpack-command
- 安装对应版本的webpack-cli:
# npm用户 npm install webpack-cli --save-dev # yarn用户 yarn add webpack-cli --dev
- 修改package.json中的构建脚本,把所有调用
webpack-command的地方替换为webpack即可。
方案2(临时修复):给webpack-command打兼容补丁
如果暂时无法替换webpack-command,可以手动修改代码做兼容处理:
找到node_modules/webpack-command/lib/reporters/parse.js第82行,把module.id.toString()
修改为(module.id ? module.id.toString() : 'null')
如果需要补丁永久生效,可以配合patch-package工具保存这个修改,后续安装依赖时会自动应用补丁。
内容的提问来源于stack exchange,提问作者hallvors
相关产品推荐
相关产品推荐

