ADR 0051: Node 原生 TypeScript 开发 Runtime
状态
Accepted;适用于 Next Plugin 本地启动与 HMR。
背景
Next Plugin 以 TypeScript 源码作为开发事实源,但默认安装不能携带 Vite、tsx、chokidar、TypeScript compiler 或 native/wasm transform。Node 已提供轻量 type stripping;它不读取 tsconfig,不支持 TSX,也不会执行 node_modules 中的 TS。
决策
NativeDevelopmentModuleRuntime使用 Node ESM/type stripping 直接加载本地.ts,不编译、不生成缓存产物。- Node 22.18+ 直接启动;22.6–22.17 由 CLI 以
--experimental-strip-types重启自身;更低版本只能运行预编译生产 ESM。 - 直接 capability 通过 file URL generation query 穿透 ESM cache,实现 Slot HMR。
- 普通 support module 无法安全清除完整 importer closure,必须升级为 process restart;CLI drain Root 后以退出码 75 交给 supervisor。
- watcher 使用一个 recursive
fs.watch;句柄配额耗尽时退化为低频 mtime polling,不引入第三方 watcher。 - npm Feature/Plugin manifest 必须指向预编译 JS。Page/Layout TSX 继续走 Client Build artifact;服务端 TSX 需要预编译。
后果
- 开发启动零新增 transform 依赖,生产闭包不含 TypeScript。
- 原生 TS 文件的相对 import 必须写
.ts扩展,并使用可擦除语法和import type。 - capability 文件可局部更新;support module 更新成本更高但行为确定,不会出现成功提示后仍执行旧依赖。
- Plugin package 的本地 TS entry 与发布 JS entry 仍需在后续 publish manifest artifact transaction 中统一表达。