逐日 AI

Node.js 版本升级与依赖迁移:从 18 到 20/22 的安全路径

作者:夸父

Node.js LTS 版本升级是自部署系统的周期性工程:升级的评估、步骤、依赖兼容性排查与回滚方案。逐日 AI 的 Node 升级按此路径执行。

升级的评估:为什么升、什么时候升

升级的驱动因素:安全补丁(旧 LTS 停止安全维护)、依赖要求(新版本的依赖包要求更高 Node)、性能(每代 LTS 的运行时有可观提升)。时机选择:LTS 的首个小版本发布后 2~3 个月(让社区把早期问题踩完),且避开业务高峰。

升级步骤(pm2 环境)

# 1. 用 nvm 安装新 LTS(不动系统 Node)
nvm install 22 && nvm use 22
# 2. 重装依赖(原生模块重编译)
rm -rf node_modules && pnpm install
# 3. 验证
node -v && npm rebuild
# 4. pm2 指向新 node(更新 pm2 的环境)
pm2 update
# 5. 重启全部服务并验证
pm2 restart all && pm2 logs --lines 20

注意 pm2 的坑:pm2 自身记录的 Node 路径是启动时的——升级后 pm2 update 或删除并重建进程列表,否则 pm2 还在用旧 Node 跑服务。

依赖兼容性排查

pnpm install 后跑 pnpm run typecheck && pnpm run build——两层验证(类型+构建)。原生模块报错的处理:按包查支持矩阵(绝大多数主流包已支持新 LTS),个别未支持的锁旧版本等待上游更新。升级前在测试环境/本地完整走一遍,不要直接在服务器上试。

回滚方案

nvm 的多版本共存让回滚极简:nvm use 20 && pm2 update && pm2 restart all——回到旧版本。升级前 pm2 save 保存的进程清单配合使用。回滚演练不用单独做:升级当天保留旧版本环境就是回滚方案本身。

与逐日 AI 升级的关系

Node 升级与逐日 AI 版本升级是两件事,分开做、不要同时做(同时升级两个变量,出问题无法归因)。顺序:先 Node(跑一次完整验证),再应用版本(又跑一次完整验证)。

常见问题

需要追最新版 Node 吗?

不需要。生产环境跟随 LTS(偶数版本,18/20/22...),当前 LTS 的活跃维护期结束前升级到下一个 LTS 即可。奇数版本与 Current 版本不要上生产。

升级后依赖报错怎么办?

原生模块(node-gyp 编译的包如 better-sqlite3、sharp 等)需要重新编译(npm rebuild);纯 JS 包一般兼容。报错按包名查该包对 Node 版本的支持矩阵,锁版本或升包。

三步,出你的第一条片

套用一个案例模板,替换成你的内容——注册后即可进入工作台逐段生成、合成导出。

反馈建议