vue2.X版本执行 npm run build 命令,报错:

[@vue/compiler-sfc] the >>> and /deep/ combinators have been deprecated. Use :deep() instead.

即:>>> 和 /deep/ 组合器已被弃用,需要使用 :deep() 代替。

这个报错出现在升级项目依赖之后。根据新的依赖重新执行 npm install 命令安装依赖,然后再执行 npm run build 命令,会出现上面的错误提示。将依赖还原为升级前的版本,发现vue版本从2.6.14升级到了2.7.10。
在这里插入图片描述

解决上述问题有三种方式:
1、 按照警告提示,将所有的>>> 和 /deep/ 替换为:deep()。但是对于庞大的老项目来说,改造起来有些费力不讨好。但是这种方式的确能够解决问题。

2、 有博主说可以锁定vue版本,做如下修改:

//将package.json中的配置由
"vue": "^2.6.10"
//改为:
"vue": "2.6.14",

可能这种方式能解决问题,但是个人不建议锁定版本的方式,因为有时候某些版本可能会有安全问题,需要进行版本升级。

3、尝试将依赖还原为升级前的版本,重新执行 npm install 命令安装依赖,然后执行 npm outdated 命令查看已过时的依赖:
在这里插入图片描述
接下来执行 npm update 命令,升级全部已过时的依赖。升级之后再去打包,发现上面提到的问题已经修复了。
为了探究第二次依赖升级后不报错的原因,对比了前后两次升级依赖后的 package-lock.json 文件:
在这里插入图片描述
对比发现,第二次重新升级后,在 @vue/compiler-sfc 中引入了 postcss ,个人理解是借助 postcss 编译了 >>> and /deep/ (如果哪位朋友知道具体编译原理,还请不吝赐教)。

至此,通过重新升级依赖的方式也可以解决上述报错问题。但是,为什么前后两次将vue升级到同一版本,会出现 @vue/compiler-sfc 依赖项不一致的情况,目前还不知道具体原因,如果有朋友了解,可以交流下。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐