Nestjs11更新了什么?

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';
}

其他有价值的更新

  • 终止生命周期钩子顺序反转:OnModuleDestroyOnApplicationShutdown 的顺序被反转。
  • CacheModule 更新:使用 cache-manager v6,支持 Keyv 作为统一的键值存储接口。
  • 新的 ParseDatePipe:简化了日期处理。
  • 微服务选项支持从 DI 容器提供:增加了灵活性。
  • IntrinsicException:引入了不会自动记录框架日志的异常。
  • @nestjs/cqrs 增强:支持请求范围的提供者和强类型的命令、事件和查询。
  • Reflector#getAllReflector#getAllAndMerge:现在可以正确推断转换后的元数据类型。
  • ConfigService#get 更新:现在以不同的顺序读取配置值,并引入了 skipProcessEnv 选项。

迁移指南

  • 提供了详细的 迁移指南,帮助用户从 NestJS 10 平滑升级到 NestJS 11。