在 Midway Hooks 中,我们支持了 ICE/React/Vue 等场景。而对于众多的第三方框架,我们也提供了便捷的接入方案。
参考适配案例:
SDK
运行时库
- @midwayjs/faas:Midway FaaS
- @midwayjs/hooks:Midway Hooks
- @midwayjs/faas-middleware-static-file:托管前端静态文件
一键安装命令:
npm i @midwayjs/faas @midwayjs/hooks@0.x.x @midwayjs/faas-middleware-static-file -S
工程库
- @midwayjs/hooks-loader:Webpack Loader,用于将函数调用转换为 API 请求
- @midwayjs/faas-dev-pack:为 Webpack Dev Server 增加 express 中间件,拦截函数请求实现本地调用
- @midwayjs/faas-cli-plugin-midway-hooks:FaaS Cli 集成插件,用于编译 Hooks 代码
一键安装命令:
npm i @midwayjs/faas-cli-plugin-midway-hooks@0.x.x @midwayjs/hooks-loader@0.x.x @midwayjs/faas-dev-pack -D
前端框架接入指南
函数调用转换为 HTTP 请求
这一步我们是通过 Webpack Loader 实现的。
react-app-wired 示例(基于 Webpack Chain)
module.exports = {
webpack: function (config, env) {
config.module.rules.unshift({
test: /\.(js|mjs|jsx|ts|tsx)$/,
use: [
{
loader: require.resolve('@midwayjs/hooks-loader'),
},
],
})
return config
},
}
函数 Dev Server
这一步是通过为 Webpack Dev Server 增加 express 中间件,拦截函数请求实现的。
React 参考链接:https://github.com/midwayjs/midway-serverless-examples/blob/master/integration/hooks-react/boilerplate/src/setupProxy.js Vue 参考: 参考文档:https://create-react-app.dev/docs/proxying-api-requests-in-development/#configuring-the-proxy-manually
// @ts-ignore: isolated modules error
const { useExpressDevPack } = require('@midwayjs/faas-dev-pack');
const { resolve } = require('path');
const URL = require('url');
module.exports = function (app) {
app.use(
useExpressDevPack({
functionDir: resolve(__dirname, '../'),
sourceDir: resolve(__dirname, 'apis'),
// 忽略渲染函数
ignoreWildcardFunctions: ['render'],
// 忽略静态文件地址
ignorePattern: (req) => {
const { pathname } = URL.parse(req.url);
return /\.(js|css|map|json|png|jpg|jpeg|gif|svg|eot|woff2|ttf)$/.test(pathname);
},
})
);
};
函数构建配置
在一体化工程里,执行构建时,需要在 package.json 写入配置,并在构建中输出前端的产物。
package.json
+ "midway-integration": {
+ "tsCodeRoot": "src/apis",
+ "lifecycle": {
+ "before:package:cleanup": "npm run build"
+ }
+ },
ESLint 配置
如果是 React + 默认 React ESLint 配置,需要关闭 react-hooks/rules-of-hooks
规则,避免 ESLint 报错。
Create React App 配置方式
+ "eslintConfig": {
+ "extends": "react-app",
+ "rules": {
+ "react-hooks/rules-of-hooks": "off"
+ }
+ },
增加后端文件
新建 /src/apis 目录,作为后端代码存放目录。
新增如下文件(点进去链接直接 Copy 即可):
本地运行
npm start
访问地址 /api/hello
,如果有输出 Hello Midway Serverless
,则成功接入。
线上部署
运行部署命令,部署后可查看地址。
f deploy