操作环境
项目:项目是一个用 vue cli3 配置的普通前端应用
环境:mac、webstorm、node@14.15.0
依赖版本:
- "core-js: "^3.20.3",
- "@vue/cli-plugin-babel": "^3.12.1",
- "@vue/cli-plugin-eslint": "^3.9.0",
- "@vue/cli-service": "^3.9.0",
vue.config.js: 无任何影响 webpack module 和 loader 的额外配置
问题描述
使用?.
可选链操作符时,提示需要安装@babel/plugin-syntax-optional-chaining
插以支持。
安装插件后并且配置如下:
// babel.config.js
module.exports = {
presets: [
'@vue/app'
],
plugins: [
'@babel/plugin-proposal-optional-chaining',
]
};
问题1: 虽然安装了上述插件,但依然提示需要安装该插件!
几经尝试后新安装了一个'@babel/plugin-syntax-optional-chaining'
插件。就开始报如下错误:
于是手动安装了core-js@3
项目正常启动。
但是为了查明原因,我把node_modules
删了,重新执行npm install
安装依赖。再次抛出上图的异常问题。此时项目中已经安装了core-js@3
。
于是我又把core-js
卸载然后重装了一遍,依然不行。现在一直是报上图的错误。
问题2: 为什么会出现上述情况
我的思考
1、有没有可能是 npm 本身的问题对项目产生影响?项目中有多个其他依赖依赖了低版本的core-js
2、我尝试过新起一个全新的项目,将所有的依赖和vue.config.js
直接搬过去,也没有任何问题!(这是我最疑惑的一点)
3、有没有可能是 vue cli 的问题
4、有怀疑过是不是cache-loader
缓存问题,没有重新编译代码。手动删除 .cache 文件夹再编译依然无效。
现在就是卡在下图的报错了,项目中已经卸载了@babel/plugin-syntax-optional-chaining
和@babel/plugin-proposal-optional-chaining
感谢赐教!
新增
在我新起的项目中,虽然一开始没有出现上述问题,但是在我不停的刷新页面时也会偶现上述问题
目前问题已经解决,首先可选链是实验性的语法,
core-js@3.x.x
版本才做了 polyfill。由于(1)项目中的依赖问题;(2)npm 的扁平化特性;(3)package-lock.json 文件问题;共同导致了我的问题。
(1)项目中存在一个依赖 A 含有子依赖
core-js@3.x.x
,且它的安装顺序更靠前。(2)由于 npm 的扁平化特性,
core-js@3.x.x
被安装到了最外层。而用来 polyfill 语法的 babel 是通过
@vue/cli-plugin-babel
配置的,它依赖于core-js@2.x.x
。还是 npm 扁平化的特性,外层已经有了
core-js@3.x.x
。core-js@2.x.x
只能在各自的子目录中重复安装。这样纵使我手动安装
core-js@3.x.x
依然不会作用到项目的 babel 中。(3)纵使我升级了
@vue/cli-plugin-babel
的版本依然不能解决是 package-lock.json 中包含错误依赖信息。在重新生成了 package-lock.json 与升级了
@vue/cli-plugin-babel
之后(升级后子依赖core-js@3.x.x
),问题得以解决!