sourceType 错误

升级 Babel 配置过程除了遇到 replaceAll-is-not-a-function 问题,还遇到关于 Babel sourceType 配置的问题。

报错 ES Modules 不能使用 module.exports 或者 exports.*

ES Modules 不能使用 `module.exports` 或者 `exports.*`

项目代码

依赖包代码

为什么会报错呢

之前设置 useBuiltInsfalse,是在项目入口的最前面引入所有的 polyfill;而使用 usage,会在对应需要 polyfill 的地方引入 polyfill,并且 Babel 默认是以 import 引入 polyfill 的。

Webpack 认为有 import 语法的就是 ES Module,ES Module 不能有 exports,所以报错了。

解决办法,让 Babel 不默认使用 import,而是根据文件自动推断,配置 Babel sourceTypeunambiguous

配置优化

设置 Babel sourceTypeunambiguous 会对所有文件都去推断,多出很多额外的工作。可以使用 overrides 覆盖对某个包的配置。
overrides 配置

1
2
3
4
5
6
7
8
overrides: [
{
// 自动推断类型
include: './node_modules/@pmmmwh',
sourceType: 'unambiguous',
},
],

参考资料