npm ci 命令到底做了什么?为什么在所有 ci 管道中使用它而不是 npm install?

What exactly does npm ci command does ? why is it used in all ci pipelines instead of npm install?

我对整个 CI/CD 世界有点陌生,但每当我在任何节点 js 项目中看到 config.yml 文件时,总是 npm ci 而不是 npm install.我已经从文档中阅读了一些内容,但我仍然不清楚。有人可以用简洁明了的语言解释一下吗?

npm install 为您生成包-lock.json。该文件包含您安装的所有依赖项的确切版本号以及传递依赖项的版本号,所有这些都基于您在 package.json 中定义的内容。但是请注意,在您的 package.json 中,您可以定义以 ^~ 开头的版本,这表明您要安装某个依赖项的最新补丁或次要版本。因此,每次你 运行 npm install 你的包 - lock.json 可能最终包含你的包的稍新版本(如果可用)。

另一方面,

npm ci 不会生成 package-lock.json 文件。恰恰相反。它要求您的 package-lock.json 已经存在,并且它会准确安装那里列出的版本。这是您要在 CI/CD 管道上 运行 的命令。通过这种方式,您可以确保您的管道使用与您上次在本地使用的完全相同的依赖项,并可以确认它们对您有用。