安装
安装 egg 组件,提供 egg 及其插件加载能力。
npm i @midwayjs/egg --save
该模块安装完成后会自动生成 configuration.ts
文件。其中包含组件配置。
由于 egg 插件需要配置,请开启 midway serverless 体系的配置加载能力,如下。
// configuration.ts
import { Configuration } from '@midwayjs/decorator';
@Configuration({
importConfigs: [
'./config/' // 自动加载 config 目录下所有 配置文件
],
imports: [
'@midwayjs/egg' // 加载 egg 能力组件
]
})
export class ContainerConfiguratin {
}
使用
第一步,添加需要使用的 egg 插件,比如 egg-mysql
。按照 egg 的标准用法。
需要安装 egg-mysql 依赖。
npm i egg-mysql --save
配置开启插件。
// src/config/plugins.ts
export const mysql = {
enable: true,
package: 'egg-mysql'
}
然后在 config.**.ts
中按照原用法配置即可。
// src/config/config.default.ts
{
mysql: {
//... other config for mysql plugin
}
}
在代码中,你可以像 midway 中的那样使用。
export class IndexHandler implements FunctionHandler {
@Inject()
ctx: FaaSContext;
@Plugin()
mysql;
@Func('index.handler')
async handler() {
// this.mysql.xxxx
// or this.ctx.xxxx
}
}
示例项目
这是一个默认安装了 egg 组件,并且开启了 egg-mysql 插件的示例。
f create --template-package=@midwayjs-examples/faas-with-egg-mysql
一些区别
- 不会加载 agent 文件,即只有单进程,不会有 IPC 通信等能力(进程模型限制)
- 不支持流式相关的插件功能,比如文件上传(函数网关限制)
- 本组件只会加载配置的插件目录,即应用或者函数目录不会被 egg 加载,意味着无法对 koa 扩展,可以使用 ioc 能力代替。
- 不会触发 serverDidReady 启动 hook
一些风险
- 使用了 egg 组件,会让函数的性能有所下降,启动时间增大,特别在启动阶段
- 函数文件体积变大
- 无法使用 ncc 等静态化打包方案