npm 在 CI/CD 流水线中如何保证依赖安装的可复现性?
1. npm ci 命令
- npm ci(clean install)专为自动化环境设计,类似 npm install 但更严格
- 要求项目必须存在 package-lock.json,若与 package.json 不一致则直接报错退出
- 自动删除现有 node_modules,仅从锁定文件安装,绝不修改 package.json 或锁定文件
2. 锁定文件的三重保障
- 时间维度:不同时间执行安装得到完全相同的依赖树
- 环境维度:开发机、CI 服务器、生产环境安装一致的依赖版本
- 协作维度:所有团队成员基于同一锁定文件工作,消除"在我机器上能跑"的问题
3. 完整性校验与缓存
- 锁定文件记录每个包的 SHA-512 完整性哈希,安装时校验内容未被篡改
- 记录包的下载地址(resolved URL),确保即使注册中心配置变化也能从同一来源获取
- CI 环境可缓存 node_modules 或 npm 缓存目录,加速后续构建