UNPKG

utquidem

Version:

The meta-framework suite designed from scratch for frontend-focused modern web development.

169 lines (121 loc) 4.51 kB
--- sidebar_position: 2 title: 子应用调试 --- 根据研发的不同阶段,我们将子应用调试分为如下两种方式: 1. 使用本地主应用调试。 2. 使用线上主应用调试。 ## 使用本地主应用调试 项目初期,主应用未部署,可以使用本地分别启动主应用、子应用的方式进行调试。 ### 主应用 #### 配置 ```js title="modern.config.js" export default defineConfig({ runtime: { router: true, masterApp: { manifest: { modules: [ { name: 'Dashboard', entry: 'http://localhost:8081', }, ], }, }, }, }); ``` 假设本地的子应用的名字为 `DashBoard` 且启动服务的地址为 `http://localhost:8081`。配置 `runtime.masterApp.modules` 字段指定子应用的相关信息。 #### 加载子应用 使用 [useModuleApps](/docs/apis/runtime/app/use-module-apps) API 获取子应用组件,并加载子应用。 ```tsx title=App.tsx import { useModuleApps } from '@modern-js/runtime'; function App() { const { Dashboard } = useModuleApps(); return ( <div> Master APP <Route path="/dashboard"> <Dashboard /> </Route> </div> ); } ``` ### 子应用 #### 配置 ```js title="modern.config.js" export default defineConfig({ deploy: { microFrontend: true, }, }); ``` 当 `deploy.microFrontend` 字段配置为 true 的时候,Modern.js 将认为当前应用是一个微前端子应用,并将其编译为符合 Garfish 子应用规范的产物。 #### 子应用代码 子应用在代码层面和 MWA 是完全一致的。 ```tsx title=src/App.tsx function App() { return <div>dashboard</div>; } ``` :::info 注 目前不支持在子应用中使用 BFF 功能。 ::: 然后分别启动主应用和子应用(执行 `pnpm dev`),主应用访问 `8080` 端口,子应用访问 `8081` 端口。浏览器打开 `http://localhost:8080/dashboard` 就能看到加载了 `Dashboard` 子应用的效果了。 ## 使用线上主应用调试 当主应用项目部署之后,Modern.js 提供了用线上主应用调试本地子应用的方式。 :::info 注 本小节所用线上地址均是虚构,只为演示方便。 ::: ### 主应用 #### 配置 ```js title="modern.config.js" export default defineConfig({ server: { enableMicroFrontendDebug: true, }, runtime: { router: true, masterApp: { manifest: { modules: [ { name: 'Dashboard', entry: 'http://modern-js.dev/dashboard', }, ], }, }, }, }); ``` :::info 注 `enableMicroFrontendDebug` 会在线上开启 微前端 Debug 模式,如担心安全隐患,可只在线上测试环境开启,线上正式环境关掉该配置。 ::: ### 子应用 #### 配置 ```js title="modern.config.js" export default defineConfig({ deploy: { microFrontend: true, }, }); ``` 本地启动子应用,其端口为 `8080`。 ### Query 模式调试 访问主应用地址 `http://master.example.com/` 并在 URL 后加上 Query `?__debug__micro-frontend-debug-name=TableList&__debug__micro-frontend-debug-entry=http://localhost:8080`。 此时访问主应用后,服务端注入的子应用模块信息将被替换为我们 Query 里的信息。即 `TableList` 子应用 `entry` 为 `http://localhost:8080`。线上主应用切换到 `/tablelist` 路由后将会加载本地的子应用。 ![query-debug](https://lf3-static.bytednsdoc.com/obj/eden-cn/aphqeh7uhohpquloj/modern-js/docs/query-debug.png) ### Header 模式调试(推荐) Query 调试时,当路透跳转的时候,Query 参数会丢失,reload 页面后,服务端返回的子应用信息里将不会注入本地的子应用信息。可以使用 Header 模式来调试,获取更稳定的调试开发体验。 #### 环境要求 [ModHeader](https://modheader.com/install) 是用于 Mock 浏览器请求/返回 Header 的浏览器插件。使用 ModHeader 支持的浏览器(Chrome、Firfox、Opera、Edge),并安装 ModHeader 插件。 #### 配置 Header 配置如下 Header: - `x-micro-frontend-module-name TableList` - `x-micro-frontend-module-entry http://localhost:8080` 访问主应用地址如下所示 ![header-debug](https://lf3-static.bytednsdoc.com/obj/eden-cn/aphqeh7uhohpquloj/modern-js/docs/header-debug.png) 可以看到此时服务端返回的 `TableList` 子应用信息是 Header 里面指定的本地域名 `http://localhost:8080`