Aller au contenu principal

Release 3.8.0

· 3 minutes de lecture
Harry Chen

v3.8.0 是在经过大促之后的第一个 minor 版本,积攒了很多新的能力。

升级请参考 如何更新 Midway 中描述,请不要单独升级某个组件包。

Features

1、etcd 组件

新增了一个 etcd 组件,方便用户使用,文档稍后提供。

import { ETCDService } from '@midwayjs/etcd';

@Provide()
export class UserService {

@Inject()
etcdService: ETCDService;

async invoke() {

const fooValue = await this.etcdService.get('foo').string();
console.log('foo was:', fooValue);
// ...
}
}

更多细节请查看 文档

2、ServiceFactory 支持设置默认客户端

ServiceFactory 提供了标准的多客户端能力,在默认的客户端中,我们可以设置非 default 的客户端作为默认客户端来使用。

这项能力支持 ServiceFactory 扩展出来的所有组件,包括 axios/cos/oss/redis/tablestore 等,用户自定义的组件也可以通过简单的适配享受到该能力。

比如,我们定义了多个 redis 客户端。

export default {
// ...
redis: {
clients: {
default: {
// ...
},
default2: {
// ...
},
},
},
}

默认注入的 RedisService 永远为 default 指向的客户端,而新版本我们可以通过设置默认的客户端名,来选择默认的客户端。

比如:

export default {
// ...
redis: {
clients: {
default: {
// ...
},
default2: {
// ...
},
},
defaultClientName: 'default2'
},
}

那么实际获取的 redisService 中是 default2 这个实例。


@Provide()
export class UserService {

@Inject()
redisService: RedisService;

async invoke() {
// this.redisService 中包裹的是 default2
}
}

3、数据源类型增加 @InjectDataSource 装饰器

为了简化获取数据源的过程,我们提供了一个新的 @InjectDataSource 装饰器,支持 mikro/sequelize/typeorm。

比如:

import { InjectDataSource } from '@midwayjs/typeorm';
import { DataSource, Repository } from 'typeorm';

@Provide()
export class UserService {

@InjectDataSource()
defaultDataSource: DataSource;

async invoke() {

// ...
}
}

也可以指定数据源。

import { InjectDataSource } from '@midwayjs/typeorm';
import { DataSource, Repository } from 'typeorm';

@Provide()
export class UserService {

@InjectDataSource('default')
defaultDataSource: DataSource;

async invoke() {
// ...
}
}

Bugfix

  • 1、修复 windows 下 entity 通配扫描,之前 windows 下的 entity 如果使用了通配符,会扫描失败,导致 entity 无法正确的加入到数据源中,新版本修复了该问题。
  • 2、bull 的 Queue 定义处理问题,现在文档已经做了修改,注入的类型可以由 IQueue 变为 BullQueue

Performance

移除了 babel 编译出的 class 的兼容判断,框架整体性能提升约一倍。