标准答案
- packageManager、Node 版本文件和 CI 镜像要一致,安装使用 frozen lockfile。
- 原生模块可能受 Node ABI、操作系统和构建工具影响,不能只看 semver。
- 依赖升级要检查 exports、ESM/CJS、弃用 API、漏洞、启动和运行时指标。
- 保留旧 lockfile、镜像和制品,灰度验证后再扩大范围。
题目解析
可复现安装依赖 Node 版本、包管理器、lockfile、操作系统、系统库和原生模块 ABI。package.json 能解析并不意味着生产镜像中二进制、exports 或运行时行为兼容。
升级要审查直接/间接依赖、漏洞、弃用 API、ESM/CJS、TLS、原生模块和启动/运行指标。CI 使用 frozen lockfile,制品和运行时版本要可追溯。
回滚要保留旧 lockfile、镜像和构建产物,并验证数据库、消息 Schema 和异步任务仍兼容。依赖升级是运行时变更,不只是修改版本号。
常见误区
- 误区:本地 npm install 后直接提交 lockfile 变化。改正:遵循仓库规定的包管理器和 frozen lockfile 流程,审查变化来源。
- 误区:只升级 package.json 不验证 lockfile。改正:锁定完整依赖树,检查间接依赖、原生模块和制品差异。
- 误区:Node 版本变化后忽略原生模块重编译。改正:在目标镜像重新安装/构建并运行启动、集成和性能测试。