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

Jon*_*han 3 node.js npm npm-install

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

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

因此,我想将开发人员的说明更改为:

  • (常见情况)如果您不想更改软件包或软件包版本,则仅使用npm ci
  • 如果这样做,请使用npm installand/or npm update(可能与--save-dev),在本地测试,然后提交结果package.jsonand pacakge-lock.json

这些指示合理吗?我错过了什么吗?

Mr.*_*hog 5

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

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

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

基本上这意味着我和我的所有同事将获得相同的 node_modules 文件夹内容。Yarn 早期的优点之一是使用锁定文件进行可重复安装,这被认为是一种很好的做法。