有两个vue2项目,构建配置和依赖基本上都一样,但一个可以在 template 模板中使用可选链(?.),另一个使用就报错。
但是报错的那个项目,在另一个同事那又不报错。
已知 node14 之后就支持可选链了,我和同事用的是 node14和node16,所以和node版本也没关系。
已知 vue2.6 不支持可选链,但可以通过 babel 编译:需要安装@babel/preset-env和@babel/plugin-proposal-optional-chaining插件,而我并没有安装这个插件。
后来查看 package-lock.json 发现,其中支持可选链的项目中 vue 的版本已经变成 2.7.x 了,而另一个不支持的项目中 vue 版本还是 2.6.x。
已知 vue2.7 是支持可选链的,所以我怀疑是这个原因导致产生了现在的区别。
于是删掉 node_modules 和 pageage-lock.json重新全部安装一遍依赖,果然 vue 版本变成了 2.7.x,再次运行,项目也支持可选链了。
个人推断,vue 的版本在项目迭代的过程中升级成 2.7 的原因可能是:
@vue/babel-preset-app包依赖的vue版本指定的是^2,所以在未安装vue时安装这个依赖,会自动安装 vue2的最新版本。

- 有人在初始安装依赖的时候,删除了
package-lock.json文件,导致无法限制vue的版本。



















