package.json && package-lock.json 的作用

发布于 2021-08-28  52 次阅读


package.json

package.json 记录当前项目所依赖模块的版本信息,更新模块时锁定模块的大版本号(版本号的第一位)。

当你执行 npm i 时,nodeJS 会从你的 package.json 中读取所有的 dependencies 信息,package.json 文件只记录你通过 npm install 方式安装的模块信息,而这些模块所依赖的其他子模块的信息不会记录。

package-lock.json

package-lock.json 记录了 node_modules 目录下所有模块的具体来源和版本号以及其他的信息。(包括主模块和所有依赖子模块)

package.json 文件只能锁定大版本,即版本号的第一位,不能锁定后面的小版本,你每次 npm install 时候拉取的该大版本下面最新的版本。所以为了稳定性考虑我们不能随意升级依赖包,而 package-lock.json 就是来解决包锁定不升级问题的。

  1. 如果要升级 package-lock.json 里面的库包,怎么操作呢?
    npm install packageName 或 npm install packageName@x.x.x

实验验证

当你修改了 package.json 某一个模块的版本信息后,用 npm i 更新模块,你会得到该模块在 package.json 限定的大版本下的最新模块。例如模块 A 有 3.0.0, 3.1.0, 3.2.0 版本,当前项目中模块 A 版本为 3.0.0,你将 package.json 中模块 A 版本改成了 3.1.0,执行 npm i 更新模块后会发现,下载到的模块版本为 3.2.0 同时 package-lock.json 中记录的也是 3.2.0。如果你的确需要 3.1.0 的 A 模块。就不要修改 package.json 文件,这个时候你可以通过 npm A@3.1.0 去指定模块的下载版本。

package.json 和 package-lock.json 保证了大家在协同开发的时候所用的依赖模块版本是一致的。当你的项目新增了一个依赖模块请一定要把 package.json 和 package-lock.json 一起上传,这样别人下载项目的时候去更新模块信息,就能得到和你一模一样的模块版本。

例如下面的 lodash 模块,当前版本为 3.1.0:

file

前两个是项目根目录下的文件,第三个是 node_modules 下的文件。现在我们手动修改项目根目录下的 package.json 文件,将 lodash 改成 3.2.0。如下所示:

file

然后我们去用 npm i 更新模块信息,结果如下:

file

如图我们看到 lodash 更新到了大版本为 3 的最新版本 3.10.1。这个时候我们再试一下 npm 指定版本更新 lodash,效果如图:

file


博主好穷啊,快点支助一下吧 ε = = (づ′▽`)づ