当前位置: 首页 > 面试题库 >

是否应该将package-lock.json文件添加到.gitignore?

彭华皓
2023-03-14
问题内容

要锁定项目上安装的依赖项的版本,该命令将npm install创建一个名为的文件package-lock.json。这是从Node.js

v8.0.0和npm
v5.0.0开始的
,您可能已经知道了。

尽管有Node.js和npm关于提交此文件的建议,但是关于何时应避免这样做的一些担忧也是一个选择。通常,我们致力于项目,但这是一个奇特的问题。

虽然我们package-lock.json默认情况下应该提交文件,但是我们有一个特定的情况,我们不应该提交。例如,如果我们要测试项目依赖项的最新版本,则可以添加package- lock.json到中.gitignore

因此,问题如下:

  1. 是否应将package-lock.json文件添加到.gitignore
  2. 是否有任何我们 必须不应该 这样做的特殊情况?

问题答案:

不,package-lock.json 应该添加到中.gitignore。相反,我强烈建议:

  1. package-lock.json您添加到版本控制存储库
  2. npm ci``npm install在本地和部署管道中构建应用程序时, 请使用 代替
    (该ci命令自npm@5.7起可用,如有疑问,请通过以下方式升级npm :)
    npm install -g npm

npm install命令最大的缺点之一是它的意外行为,它可能会使突变package-lock.json,而npm ci仅在锁文件中使用该版本,如果package-lock.jsonpackage.json不同步,则会产生错误。

另外,npm ci 要求 存在a package-lock.json,如果不存在则会打印错误。有一个强大的用例,可以信任该项目的依赖项可以在不同机器上以可靠的方式重复解决。

此外,在添加依赖项之前先npmci对整个node_modules文件夹进行修改,以确保您使用实际的依赖项(而不是本地更改),同时仍比普通的要快npm install

从中package-lock.json您可以确切地得到:一个已知的工作状态。

过去,我有没有package-lock.json/ npm-shrinkwrap.json/
yarn.lock文件的项目,由于随机依赖项的最新更新,其构建将有一天失败。(尽管许多库都遵循semvar版本控制指南,但不能保证它们在进行较小的升级时不会中断。)

这些问题很难解决,因为您有时不得不猜测最新的工作版本是什么。

关于测试项目的最新依赖关系:这是npm update为了解决这个问题,我认为它应该由开发人员运行,该开发人员还要在本地运行测试,如果可能出现问题,则应解决问题,然后提交更改package- lock.json。(如果升级失败,他们可以恢复到上一个​​工作状态package-lock.json。)

此外,我很少一次升级所有依赖项(因为这也可能需要进一步维护),但我宁愿选择需要的更新(例如npm update {dependency}npm install {dependency}@2.1.3)。这是我将其视为手动维护步骤的另一个原因。

如果您真的想让它自动化,可以为以下项目创建工作:

  • 结帐库
  • 运行npm更新
  • 运行测试
    • 如果测试通过,则提交并推送到存储库
    • 否则失败并报告问题,以手动解决

我将看到这是托管在CI服务器(例如Jenkins)上的东西,不应通过将文件添加到的上述原因来实现.gitignore

或引用npm doc:

强烈建议您将生成的程序包锁定提交给源代码控制:这将允许您团队中的其他任何人,您的部署,您的CI
/持续集成以及在包源中运行npm的其他任何人都可以在程序包源中获得完全相同的依赖关系树你在继续发展。此外,这些更改的差异是人类可读的,并且会通知您npm对您的node_modules所做的任何更改,因此您可以注意到是否有任何传递性依赖项被更新,提升等。

并且关于vs 之间npm ci``npm install的区别:

  • 该项目必须具有现有的package-lock.json或npm-shrinkwrap.json。
  • 如果包锁中的依赖项与package.json中的依赖项不匹配,npm ci则将退出并显示错误,而不是更新包锁。
  • npm ci 一次只能安装整个项目:不能使用此命令添加单个依赖项。
  • 如果node_modules已经存在,它将在npm ci开始安装之前被自动删除。
  • 它永远不会写入package.json或执行任何程序包锁定:安装实际上是冻结的。


 类似资料:
  • 问题内容: npm 5已于今天发布 ,其中一项新功能包括通过创建文件进行确定性安装。 该文件应该保留在源代码管理中吗? 我假设它类似于和,这两个都应该保留在源代码管理中。 问题答案: 是的,旨在被检查到源代码管理中。如果您使用的是npm 5,则可能会在命令行上看到:根据: 会为npm修改树或的任何操作自动生成。它描述了生成的确切树,因此无论中间依赖项更新如何,后续安装都可以生成相同的树。 该文件旨

  • 使用start创建spring boot项目时。Springio中,包含一些maven包装文件: mvnw 提交到git repo时是否应该忽略这些文件?

  • 有没有办法检查一个文件是否与兼容,而不运行?兼容意味着指定的版本可以通过来实现。 当前方法 我目前正在通过运行并检查是否更改为: 用例 我想在持续集成中添加一个测试,以确保如果开发人员修改了,他们也会相应地更新。这一点很重要的原因是我们的持续集成使用了,而不是仅引用,因此如果开发人员不更新锁文件,持续集成设置将与他们期望的不匹配。

  • npm@5已经发布,它有一个新的功能文件(在之后),这让我很困惑。我想知道,这个文件有什么效果?

  • 我正在学习使用Node.js和express框架的后端。我通过添加了模块。几个小时后,我注意到我的项目不包含package.json文件。 我现在尝试添加测试命令来使用nodemon。比如。但是在package-lock.json文件中没有这样的部分。 我不想再从头开始。

  • 有没有人看到明显的问题或者知道如何将.trig文件加载到TDB中?