跳到主要内容

Release 4.0.0-beta

· 阅读需 4 分钟
Harry Chen
Maintainer of Midway

这是全新的 Midway 4.0 的变化,这是一个非常重大的版本。

  • 全局变化
    • 框架支持从 Node.js >=20 开始
    • 默认开启 asyncLocalStorage
  • 编程范式
    • 不再以黑盒方式提供框架启动时的目录文件扫描自动绑定能力,改为显式声明,每个组件都可以有自己的绑定和加载方式
    • 组件包查找规范变化,现在会查找 index.tsconfiguration.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 中的 conflictCheckdetectorOptions, 这些配置将移动到 detector
      • DecoratorManager 中的 listPrelaodModules 调整为 listPreStartModulesavePreloadModule 调整为 savePreStartModule ,使其语义更加明确
    • 依赖注入
      • 移除了 container.getcontainer.getAsync 的一部分无用的参数
      • 优化了循环依赖时展示的依赖链路信息以及 definition 未找到时的输出信息
      • 单例对象现在和 registerObject 的对象存储的位置一致了
      • 增加了一个动态依赖注入容器,用于在开发期动态替换实例,支持 HMR 功能
    • 框架机制
      • BaseFramework 移除了令人疑惑的 container 相关 hook 方法,现在都统一使用 applicationInitialize
      • 移除框架的 MidwayFrameworkType,以及对应的 getFrameworkType() 方法
      • 移除了特定框架下令人疑惑的 contextLoggerApplyLoggercontextLoggerFormat 配置,现在如果要配置框架特定的 logger,使用 setFrameworkLoggerName 方法
      • ServiceFactoryDataSourceManager 现在启动可以通过 initClients 的参数 concurrent 支持并发,由组件自行控制是否支持
      • DataSourceManager 原有的 cacheInstancevalidateConnection 选项废弃
      • MidwayConfigServce 在获取配置时可以增加默认值
      • 增加服务发现基础功能,增加了 consulredisetcd 的实现
  • 【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】
    • 由于移除了框架启动的扫描能力,如果有大量历史测试不方便修改,可以使用提供的 createLegacyAppcreateLegacyLightAppcreateLegacyFunctionApp ,对应之前的 createAppcreateLightApp, createFunctionApp
    • 移除了 createAppcreateLightApp, createFunctionApp 方法的最后一个参数,现在额外指定组件可以写到 options.imports
  • 【sequelize】
    • 移除老版本配置的兼容代码,以及历史装饰器导出,如 @BaseTable
    • 移除默认启动时数据源连接校验 validateConnection,如有需求,可以在配置中单独开启
  • 【tags】移除,不再提供 4.x 版本
  • 【processAgent】移除,不再提供 4.x 版本
  • 【event-emitter] 新增组件,提供事件触发和监听能力支持