NestJS 11 带来了 日志增强、微服务优化、启动速度提升 以及对 Express v5 / Fastify v5 的支持。新增 JSON 日志 让容器化部署更高效,微服务 API 变得更灵活,应用启动速度显著提升。同时,最新的 Express v5 需要调整通配符路由。更多更新细节,请查看完整解析,让你的 NestJS 应用更加高效!🔥
Logger 增强
- JSON 日志支持:
ConsoleLogger
现在支持 JSON 格式的日志输出,适用于容器化环境。
- 自定义日志前缀:可以自定义日志前缀,并且支持重新启用颜色输出以便于本地开发。
1 2 3 4 5 6
| const app = await NestFactory.create(AppModule, { logger: new ConsoleLogger({ json: true, colors: true, }), });
|
更灵活的微服务
unwrap
方法:可以直接访问底层客户端实例,支持自定义操作。
- 事件监听:新增
on
方法,用于监听底层客户端的事件,如断开连接或错误。
- 状态观察流:新增
status
观察流,实时监控客户端实例的状态。
1 2 3 4 5 6 7
| const connection = serviceRef.unwrap<NatsConnection>(); serviceRef.on<NatsEvents>('disconnect', () => { console.log('Client disconnected'); }); serviceRef.status.subscribe((status) => { console.log('Status:', status); });
|
更快的应用启动
- 模块不透明键生成优化:通过使用对象引用而不是哈希生成模块键,显著提升了启动性能。
Express v5 和 Fastify v5 支持
- Express v5:更新了路径路由匹配算法,需要注意一些语法变化。
- Fastify v5:大多数用户应该可以平滑升级。
1 2 3 4
| @Get('users/*splat') findAll() { return 'This route will work in Express v5'; }
|
其他有价值的更新
- 终止生命周期钩子顺序反转:
OnModuleDestroy
和 OnApplicationShutdown
的顺序被反转。
CacheModule
更新:使用 cache-manager
v6,支持 Keyv
作为统一的键值存储接口。
- 新的
ParseDatePipe
:简化了日期处理。
- 微服务选项支持从 DI 容器提供:增加了灵活性。
IntrinsicException
:引入了不会自动记录框架日志的异常。
@nestjs/cqrs
增强:支持请求范围的提供者和强类型的命令、事件和查询。
Reflector#getAll
和 Reflector#getAllAndMerge
:现在可以正确推断转换后的元数据类型。
ConfigService#get
更新:现在以不同的顺序读取配置值,并引入了 skipProcessEnv
选项。
迁移指南
- 提供了详细的 迁移指南,帮助用户从 NestJS 10 平滑升级到 NestJS 11。