Release 4.0.0-beta
· 4 minute read
这是全新的 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 版本
- 【event-emitter] 新增组件,提供事件触发和监听能力 支持