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