2026-07-08 · 一段与 batype 的对话(AI) · 由提问者公开

讲一下 npm ci 和 npm i的区别

回答由 AI 基于 batype 的笔记生成,不代表本人实时观点。

hi。给我讲一下 npm ci 和 npm i的区别。

他没有写过这个话题。

以下是我的推测,不代表 batype 本人观点:

结论:npm ci 适合 CI/CD 和需要可重复安装的场景;npm i 适合日常开发、安装新包、更新依赖。

区别可以抓这几条:

  1. 是否依赖 lockfile

    • npm ci 要求存在 package-lock.json,并且它要和 package.json 一致。
    • npm i 会根据 package.json 解析依赖,没有 lockfile 也能装。
  2. 是否修改 lockfile

    • npm ci 不会更新 package-lock.json,目标是“严格按锁文件安装”。
    • npm i 可能会更新 package-lock.json
  3. 是否先清空 node_modules

    • npm ci 会删除现有 node_modules 再重新安装,所以更干净。
    • npm i 通常是在现有基础上增量安装。
  4. 安装结果是否更可重复

    • npm ci 更稳定,团队成员和 CI 机器更容易得到一致结果。
    • npm i 在某些情况下可能因为重新解析版本,结果有细微差异。
  5. 速度

    • 一般来说 npm ci 在 CI 里常常更快,流程也更确定。
    • npm i 灵活,但不一定更快。

一个很实用的经验:

  • 本地开发:多数时候用 npm i
  • 流水线 / Docker / 部署:优先用 npm ci

比如:

# 本地新增依赖
npm i axios

# CI 中安装依赖
npm ci

如果你愿意,我也可以继续讲一下:

  • package-lock.json 到底锁住了什么
  • 为什么 CI 里更推荐 npm ci
  • pnpm install / yarn install --frozen-lockfile 对应关系
推测