midway serverless 已经合并到 midway 主库,后续都请查看 midway 主文档
Midway Serverless 是用于构建 Node.js 云函数的 Serverless 框架。帮助您在云原生时代大幅降低维护成本,更专注于产品研发。
- 跨云厂商:一份代码可在多个云平台间快速部署,不用担心你的产品会被云厂商所绑定。
- 云端一体化:提供了多套和社区前端 React、Vue 等融合一体化开发的方案。
- 代码复用:通过框架的依赖注入能力,让每一部分逻辑单元都天然可复用,可以快速方便地组合以生成复杂的应用。
- 传统迁移:通过框架的运行时扩展能力,让 Egg.js 、Koa、Express.js 等传统应用无缝迁移至各云厂商的云函数。
Midway Serverless 是阿里巴巴集团发起的开源项目,由一个专业的 Node.js 架构团队进行维护。已大规模应用于阿里集团各 BU 线上业务,稳定承载了数千万的流量。
安装
国内用户建议使用 cnpm 加速 npm 比如 npm install -g cnpm —registry=https://registry.npm.taobao.org 然后将之后所有的 npm 命令替换为 cnpm
:::warning windows 用户请使用 git bash 执行命令。 :::
首先,你需要安装 Node(> 10.9),以及 npm。
npm install @midwayjs/faas-cli -g
安装完成之后,在全局就拥有了 f 命令,你可以使用 f -h 查看拥有的能力。
:::info
@midwayjs/faas-cli 是当前最新的函数开发命令行工具,包含了本地调用,调试,mock 发布等一系列能力。
:::
windows 下的问题
如果你是windows 开发,也可以将此工具安装在项目中,使用 npx f 来调用后续的其他命令。
创建一个标准函数
执行下面的命令。
f create
你会看到以下脚手架选择,选择 faas-standard 。
Generating boerplate...? Hello, traveller.Which template do you like? …⊙ Boilerplate❯ faas-standard - A serverless boilerplate for aliyun fc, tencent scf and so onfaas-layer - A serverless runtime layer boilerplate⊙ Examplesfaas-react - A serverless example with reactfaas-vue - A serverless example with vue
如图所示。

安装依赖。
npm install
目录结构
以下就是一个函数的最精简的结构,核心会包括一个 f.yml 标准化函数文件,以及 TypeScript 的项目结构。
.├── f.yml # 标准化 spec 文件├── package.json # 项目依赖├── src│ └── index.ts # 函数入口└── tsconfig.json
我们来简单了解一下文件内容。
f.yml函数定义文件tsconfig.jsontsc 配置文件(没有 IDE 会报错)src函数源码目录src/index.ts示例函数文件
函数文件
我们首先来看看函数文件,传统的函数是一个 function ,为了更符合 midway 体系,以及使用我们的依赖注入,这里将它变成了 class。
import { Func, Inject, Provide } from '@midwayjs/decorator';import { FaaSContext, FunctionHandler } from '@midwayjs/faas';@Provide() // 提供 IoC 容器扫描标识@Func('index.handler') // 标注函数export class IndexService implements FunctionHandler {@Inject()ctx: FaaSContext; // 函数执行上下文async handler() { // 函数体return 'hello world'; // 函数返回值}}
函数定义文件
f.yml 是函数的定义文件,midway faas 通过这个文件,在构建时生成不同平台所能认识的文件,示例中的文件内容如下。
service:name: serverless-hello-world ## 函数组名,可以理解为应用名provider:name: aliyun ## 发布的平台,这里是阿里云functions: ## 函数的定义index: ## 第一个函数名,名叫 indexhandler: index.handler ## 函数的入口为 index.handlerevents: ## 绑定的触发器,这里为 http 触发器,用到的方法为 get- http:method: getpackage: ## 构建出来的压缩包文件名artifact: code.zip
开发函数
本地调用
脚手架代码创建完毕后,我们可以尝试调用一下。
输入以下命令。
$ f invoke -f index
:::info
invoke 命令是用于本地简单的调用一下函数, -f 参数用于指定一个函数名,第一次调用时,会让用户选择需要发布到哪个平台。
:::
由于我们的示例为 http 触发器,所以输出结果如下,我们的 hello world 会被包裹在一个大 JSON 中。
--------- result start --------{"headers":{"Content-Type":["application/json; charset=utf-8"],"content-type":"text/plain"},"statusCode":200,"body":"hello world","base64Encoded":false}--------- result end --------
部署函数
部署函数分为两步,一是打包(package)二是部署发布(deploy),直接使用发布命令即可打包并部署函数:
$ f deploy
支持所有 package 命令的参数
| 参数 | 释义 |
|---|---|
| —resetConfig | 修改账户、部署区域等配置 |
部署到阿里云云函数(FC)
账号配置
阿里云部署首次需要配置 accountId、accountKey、accountSecret
相关配置获取,可参照下方图片:
点击此处跳转阿里云安全设置页。

点击跳转阿里云个人 AccessKey 页面。
HTTP 触发器域名
现阶段,阿里云发布的 HTTP 函数为了方便用户测试,会自动绑定一个临时域名。
部署到腾讯云云函数(SCF)
- 用户信息认证:
- 腾讯云在部署时,如果是首次部署,则控制台会展示相应二维码,扫码即可完成认证,后续会默认复用该配置
- 后续如想修改部署时的使用的用户,可手动在 serverless.yml 中设置当前用户的认证信息,教程:https://cloud.tencent.com/document/product/1154/38811
- 部署网关设置
- 腾讯云在部署时,会为函数默认创建网关触发器
- 如果想避免重复创建,可按下列教程操作
发布完成后,控制台会默认显示腾讯云此次创建的网关 serviceId(如下图所示)
此时需要修改 serverless.yml 的配置文件,serviceId 可以配在以下两处:
- provider
此处配置则对所有函数生效,所有函数共享一个网关 serviceId
provider:name: tencentserviceId: <控制台返回的 ServiceId>
- events/http
此处配置则对指定函数生效
functions:index:initializer: index.initializerhandler: index.handlerevents:- http:method: getserviceId: <控制台返回的 ServiceId>
=========
最后大家如果遇到什么问题,或者希望追加什么功能,或者学习内部实现,可以关注我们的仓库地址:
(👇,点赞,分享…三连)
https://github.com/midwayjs/midway
