开发者使用 npm-ci 是一个好的 NPM 工作流程吗?

Is using npm-ci by developers a good NPM working process?

我在一个大型项目中工作,大约有 10 名开发人员。我们有 package.json 和结果 package-lock.json 提交,我们的 ci 管道 npm ci 根据 package-lock.json.

恢复包

目前,开发人员被指示克隆 repo 和 运行 npm install。但是,我发现 npm install 将安装与 package.json 中的版本规范匹配的不同版本 - 例如,^5.0.5 可能导致 npm install 安装版本 5.1.1,或者保留 5.0.5 如果它已经在那里。

所以,我想将针对开发人员的说明更改为:

这些说明合理吗?我错过了什么吗?

根据文档“此命令与 npm install 类似,除了它旨在用于自动化环境,例如测试平台、持续集成和部署——或 您需要的任何情况想确保您正在对依赖项进行全新安装。” (强调我的)。

我更喜欢使用它而不是“安装”,因为它为 node_modules 文件夹的状态提供了一些保障。

  • 它将删除模块文件夹(如果存在),这将删除所有不在锁定文件中的所有内容,但可能会在以前的安装中意外出现。
  • 如果有人手动更改依赖项并且没有更新锁定文件,它将抛出错误。
  • 它会比安装更快,因为它不需要构建新的依赖树,而且它会保留通过标签安装的依赖版本(如 latestnext)或通配符 (*)。有时这是一件非常好的事情 - 最近 colors incident 就是一个很好的例证。

基本上这意味着我和我的所有同事将获得相同的 node_modules 文件夹内容。 Yarn 早期的优势之一是 lock-file 的可重现安装,这被认为是一种很好的做法。