开发者使用 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 ci
- 如果这样做,请使用
npm install
and/or npm update
(可能使用 --save-dev
),在本地测试,然后提交生成的 package.json
和 pacakge-lock.json
.
这些说明合理吗?我错过了什么吗?
根据文档“此命令与 npm install
类似,除了它旨在用于自动化环境,例如测试平台、持续集成和部署——或 您需要的任何情况想确保您正在对依赖项进行全新安装。” (强调我的)。
我更喜欢使用它而不是“安装”,因为它为 node_modules 文件夹的状态提供了一些保障。
- 它将删除模块文件夹(如果存在),这将删除所有不在锁定文件中的所有内容,但可能会在以前的安装中意外出现。
- 如果有人手动更改依赖项并且没有更新锁定文件,它将抛出错误。
- 它会比安装更快,因为它不需要构建新的依赖树,而且它会保留通过标签安装的依赖版本(如
latest
或 next
)或通配符 (*
)。有时这是一件非常好的事情 - 最近 colors incident 就是一个很好的例证。
基本上这意味着我和我的所有同事将获得相同的 node_modules 文件夹内容。 Yarn 早期的优势之一是 lock-file 的可重现安装,这被认为是一种很好的做法。
我在一个大型项目中工作,大约有 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 ci
- 如果这样做,请使用
npm install
and/ornpm update
(可能使用--save-dev
),在本地测试,然后提交生成的package.json
和pacakge-lock.json
.
这些说明合理吗?我错过了什么吗?
根据文档“此命令与 npm install
类似,除了它旨在用于自动化环境,例如测试平台、持续集成和部署——或 您需要的任何情况想确保您正在对依赖项进行全新安装。” (强调我的)。
我更喜欢使用它而不是“安装”,因为它为 node_modules 文件夹的状态提供了一些保障。
- 它将删除模块文件夹(如果存在),这将删除所有不在锁定文件中的所有内容,但可能会在以前的安装中意外出现。
- 如果有人手动更改依赖项并且没有更新锁定文件,它将抛出错误。
- 它会比安装更快,因为它不需要构建新的依赖树,而且它会保留通过标签安装的依赖版本(如
latest
或next
)或通配符 (*
)。有时这是一件非常好的事情 - 最近 colors incident 就是一个很好的例证。
基本上这意味着我和我的所有同事将获得相同的 node_modules 文件夹内容。 Yarn 早期的优势之一是 lock-file 的可重现安装,这被认为是一种很好的做法。