目 录CONTENT

文章目录

关于 package-lock.json

Hello!你好!我是村望~!
2023-02-10 / 0 评论 / 2 点赞 / 203 阅读 / 792 字
温馨提示:
我不想探寻任何东西的意义,我只享受当下思考的快乐~

package-lock.json会在npm修改node_modules树或package.json的任何操作中自动生成。

它描述了所生成的准确的树,这样后续的安装就能够生成相同的树,而不考虑中间的依赖性更新,锁住依赖。

为什么我们需要锁定文件?

lock文件的目的是在创建锁定文件时,锁定整个依赖关系树的所有版本。为什么使用软件包锁定文件和锁定软件包版本很重要?

如果没有软件包锁定文件,Yarn或npm等软件包管理器将在安装软件包的依赖关系时实时解决软件包的最新版本,而不是最初为特定软件包准备的版本。

演示一个例子,比如我们下载一个 Axios

目前比较新的版本是 1.3.2 版本 !

image-20230210174121616

那么我们专门去下载一个相对较旧的版本!模拟我们这个项目是很久之前的项目,所以用的版本比较老了!

Feb-10-2023 17-39-18

那么此时我们安装的就是 1.1.0 我们看项目真实依赖版本的话呢,需要去node_modules 中去看!那里是我们项目真正运行的版本!

image-20230210174352553

可以看到没有任何问题!这个时候,需要的依赖版本和package.json版本是一致的!

我们来看看 lock 文件 内部的版本 也是 1.1.0

image-20230210174811159

如果其他同事拉去你的项目代码!执行 npm i 的时候,那么他根据 lock 文件去下载各依赖的版本!这样是没有问题的!

Feb-10-2023 17-49-39

上图演示了,在有存在lock文件的情况下,是没有任何问题的,但是如果没有了lock文件,我们看看会发生什么!

Feb-10-2023 17-51-51

可以看到,虽然 package.json 文件声明的依赖版本为 1.1.0 但是node_modules下载的依赖版本为 1.3.2,那么如果此时这个库有比较大的改动的话,我们的项目就可能出现问题!这就是lock文件的用处!

但是还有一个问题!可能同事之间使用的包管理器是不同的!有的使用 yarn,有的使用npm,还有使用 pnpm的!不同的包管理器的lock文件是不通用的!

首先,我们本地有一个 npmlock 文件 ! axios 版本为 1.1.0

image-20230210175841011

此时你用 npm i 安装的版本一定不会有问题,下面演示一下一位新同事用了 yarn 之后,他的项目的变化!

Feb-10-2023 18-04-35

可以看到 yarn 安装的版本也成了 最新的版本!这样协作开发版本不一致,就可能给项目带来风险!

那么比较好的方式就是在 package.json 锁死版本!这样不论是用什么包管理器!都不会自动去升级版本!

- "axios": "^1.1.0"
+ "axios": "1.1.0"

Feb-10-2023 18-10-19

2

评论区