安装
安装 egg 组件,提供 egg 及其插件加载能力。
npm i @midwayjs/egg --save
该模块安装完成后会自动生成 configuration.ts 文件。其中包含组件配置。
由于 egg 插件需要配置,请开启 midway serverless 体系的配置加载能力,如下。
// configuration.tsimport { 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.tsexport 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 等静态化打包方案
