浅析 npm ci 命名介绍、与 npm i 的区别及为什么要使用 npm ci

一、为什么要使用 npm ci

1、package-lock.json的表现,在npm@5.4.2版本后的表现:

(1)无package-lock.json:npm i 根据package.json进行安装,并生成package-lock.json

(2)package.json和package-lock.json的版本不兼容:npm i 会以package.json为准进行安装,并更新package-lock.json

(3)package.json和package-lock.json的版本兼容:npm i 会以package-lock.json为准进行安装。

2、缘起:npm ci 如何解决上面 1、2 问题

  由于以上1、2点的存在,即使有package-lock.json文件,配合 npm i,我们也不能保证线上构建时的依赖版本与本地开发时的一致。

  npm ci是类似于 npm i 的命令,适用于 ci 时安装依赖,与 npm i 主要的差异有:

(1)使用 npm ci 的项目必须存在package-lock.json或npm-shrinkwrap.json文件,否则无法执行(即以上1的情况)

(2)如果package-lock.json或npm-shrinkwrap.json中的依赖与package.json中不一致(即以上2的情况),npm ci 会报错并退出,而不是更新lock文件

  基于以上 2 种特性,使用 npm ci 能够有效防止线上构建的依赖与开发者本地不一致的情况。

二、npm ci 与 install 的区别

  npm ci 要求必需有 package-lock.jsonnpm-shrinkwrap.json 文件存在

  如果 lock 与 package.json 中版本不匹配,npm ci 直接报错中断,而不是更新 lock 文件

  npm ci 不能用来安装单个依赖,只能用来安装整个项目的依赖

  npm ci 会检测如果 node_modules 已经存在,则先删除再进行安装操作

  npm ci 会安装 dependenciesdevDependencies,和 npm install 一样,生产环境下,即通过 -—production 或通过 NODE_ENV 配置,则只会安装 dependencies

  npm ci 不会更改 package.json 或是 package-locks 文件,整个安装过程是锁死的

  缓存 npm ci --cache .npm

  npm ci 时建议加上 --quiet --no-progress 关闭进度和其他无用 log,否则产生的日志会很大。

  所以 npm ci 时推荐完整的命令为: npm ci --cache .npm --quiet --no-progress

三、npm ci 比 npm install 更快捷,更可靠

  npm ci 命令会根据 lock 文件(比如 package-lock.json)去下载node_modules。它比npm install命令快2至10倍,因为npm ci安装包之前,会删除掉node_modules文件夹,因此他不需要去校验已下载文件版本与控制版本的关系,也不用校验是否存在最新版本的库,所以下载的速度更快。

  使用场景:正因为其安装的稳定和无侵入性质,所以适合集成在发布流程的shell命令里,来替换 npm install

posted @   古兰精  阅读(2186)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2017-11-13 Java里日期转换及日期比较大小
2017-11-13 iframe.contentWindow 属性:关于contentWindow和contentDocument区分
点击右上角即可分享
微信分享提示