node -v
npm i -D @types/node@20
npm ls @types/node

服务器上 node -v 是 v20.11,代码里用 fs.glob 批量找文件,tsc 报 TS2305 Module node:fs has no exported member 'glob'。类型包版本写的是 18.19。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:内置模块的类型来自 @types/node,它按自己声明的版本描述对外接口,和实际运行时没有绑定关系。运行时能跑的新 API 在旧类型里不存在,编译器只认类型包。

「types 版本不匹配」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。同一份配置存在多处的,先确认改的是被加载的那一份。

新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

处理上按这个顺序:先对齐版本 让 @types/node 主版本与运行时一致;升级后重启语言服务 确认新 API 出现在补全里;在 engines 和 CI 里固定同一个大版本 避免机器之间飘。

确认没问题再收工,fs.glob 不再报找不到导出 悬停能看到签名 其他内置模块的类型也补齐了。

作者 9823189