npm install 和 npm ci 有什么区别?
开发时添加或调整依赖,通常用 npm install;在持续集成中按照已有锁文件重建依赖,通常用 npm ci。关键差别在于:能不能修改依赖声明和锁文件。
需要修改依赖时,用 npm install
npm install 可以安装项目已有依赖,也可以添加指定的包。添加包时,它通常会同步更新 package.json 与 package-lock.json。没有锁文件时,也可以通过它建立锁文件。
npm install
npm install zod
npm install -D vitest每次添加或升级依赖后,检查并提交相应的锁文件变更。
需要按锁文件复现时,用 npm ci
npm ci 要求项目中已经存在 package-lock.json 或 npm-shrinkwrap.json。如果锁文件与 package.json 不一致,它会报错,而不是悄悄修正锁文件。它还会先移除已有 node_modules,再进行干净安装。
npm ci
npm run buildnpm ci 用于安装整个项目,不能替代 npm install zod 这类单个依赖的添加操作。它不会写入 package.json 或锁文件。
CI 提示锁文件不一致,怎么处理?
回到开发环境检查 package.json 是否被修改。确认修改是需要的后,使用相同项目配置运行 npm install,审阅生成的 package-lock.json 变更,然后一起提交。不要把删除锁文件作为默认修复手段。
npm install
git diff -- package.json package-lock.json如果生成锁文件时使用了会影响依赖树的选项,例如 legacy-peer-deps,CI 也需要一致的设置。优先把必要的项目设置记录在版本管理中的 .npmrc。
在团队中统一规则
本地新增或升级依赖用 install,自动构建优先用 ci。统一包管理器、提交对应的锁文件,并固定构建环境中的 Node.js 与 npm 版本。锁文件能约束依赖解析,但不能保证所有系统环境和构建输出完全相同。
参考资料
命令行为与框架要求会变化。使用前结合你的项目版本,核对相应官方文档。