Nodejs中package-lock.json是否需要提交到版本控制,有什么作用?

发布于 1周前 作者 sinazl 来自 nodejs/Nestjs

Nodejs中package-lock.json是否需要提交到版本控制,有什么作用?

两台电脑都是 node10 的版本,不知道为什么,每次 npm install,package-lock.json 都会有略微修改,比如:

"acorn": "4.0.13" -> "acorn": "^4.0.3"

难道是一台电脑是 Win7,一台是 Win10 的缘故。

之前一直都是把 package-lock.json 提交的,但是似乎也没什么用,能不能不要提交?


12 回复

当然提交啊,依赖版本统一化


#1 统一那为什么不同电脑 npm i 还会变

跟 npm 的版本有关,可以在两台电脑上运行 npm -v 看看版本是否一致。另外如楼上所说,另一台电脑可以用 npm ci 根据 package-lock.json 安装依赖。npm i 是根据 package.json 安装的

#4
#3

但是 package.json 中的依赖也已经有版本描述啦,这样是否有些多余?

你们平时用 ci 还是 i

npm ci 可以保证部署的时候代码是永远不变的。

不多余吧,npm ci 就不会改变 package-lock.json。拉别人的代码的时候会用 npm ci 初始化项目,加新依赖会用 npm i。如果其他人加过新依赖,也会用 npm ci 重新下载 node_modules

忘说了,踩过 npm 的无数坑之后,我已经换用 yarn 很久了…

如果你不知道为什么 npm i 会导致版本变化,那给你简单解释一下。

假设你依赖某个包 A,你的 package.json 里写的"A": “~1.0.1”,那么当 A 有 patch update 的时候你再次 npm install,你装下来的就是新版,也许是 1.0.2。
同理,^对应包的 minor update,*对应 major update。

如果不明白我在说什么的话去看一下 semver: https://docs.npmjs.com/misc/semver

你要想依赖的版本永远不变,不随着包管理者的更新而更新,就把版本号写死,那就不需要 lock 文件了。

你可以看一下这个,虽然说的是 yarn,但道理是一样的 https://github.com/yarnpkg/yarn/issues/1583

yarn install --frozen-lockfile 会根据 lock file 安装第三方包,这样呢 lock file 本身也不会被更新了

在Node.js项目中,package-lock.json文件确实需要被提交到版本控制系统中。以下是关于package-lock.json文件的作用及提交必要性的详细解释:

作用

  1. 版本锁定:记录了项目依赖的具体版本信息,确保在不同环境中安装相同版本的依赖,从而解决因版本范围模糊导致的问题。
  2. 提高安装速度:包含了依赖树的完整信息,npm可以直接使用这些信息进行安装,无需重新计算依赖关系。
  3. 避免版本冲突:当项目有多个依赖包,且这些依赖包又依赖于同一个包的不同版本时,package-lock.json可以确保所有的依赖包能够协同工作。

提交必要性

将package-lock.json文件提交到版本控制系统(如Git),可以确保所有团队成员或其他开发者在其他环境中使用相同的依赖版本,从而维护项目的一致性和可重复性。

提交步骤(以Git为例)

  1. 使用git add package-lock.json将文件添加到暂存区。
  2. 使用git commit -m "Add package-lock.json to ensure consistent dependencies"将文件提交到版本控制系统中。

综上所述,package-lock.json文件在Node.js项目中扮演着至关重要的角色,应被妥善管理和提交到版本控制系统中。

回到顶部