javascript - 使用 "npm ci"而不是 "npm install"进行确定性项目设置

标签 javascript npm npm-ci

给定一个项目,其中 package-lock.json在源代码控制中进行管理,目标是团队中的所有开发人员都获得完全相同的依赖项。

从 npm 的文档中,我认为开发人员应该使用 npm ci设置他们的开发环境,也可能在以后更新依赖项时。

但是我在典型的 npm 项目中看到的指令仍然是使用 npm install .

开发人员是否有理由使用 npm install而不是 npm ci ?是否 npm ci在这种情况下有缺点吗?

我了解 npm ci确实删除了整个 node_modules因此可能会重新下载一些已经存在的依赖项。

但与 npm install我经常遇到 npm install 的情况。实际上是在改变 package-lock.json (见下面的链接),这绝对不是传统项目设置中所期望的,其主要目标是所有开发人员都获得相同的环境。
因此我想推荐使用npm ci .
npm install 的“意外”行为示例:

  • Why does "npm install" rewrite package-lock.json?
  • https://github.com/npm/npm/issues/17722
  • https://npm.community/t/package-lock-json-keeps-changing-between-platforms-and-runs/1129/3
  • https://github.com/npm/npm/issues/20434
  • https://npm.community/t/package-lock-json-changes-from-one-npm-install-to-the-next/1454
  • 最佳答案

    不是 使用 npm ci 的理由而不是 npm i在本地构建 repo 或更新依赖项时(因为它使用 npm 缓存,它的速度与 npm i 大致相同),但有以下情况 npm i可能是首选:

  • 您实际上希望自动接收直接依赖项的次要/补丁更新;
  • 如果您对 package.json 中的版本进行了手动更改并希望他们胜过 package-lock.json 中的版本.
  • 关于javascript - 使用 "npm ci"而不是 "npm install"进行确定性项目设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53469032/

    相关文章:

    node.js - 为什么 npm 在安装东西时会闪烁 "verb"和 "sill"?

    node.js - 获取 npm : command not found. 已安装 Node 时如何重新安装 NPM? NPM 去哪儿了?

    javascript - 仅显示 Highcharts 中使用过的刻度

    javascript - 单击删除按钮时删除文本框、hr 和文本

    javascript - 拍照并使用 CSS 和 javascript 将其放在 html 文件中

    javascript - 使用 gulp 将外部库移动到 wwwroot 文件夹

    javascript - Render 方法不会重新渲染在构造函数中初始化的元素

    npm - "npm install"和 "npm ci"和有什么区别?

    npm - 有没有办法让 "npm ci"安装 devDependencies,或者 "npm install"不更新 package-lock.json?