@vue/cli3 项目使用 babel 预处理实验语法时,配置 babel 插件与安装依赖不生效

操作环境
项目:项目是一个用 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'插件。就开始报如下错误:

image.png

于是手动安装了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
image.png

感谢赐教!

新增
在我新起的项目中,虽然一开始没有出现上述问题,但是在我不停的刷新页面时也会偶现上述问题
image.png

阅读 5.3k
1 个回答

目前问题已经解决,首先可选链是实验性的语法,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.xcore-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),问题得以解决!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进