1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Vue packages version mismatch: - vue@2.7.12 - vue-server-renderer@2.7.11 This may cause things to

Vue packages version mismatch: - vue@2.7.12 - vue-server-renderer@2.7.11 This may cause things to

时间:2019-12-18 08:18:00

相关推荐

Vue packages version mismatch: - vue@2.7.12 - vue-server-renderer@2.7.11 This may cause things to

今日vue2.x官网更新引发的测试环境报错惨案

报错提示:

Vue packages version mismatch:- vue@2.7.12- vue-server-renderer@2.7.11This may cause things to work incorrectly. Make sure to use the same version for both.

在把本地代码提到测试环境时,报vue版本不必配。而且报的vue和vue-server-renderer的版本号和本地开发的@2.6.11不一致。

为了解决问题,首先通过传统的把清除npm缓存、node_modules删除、package-lock.json文件删除都是无效,最要命的是这个项目是3年前的项目,把node_modules删除后,再次下载报依赖错误,看来这种方法不可行,于是恢复了之前的状态。

接着从报错版本开始排除,发现可疑了点,vue最近发布了vue2.x的最新版本是2.7.12,也就是说2.6.11不是最新的了

但是项目中vue的版本是^2.6.11(如下图)

如果对npm版本语义化有了解的可以知道,^符号是主版本控制(第一个非0本版),所以^2.6.11相当于 ^2.6.11 := >=2.6.11 < 3.0.0, 也就是说 只要版本小于3并且大于等于2.6.11的vue都可以下(默认下载最新的)。显然这不是项目想要的。

找到了出现问题的原因,现在就开始解决问题。为了解决这个问题,就用到了 npm shrinkwrap 命令来生成npm-shrinkwrap.json文件,来对依赖包进行精准控制。官网对npm-shrinkwrap.json文件的解释如下

如果项目中有package-lock文件时,使用npm shrinkwrap 则把package-lock更换为npm-shrinkwrap文件,并且npm-shrinkwrap。json文件比package-lock文件优先级高。并且和package-lock不一样的是,当发布包时npm-shrinkwrap.json包含在内。

使用注意shrinkwrap 注意点

每次更新 package.json或者 node_modules时,如 npm install新包, npm update, npm uninstall等操作,为保持协作人的资源一致,还是要手动运行 npm shrinkwrap更新 npm-shrinkwrap.json文件的。而且记得加入到版本控制中,不然就没意义了。shrinkwrap计算时是根据当前依赖安装的目录结构生成的,如果你不能保证 package.json文件定义的依赖与 node_modules下已安装的依赖是匹配、无冗余的,建议在执行shrinkwrap命令前清理依赖并重新安装( rm-rf node_modules&&npm install)或精简依赖( npm prune)。默认情况下, shrinkwrap只计算 dependencies依赖,而不计算 dev-dependencies,如果在生产环境也需要开发依赖或你的依赖分类不清晰,使用 --dev参数生成 shrinkwrap文件确保不会出问题。

最后把生成的npm-shrinkwrap.json文件加入版本控制中,提测就ok了。

如果不想使用npm-shrinkwrap.json文件,进行包精准控制的话,可以直接改动package.json中的版本。如下

注意

不能把^2.6.11改成~2.6.11,虽然比 使用 ^符号获取的版本更精确(补丁范围),但还不是2.6.11.如下图所示

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。