NestJS v12 发布解读:ESM 就绪、Standard Schema 校验与全新 CLI
NestJS 于 2026 年 8 月 27 日发布 v12.0.0。v12 围绕四个方向:ESM-ready 包、一等公民的 Standard Schema 校验与序列化支持、重建的 CLI(含自动升级命令)、以及新的 @nestjs/observe 可观测性 SDK。现有 CommonJS 应用继续可用,迁移自己的代码到 ESM 完全可选。
核心变化
ESM 包:所有核心 Nest 包现在以 ESM 形式发布。借助现代 Node.js 的 require(esm),大部分既有 CommonJS 应用无需重写即可运行;但自定义启动脚本、构建工具和测试运行器若假设包是 CommonJS-only 需要检查。nest new 现在会询问创建 CommonJS 还是 ESM 项目。
Standard Schema 校验:路由参数装饰器 @Body()、@Query()、@Param()、@RawBody() 新增 schema 选项,直接接受 Standard Schema 兼容库(Zod、Valibot、ArkType)的 schema:
@Post()
create(@Body({ schema: createUserSchema }) body: CreateUserDto) { ... }
@Get(':id')
findOne(@Param('id', { schema: z.coerce.number().int().positive() }) id: number) { ... }
重建的 CLI 与 nest upgrade:升级 CLI 后可用 nest upgrade 一键把全部 @nestjs/* 包升到 v12 兼容版本,并自动完成机械性迁移——nest-cli.json webpack 选项、GraphQL playground→graphiql 重命名与订阅传输切换、NATS 包替换、@nestjs/config 校验选项、Jest 与 Joi 升级等,结束后打印一份改动与待人工审查清单(可先 --dry-run 预览)。它刻意不迁移 ESM/Vitest/oxlint——这些是新项目默认,既有项目按自己的节奏采纳。
Node.js 版本要求:v12 要求 Node.js v20.19+ 或 v22.12+(包括 21.x 系列在内的旧版本上 nest upgrade 会拒绝执行)。
可观测性:新的 @nestjs/observe SDK 提供原生可观测性能力。
实践建议
- 现有项目升级路径:
npm i -g @nestjs/cli@latest→ 项目根目录nest upgrade(先--dry-run查看影响); - 新项目默认 ESM/Vitest/oxlint;团队是否跟随默认值建议在项目规范中明确;
- 校验逻辑从 DTO class-validator 迁移到 Standard Schema 时,注意
@Param的 coerce 行为(如上例z.coerce.number())与原有全局 ValidationPipe 的兼容性。