npm ci 和 npm i 的区别
一、说明
npm ci 和 npm install 命令都是用来安装依赖的命令,但 npm ci 比常规的 npm i 安装要快得多,也更严格,可以帮助捕获由大多数 npm 用户的增量安装的本地环境引起的错误或不一致,使 npm 依赖安装保持一致和稳定(锁版本),它旨在用于自动化环境,如测试平台,持续集成和部署。
在 package.json 中,每次 npm i 后,对应的版本前都有个 ^ 符号。在这种情况下,你再次npm i 时安装的包的版本就有可能会与之前的不一样,具体的,你可以到 package-lock.json 中查看实际的包版本。
^的匹配规则是:>= 当前版本,且保持从左至右的第一个非零版本。
"^1.2.3": 大于等于 1.2.3 且小于 2.0.0版本
"^0.3.4": 大于等于 0.3.4 且小于 0.4.0版本
"^0.0.6": 大于等于 0.0.6 且小于 0.0.7版本
若我们一直使用 npm i 命令时,便会遇到开发和测试、发布时包版本不同的问题,这种细微的差别往往会导致严重的结局。
所以在有 package-lock.json 或 npm-shrinkwrap.json 的项目,为了保持版本的一致和稳定,我们可以使用 npm ci
来替代 npm install。
注:npm 版本要 >= 5.7。
二、npm ci 与 npm i 的主要区别
- 该项目必须有一个 package-lock.json 或 npm-shrinkwrap.json。
- 如果 package-lock 中的依赖项与 package.json 的依赖项不匹配,npm ci 则将退出并显示错误,而不是更新 package-lock。
- npm ci 只能一次安装整个项目,使用此命令无法添加单个依赖项。
- 如果 node_modules 已经存在,它将在 npm ci 开始安装之前自动删除。
- npm ci 永远不会写入 package.json 或任何包锁,安装基本上是冻结的。