Release 4.0.0-beta.1
· 阅读需 4 分钟
这是全新的 Midway 4.0 的 变化,这是一个非常重大的版本。
- 全局变化
- 框架支持从 Node.js >=20 开始
- 默认开启 asyncLocalStorage
- 编程范式
- 不再以黑盒方式提供框架启动时的目录文件扫描自动绑定能力,改为显式声明,每个组件都可以有自己的绑定和加载方式
- 组件包查找规范变化,现在会查找
index.ts,configuration.ts,以及package.json中 main 定义的路径 - 统一规范函数式的导出路径,为组件包下的
functional路径,如@midwayjs/core/functional
- 【core】
- 通用能力
- 由于使用率较低且影响依赖注入容器逻辑,移除了流程控制
Pipeline相关的能力 - 移除之前版本中框架启动时的目录文件扫描自动绑定能力,现在需要显式增加一个 file detector,可以自由配置其需要扫描和忽略的目录或者文件
- 移除了会和 validate 的转换产生歧义的请求参数自动 DTO 转换功能,现在自动转换仅在
validate或者validation组件开启时生效 onReady等生命周期现在增加了超时机制,默认 30s
- 由于使用率较低且影响依赖注入容器逻辑,移除了流程控制
- 函数式编程
- 提供与
@Configuration同样功能的defineConfiguration方法 - 提供内置的 hooks 方法,如
useContext,useLogger,useInject,useConfig,useApp,useMainApp等 - 提供了函数式方法的导出规范,新开发的 hooks 放在
functional目录中,使用子模块方式导出
- 提供与
- 装饰器部分
- 为了更好的管理元数据,重构了
DecoratorManager,增加新的MetadataManager,增加了更加方便的聚 合和拷贝元数据的能力 - 明确各种装饰器继承的情况,默认情况下,类装饰器和参数装饰器不继承,属性装饰器和方法装饰器继承
- 使用
@MainApp()代替@App()空参数 - 使用
@Config(ALL)替换为更为明确的@AllConfig()装饰器 - 移除
@Configuration中的conflictCheck和detectorOptions, 这些配置将移动到detector中 DecoratorManager中的listPrelaodModules调整为listPreStartModule,savePreloadModule调整为savePreStartModule,使其语义更加明确
- 为了更好的管理元数据,重构了
- 依赖注入
- 移除了
container.get和container.getAsync的一部分无用的参数 - 优化了循环依赖时展示的依赖链路信息以及 definition 未找到时的输出信息
- 单例对象现在和
registerObject的对象存储的位置一致了 - 增加了一个动态依赖注入容器,用于在开发期动态替换实例,支持 HMR 功能
- 移除了
- 框架机制
BaseFramework移除了令人疑惑的 container 相关 hook 方法,现在都统一使用applicationInitialize- 移除框架的
MidwayFrameworkType,以及对应的getFrameworkType()方法 - 移除了特定框架下令人疑惑的
contextLoggerApplyLogger和contextLoggerFormat配置,现在如果要配置框架特定的 logger,使用setFrameworkLoggerName方法 ServiceFactory和DataSourceManager现在启动可以通过initClients的参数concurrent支持并发,由组件自行控制是否支持DataSourceManager原有的cacheInstance和validateConnection选项废弃MidwayConfigServce在获取配置时可以增加默认值- 增加服务发现基础功能,增加了
consul、redis、etcd的实现
- 通用能力
- 【decorator】移除,API 都移动到
@midwayjs/core,不再单独提供 4.x 版本 - 【async-hooks-context-manager】现在默认开启 async_local_storage,代码合并至 core 模块中
- 【axios】移除了废弃的
axios导出 - 【socketio】移除了内置的
socket.io-redis - 【validate】
- 由于固化了 Joi 作为验证器,不再更新
- 移除
@Rule作为类装饰器的功能 - 移除属性
@Rule参数传递类本身的功能
- 【validation】新增组件,替代原有 validate 组件
- 支持多种验证器,如 Joi, zod, class-validator,提供内置的 i18n 支持
- 可自定义扩展验证器
- 【mock】
- 由于移除了框架启动的扫描能力,如果有大量历史测试不方便修改,可以使用提供的
createLegacyApp,createLegacyLightApp,createLegacyFunctionApp,对应之前的createApp,createLightApp,createFunctionApp - 移除了
createApp,createLightApp,createFunctionApp方法的最后一个参数,现在额外指定组件可以写到options.imports中
- 由于移除了框架启动的扫描能力,如果有大量历史测试不方便修改,可以使用提供的
- 【sequelize】
- 移除老版本配置的兼容代码,以及历史装饰器导出,如
@BaseTable - 移除默认启动时数据源连接校验
validateConnection,如有需求,可以在配置中单独开启
- 移除老版本配置的兼容代码,以及历史装饰器导出,如
- 【tags】移除,不再提供 4.x 版本
- 【processAgent】移除,不再提供 4.x 版本