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

参见英文答案 > Do I commit the package-lock.json file created by npm 5?7个
要锁定在项目上安装的依赖项的版本,命令npm install将创建一个名为package-lock.json的文件.这是在 Node.js v8.0.0npm v5.0.0之后完成的,你可能知道几个人.

尽管有关于提交此文件Node.jsnpm建议,但是关于何时应该避免这样做的几个问题也是一种选择.通常我们在项目中承诺,但这是一个特殊的问题.

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

所以,问题如下:

>是否应将package-lock.json文件添加到.gitignore?
>我们必须或不可以做任何特殊情况吗?

解决方法

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

您应该将package-lock.json添加到版本控制存储库中.

我还强烈建议在构建应用程序时使用npm ci而不是npm install,并且该工作流程需要包含lock-lock.json. (npm install命令最大的缺点之一是它可能会改变package-lock.json,而npm ci只使用lockfile中的版本,如果package-lock.json和package.json不在,则会产生错误同步.)

一个强大的用例,可以相信项目的依赖关系可以在不同的机器上以可靠的方式重复解决.

从package-lock.json中你可以得到:一个已知的工作状态.

在过去,我有没有package-lock.json / shrinkwrap / yarn.lock文件的项目,这些文件的构建将在一天内失败,因为随机依赖关系会有更新.这些问题有时难以解决,因为您有时不得不猜测最后一个工作版本是什么.

关于测试项目的最新依赖项:这是npm update的用途,我认为它应该由开发人员运行,开发人员也在本地运行测试,如果出现问题则解决问题,然后谁提交改变了package-lock.json. (如果升级失败,我可以恢复到最后一个工作包-lock.json.)

此外,我很少一次升级所有依赖项,但有时我会挑选我需要的更新.这是我将其视为手动维护步骤的另一个原因.

如果您想让它自动化,您可以创建一份工作:

>结账仓库
>运行npm update
>运行测试

>如果测试通过,则提交并推送到存储库
>其他失败并报告问题需要手动解决

这是我在CI服务器上托管的内容,例如Jenkins,并且不应该通过将文件添加到.gitignore来实现上述原因.

或者到quote npm doc

It is highly recommended you commit the generated package lock to
source control: this will allow anyone else on your team,your
deployments,your CI/continuous integration,and anyone else who runs
npm install in your package source to get the exact same dependency
tree that you were developing on. Additionally,the diffs from these
changes are human-readable and will inform you of any changes npm has
made to your node_modules,so you can notice if any transitive
dependencies were updated,hoisted,etc.

关于difference between npm ci vs npm install

  • The project must have an existing package-lock.json or npm-shrinkwrap.json.
  • If dependencies in the package lock do not match those in package.json,npm ci will exit with an error,instead of updating
    the package lock.
  • npm ci can only install entire projects at a time: individual dependencies cannot be added with this command.
  • If a node_modules is already present,it will be automatically removed before npm ci begins its install.
  • It will never write to package.json or any of the package-locks: installs are essentially frozen.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...