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依赖包为例
-
原项目中使用package.json定义项目中需要依赖的包,这里的typescript版本号为^4.2.4
package.json:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c5fTZRJ3-1650429292541)(C:\Users\zlb\AppData\Roaming\Typora\typora-user-images\image-20220420111121320.png)]
-
原项目是用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)]
-
如开发者使用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)]
-
启动项目会出现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.如何选择正确的包管理工具以及安装依赖
- 将依赖安装到本地后,观察其根目录决定使用什么包管理工具
- 如有yarn.lock文件而没有package-lock.json文件则项目是以yarn 来进行包管理
- 如有package-lock.json文件而没有yarn.lock文件则项目是以npm来进行包管理
- 使用yarn进行包管理的项目使用yarn命令来进行依赖安装
- 使用npm进行包管理的项目使用npm install 来进行依赖安装