为啥“npm install”会修改 package-lock.json?那为啥要把它提交给git呢?
Posted
技术标签:
【中文标题】为啥“npm install”会修改 package-lock.json?那为啥要把它提交给git呢?【英文标题】:Why does "npm install" modify package-lock.json? Why commit it to git then?为什么“npm install”会修改 package-lock.json?那为什么要把它提交给git呢? 【发布时间】:2019-03-31 07:53:35 【问题描述】:当我在项目中运行“npm install”时,它经常会修改 package-lock.json,例如,如果我在另一台计算机上处理同一个项目(使用不同的节点或 npm 版本)。
但同时文档建议该文件应该添加到版本控制(在我的情况下为 git):
https://docs.npmjs.com/files/package-lock.json
此文件旨在提交到源存储库中,并且 有多种用途:...
那么我应该在切换工作机器或其他人npm install
时来回提交 npm 所做的更改吗?这将是一场噩梦。
目前我只是放弃了 npm 对 package-lock.json 所做的任何更改,它运行良好。所以我还不如将它添加到.gitignore...
我做错了吗?我应该改用npm ci
吗?我不会称我的电脑为“CI”,它只是一台开发机器,我为什么要在那里使用它?
基本上我和这位先生有同样的问题:
https://github.com/npm/npm/issues/18103#issuecomment-370401935
(遗憾的是,我根本无法对该问题添加评论或创建新问题,npm 存储库已禁用问题)
【问题讨论】:
Do I commit the package-lock.json file created by npm 5?的可能重复 这很复杂。官方应该提交 package-lock.json,但很多人没有。要了解,您还需要阅读npm shrinkwrap
和 npm ci
。请参阅以下相关问题:***.com/questions/52499617/…、***.com/questions/44206782/…。
【参考方案1】:
是的,您希望将您的 package-lock.json 文件提交到源代码管理。这背后的原因是为了确保为每个下拉代码的用户下载和安装每个包的所有相同版本。包含该文件还有其他一些原因,例如跟踪对包树的更改以供审核。
【讨论】:
是的,我了解锁定文件的用途,但在 npm 的情况下,它实际上会安装 不同 版本的软件包而不是锁定文件中的软件包(并修改了这些版本在做的时候)-这个我不明白 从 NPM 版本 5.1.0 开始,就 package.json 中更高的依赖包版本而言,package.json 可以胜过 package-lock.json。这可以通过删除锁定文件中包版本中的波浪号来解决。以上是关于为啥“npm install”会修改 package-lock.json?那为啥要把它提交给git呢?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 `npm install` 会为同一个 `package.json` 文件生成不同的 `package-lock.json` 文件?
为啥在 npm install 之后 npm 正在运行准备脚本,我该如何停止它?
为啥“npm install”不重写 package-lock.json?如果不存在也不生成新的?
npm install 如果 package.json 被修改
记录 `node_modules` 修改文件并通过 `npm install` 自动下载
为啥“npm install”在我的“package-lock.json”文件中为我的包添加“node_modules”前缀?