是否应该将 package-lock.json 提交到 npm 包的存储库?

Posted

技术标签:

【中文标题】是否应该将 package-lock.json 提交到 npm 包的存储库?【英文标题】:Should package-lock.json be commited to repository of npm package? 【发布时间】:2020-06-26 02:25:09 【问题描述】:

这类似于Do I commit the package-lock.json file created by npm 5? 或Should package-lock.json also be published?

但对于 npm 包。有人告诉我不建议将此文件提交到 repo(仅建议用于应用程序),但我现在找不到此信息来确认。

来自 npm 文档:

关于 package-lock.json 的一个关键细节是它不能被发布, 如果在顶层以外的任何地方找到,它将被忽略 包

https://docs.npmjs.com/configuring-npm/package-lock-json.html

这是否意味着我是否提交文件无关紧要?我问是因为 github 刚刚在我的 repo(npm 包)中发现了漏洞(再次),并且它说漏洞在 package-lock.json 中(一个由依赖机器人自动修复 - 由 PR )。 如果锁定文件不在 npm 存储库中,是否意味着 npm 包也容易受到攻击。

关于 npm 包的锁定文件有哪些改进?包含此信息的良好参考网站也会很好。

【问题讨论】:

【参考方案1】:

将包锁定保留在您的存储库中很有用,因为这意味着下载项目并安装它的人将获得与您完全相同的子依赖项。

GitHub 对已弃用的依赖项很挑剔,这很有用,因此您无需重新安装即可了解。

在某些情况下,您下载旧的存储库并希望应用程序保持上次更新时的状态。如果包锁不在 repo 中,那么几乎不可能做到这一点。

通常,如果依赖项有重大更新,您必须更改项目中的代码才能跟上。 package-lock 可以保护您不必一次对具有许多已弃用依赖项的旧项目进行大量更改。

【讨论】:

看来你写的是应用程序而不是npm包。 在不保持最新的情况下,您不太可能将 npm 包留在应用程序中,但我想说同样的规则适用。举例来说,你制作了一个包,然后再回到它,你想逐个更新整个东西,而不是完全重建你的代码库。能够一次更新一个依赖项并相应地进行修复而不是一次更新所有内容会很有帮助。一般来说,一个 npm 包的依赖项越少越好。 对不起,我不明白你的意思,你有 package.json 在那里你可以有确切的版本或^~。我看不到在 npm 包中有锁定文件的原因。所以这并不能真正回答我的问题。您可以使用 package.json 执行与您在评论中所写相同的操作。 您的 package.json 文件用于项目的依赖项。 package-lock.json 文件包含每个依赖项的依赖项的特定版本。否则 npm 只会自动安装它们,我认为在当前版本。 package-lock.json 会及时冻结您的项目,而仅使用 package.json 则不会。 这就是我问这个的原因,使用 pacakge-lock 我的 npm 包中不断出现漏洞,因为即使更改了次要版本,它也不会安装该版本。您所说的一切都与需要冻结依赖项的应用程序有关,以便您可以克隆 repo 并安装它,使用 npm 包大多数用户不使用 git repo。

以上是关于是否应该将 package-lock.json 提交到 npm 包的存储库?的主要内容,如果未能解决你的问题,请参考以下文章

我应该将 `package-lock.json` 复制到 Dockerfile 中的容器映像吗?

使用 Git 管理 package.json 和 package-lock.json

package-lock.json,我们应该了解

npm notice 创建了一个锁文件作为 package-lock.json。你应该提交这个文件

应该如何为 Node.js docker 应用生成 package-lock.json 文件?

检查 NPM package.json 和 package-lock.json 是不是兼容