同项目混用npm和yarn出现版本自动更新问题

1.前置知识:

package.json中^,~的详细说明

(1)指定版本:比如"axios": “0.21.0”,表示安装0.21.0的版本;
(2)波浪号~指定版本:比如 “core-js”: “~3.6.5”, 表示安装3.6.x的最新1213版本(不低于3.6.5),但是不安装3.7.x,也就是说安装时不改变大版本号和次要版本号
(3)^指定版本:比如 “antd”: “^3.1.4”,,表示安装3.1.4及以上的版本,但是不安装4.0.0,也就是说安装时不改变大版本号。

package-lock.json的作用
npm是一个用于管理package之间依赖关系的管理器,它允许开发者在pacakge.json中间标出自己项目对npm各库包的依赖。在首次安装npm各库包的时候会自动生成 package-lock.json。

而 package-lock.json 就是用来记录当前状态下实际安装的各个npm package的具体来源和版本号。

确定了安装包的依赖之后,后续重新安装的时候都会生成相同的依赖,而忽略项目开发过程中有些依赖已经发生的更新。

简单的说,package-lock.json 就是确保你项目中的依赖不会在你不知不觉中自动升级。

yarn.lock的作用

yarn.lock作用和package-lock.json作用相同,但yarn.lock是yarn安装依赖时生成的。

**注意:**在使用npm进行依赖安装时yarn.lock文件不生效,在使用yarn进行依赖安装时package-lock.json文件不生效

2.在同一个项目混用yarn和npm时会出现的问题

这里以typescript依赖包为例

  1. 原项目中使用package.json定义项目中需要依赖的包,这里的typescript版本号为^4.2.4

    package.json:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c5fTZRJ3-1650429292541)(C:\Users\zlb\AppData\Roaming\Typora\typora-user-images\image-20220420111121320.png)]

  1. 原项目是用npm来进行包管理,从而生成package-lock.json文件,里面存储了各个依赖的具体来源和版本号,其中typescript的版本号为4.2.4,所以今后使用npm进行安装依赖时都会安装typescript的4.2.4版本,不会进行自动升级

    package-lock.json:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-82tZWavP-1650429292543)(C:\Users\zlb\AppData\Roaming\Typora\typora-user-images\image-20220420111646360.png)]

  2. 如开发者使用yarn命令来进行包依赖安装,则package-lock.json文件无效,只看package.json中的文件,但typescript版本号为^4.2.4,从而会安装4.x.x版本中最新版本即为4.6.3版本,同时生成对应yarn.lock文件

    yarn.lock.json:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5BKJWeb6-1650429292543)(C:\Users\zlb\AppData\Roaming\Typora\typora-user-images\image-20220420112648693.png)]

    node_modules/typescript/package.json:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FYKCD0DY-1650429292544)(C:\Users\zlb\AppData\Roaming\Typora\typora-user-images\image-20220420112728796.png)]

  3. 启动项目会出现typescript类型报错,其原因是因为原项目是在4.2.4typescript版本环境下编写,但使用yarn进行依赖安装把typescript版本自动更新成了 4.6.3版本,同时4.2.4和4.6.3版本的typescript在类型校验上进行了较大的改进和优化,可以检测出更多的类型问题例如:

    • 对unknown类型了有了严格的校验
    • 对undefined类型有了更加严格的校验

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T1MtejHl-1650429292545)(C:\Users\zlb\AppData\Roaming\Typora\typora-user-images\image-20220420113016240.png)]

3.如何选择正确的包管理工具以及安装依赖

  1. 将依赖安装到本地后,观察其根目录决定使用什么包管理工具
    • 如有yarn.lock文件而没有package-lock.json文件则项目是以yarn 来进行包管理
    • 如有package-lock.json文件而没有yarn.lock文件则项目是以npm来进行包管理
  2. 使用yarn进行包管理的项目使用yarn命令来进行依赖安装
  3. 使用npm进行包管理的项目使用npm install 来进行依赖安装
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值