标准答案

  1. packageManager、Node 版本文件和 CI 镜像要一致,安装使用 frozen lockfile。
  2. 原生模块可能受 Node ABI、操作系统和构建工具影响,不能只看 semver。
  3. 依赖升级要检查 exports、ESM/CJS、弃用 API、漏洞、启动和运行时指标。
  4. 保留旧 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 版本变化后忽略原生模块重编译。改正:在目标镜像重新安装/构建并运行启动、集成和性能测试。

作者信息