换了一台机器用新版本 Node 装依赖,npm 刷出一整屏 WARN EBADENGINE Unsupported engine,装完启动又报某个原生模块加载失败,删了重装还是这样。日志里能对上时间点,这种反而好排。

依赖包的清单里只声明了支持的版本区间,包管理器默认只警告不拦,而原生模块是按旧版本接口编出来的二进制,在新版本里根本加载不了。这一点先确认清楚,后面就不用反复试。

nvm install 18.20.4
nvm use 18.20.4
npm ci
npm ls --depth=0

围绕「EBADENGINE 引擎版本」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

报错里带路径的,先去看那个路径在不在、权限对不对。

处理上按这个顺序:先看清楚警告信息里写明的那个版本区间要求;用版本管理工具切到能够匹配的那个大版本上;删掉依赖目录和锁文件之后,再重新安装一遍。

结果对不对很好判断,安装过程没有版本警告,原生模块能正常加载,服务也能起来。

作者 9823189