在 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 errorconst { 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
