为什么使用了 @vitejs/plugin-legacy 还会报 globalThis is not defined 错误

120 阅读1分钟

@vitejs/plugin-legacy 能够调用 babel,使用了自动插入 Polyfill 功能,按道理会自动插入 globalThis 的 polyfill。为什么还会报 globalThis is not defined 错误?

原来,@vitejs/plugin-legacy 只处理你自己的代码,并不会处理第三方依赖的代码。

第三方依赖中使用了 globalThis,但是你到代码没有用到 globalThis,因此不会自动插入 globalThis 的 polyfill。而会报错。

因此,只要是第三方库有使用新特性,都会报错。

@vitejs/plugin-legacy 的作者似乎以为,第三方库就是全浏览器兼容的。

当我第一眼发现有报 globalThis is not defined 错误时,我当时并没有排查原因,只是觉得 @vitejs/plugin-legacy 可能处理兼容性的水平并不好,直接用自己的打包方案吧。最近仔细排查了原因,只能说兼容性还是自己比较专业。