安装

安装 egg 组件,提供 egg 及其插件加载能力。

  1. npm i @midwayjs/egg --save

该模块安装完成后会自动生成 configuration.ts 文件。其中包含组件配置。

由于 egg 插件需要配置,请开启 midway serverless 体系的配置加载能力,如下。

  1. // configuration.ts
  2. import { Configuration } from '@midwayjs/decorator';
  3. @Configuration({
  4. importConfigs: [
  5. './config/' // 自动加载 config 目录下所有 配置文件
  6. ],
  7. imports: [
  8. '@midwayjs/egg' // 加载 egg 能力组件
  9. ]
  10. })
  11. export class ContainerConfiguratin {
  12. }

使用

第一步,添加需要使用的 egg 插件,比如 egg-mysql 。按照 egg 的标准用法。

需要安装 egg-mysql 依赖。

  1. npm i egg-mysql --save

配置开启插件。

  1. // src/config/plugins.ts
  2. export const mysql = {
  3. enable: true,
  4. package: 'egg-mysql'
  5. }

然后在 config.**.ts 中按照原用法配置即可。

  1. // src/config/config.default.ts
  2. {
  3. mysql: {
  4. //... other config for mysql plugin
  5. }
  6. }

在代码中,你可以像 midway 中的那样使用。

  1. export class IndexHandler implements FunctionHandler {
  2. @Inject()
  3. ctx: FaaSContext;
  4. @Plugin()
  5. mysql;
  6. @Func('index.handler')
  7. async handler() {
  8. // this.mysql.xxxx
  9. // or this.ctx.xxxx
  10. }
  11. }

示例项目

这是一个默认安装了 egg 组件,并且开启了 egg-mysql 插件的示例。

  1. f create --template-package=@midwayjs-examples/faas-with-egg-mysql

一些区别

  • 不会加载 agent 文件,即只有单进程,不会有 IPC 通信等能力(进程模型限制)
  • 不支持流式相关的插件功能,比如文件上传(函数网关限制)
  • 本组件只会加载配置的插件目录,即应用或者函数目录不会被 egg 加载,意味着无法对 koa 扩展,可以使用 ioc 能力代替。
  • 不会触发 serverDidReady 启动 hook

一些风险

  • 使用了 egg 组件,会让函数的性能有所下降,启动时间增大,特别在启动阶段
  • 函数文件体积变大
  • 无法使用 ncc 等静态化打包方案