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
依赖项不一致的情况,目前还不知道具体原因,如果有朋友了解,可以交流下。