浅析 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文件
二、npm ci 与 install 的区别
npm ci 要求必需有 package-lock.json
或 npm-shrinkwrap.json
文件存在
如果 lock 与 package.json
中版本不匹配,npm ci 直接报错中断,而不是更新 lock 文件
npm ci 不能用来安装单个依赖,只能用来安装整个项目的依赖
npm ci 会检测如果 node_modules
已经存在,则先删除再进行安装操作
npm ci 会安装 dependencies
和 devDependencies,
和 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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区分