node本地项目发生依赖包因更新而不兼容导致项目启动错误解决记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node本地项目发生依赖包因更新而不兼容导致项目启动错误解决记录相关的知识,希望对你有一定的参考价值。

参考技术A

问题描述
今日在打包原来的项目时发现打包时突然出现了错误。排查以后发现是因为相关依赖包更新导致的问题。
错误提示如下。

运行 npm info mz-modules 命令之后发现其版本也是2.1.0。

同样查看ko-sleep模块信息发现

ko-sleep模块版本为1.1.4与之前信息一致。

查看ko-sleep模块的依赖关

与cnpm略有不同,但版本仍为1.1.4.

通过以上安装信息发现导致ko-sleep 模块更新的原因可能有以下几点。

1.pageckage.json配置的版本没有固定导致此问题

2.Npm 和 cnpm 都没有进行版本锁定导致此问题、有版本锁定配置文件package-lock.json存在时依然会有次版本号更新问题。

针对以上几种种猜测进行问题复现与修复。

通过观察发现,疑似egg-bin版本从4.14升级为4.16之后出现了这个问题,那么我们直接指定项目的egg-bin版本。为4.14.x重新设置package.json配置之后运行npm install安装所有模块。

安装完成之后npm list 所有依赖信息显示如下。

上图显示修改的egg-bin版本配置已经生效,此次安装的egg-bin版本为4.14.1版本。

之后查看依赖ko-sleep 的mz-modules版本信息。

mz-modules 的版本号仍为2.1.0.

查看ko-sleep信息

版本号仍为1.1.4无变化

所以修改package.json版本配置解决此问题的方式并没有生效。Package.json中的版本配置不是导致间接依赖升级的原因。

添加 package.lock.json 或者yarn.lock 发现 锁定文件中的依赖信息为

ko-sleep 依赖配置信息如下依然显示为1.1.4版本

多次安装不会进行升级(不排除官方ko-sleep版本没有升级的影响)

版本锁定在新项目之初是非常有用的,对于已经因为版本更新出问题的项目意义不是很大。重新生成的package-lock.json之后的依赖也为最新版本。

看与项目之前一直兼容的ko-sleep包的版本,确定为1.0.3.直接安装1.0.3版本

npm install ko-sleep@1.0.3 --save

之后在package.json中修改ko-sleep版本号。

将允许修改次版本号改为只允许bug。
~1.0.3
之后运行npm install

安装完成后运行npm list查看ko-sleep版本与依赖关系。

发现ko-sleep版本为1.0.3版本,问题解决。

问题分析总结,通过查看npm 开发文档发现,平时项目使用和配置并无任何问题,问题出在ko-sleep开发者。此开发者未遵守主版本号,次版本号能更改内容的定义。只有更新主版本号时才可使用不兼容上一版本的语法以及结构。从1.1.0开始作者直接使用ts重写了整个包,并且未使用主版本号发布为2.0.x.而是直接使用次版本号发布为1.1.x。导致此错误。
另外做项目时要及时生成文件锁定配置。

以上是关于node本地项目发生依赖包因更新而不兼容导致项目启动错误解决记录的主要内容,如果未能解决你的问题,请参考以下文章

发现 AnguIar 不兼容的对等依赖项

共享库

关于IDEA使用Maven工具打包带有本地依赖包的项目 在部署时 仍然找不到本地依赖包中某个类,发生ClassNotFoundException的异常

node项目怎么在离线环境生成容器镜像

vue项目中无node_modules

传递依赖导致相同 DLL 的版本冲突