有两个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
的版本。