Skip to content

Commit 3116431

Browse files
authored
fix(doc): fix some doc mistakes (#644)
* fix(loader): fix the requestConfig type definition in beforeLoad * fix: fix some doc mistakes
1 parent 56f7174 commit 3116431

File tree

3 files changed

+110
-68
lines changed

3 files changed

+110
-68
lines changed

website/docs/api/loadApp.md

Lines changed: 63 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,32 @@ title: Garfish.loadApp
33
slug: /api/loadApp
44
order: 4
55
---
6-
import Highlight from '@site/src/components/Highlight';
76

7+
import Highlight from '@site/src/components/Highlight';
88

99
用于手动挂载子应用,可动态控制子应用的渲染和销毁。
10-
> 通过 `Garfish.run()` API 注册的子应用会自动根据路由进行应激活子应用的匹配逻辑,属于路由驱动式的应用挂载和销毁模式。如果你的场景下希望手动控制应用的加载和销毁,你可以使用 `Garfish.loadApp()` 的方式加载应用,它是一种更加灵活的微前端应用加载模式。
10+
11+
> Garfish 支持路由驱动式的应用挂载和销毁模式,
12+
> 如果你的应用配置了 `activeWhen`, Garfish 则将自动监听路由变化并在路由命中时加载对应的子应用。这种模式属于路由驱动式的应用加载模式。如果你希望手动控制应用的加载和销毁,我们提供了 `Garfish.loadApp()` API 以供用户手动加载和销毁应用,这是一种更加灵活的子应用加载模式。
1113
1214
:::info
15+
1316
1. 基于路由匹配的应用加载模式会通过子应用的 `activeWhen` 参数在在路由变化后自动判断当前应加载的子应用;
1417
2. 在手动加载模式下(Garfish.loadApp),Garfish 不会根据路径匹配而是完全由开发者控制应用加载和销毁,此时应用加载不会受到 `activeWhen` 参数的影响;
15-
:::
18+
:::
1619

1720
## 类型
21+
1822
```ts
1923
loadApp(appName: string, options?: Omit<interfaces.AppInfo, 'name'>): Promise<interfaces.App | null>;
2024
```
2125

2226
## 默认值
27+
2328
-
2429

2530
## 示例
31+
2632
import Tabs from '@theme/Tabs';
2733
import TabItem from '@theme/TabItem';
2834

@@ -106,25 +112,29 @@ export default App = () => {
106112
</TabItem>
107113
</Tabs> -->
108114

109-
110115
## 参数
116+
111117
### name
112-
- Type: <Highlight> string </Highlight>
113-
- 要加载的子应用名称,必选。
114-
- 各子应用的名称应保持唯一,这是子应用的唯一标识;
118+
119+
- Type: <Highlight> string </Highlight>
120+
- 要加载的子应用名称,必选。
121+
- 各子应用的名称应保持唯一,这是子应用的唯一标识;
115122

116123
:::tip
124+
117125
1. 请确保当前要加载的子应用信息已注册。Garfish 会从已注册的 app 信息中查找同名 app,若应用信息未注册将导致应用加载失败。
118126
2. 应用信息注册可通过 `Garfish.run()``Garfish.registerApp()``Garfish.setOptions()` 三种方式注册;
119-
:::
127+
:::
120128

121129
### options?
130+
122131
- Type: <Highlight> Omit <interfaces.AppInfo, 'name'> </Highlight>
123132

124133
- `options` 参数含义本质上与 [registerApp](/api/registerApp#参数) 中同名参数保持一致,可选。
125134
- 可移步 [registerApp](/api/registerApp#参数) 查看具体参数说明;这里仅针对注意事项进行说明。
126135

127136
:::info
137+
128138
> `options` 的作用?
129139
130140
这里提供 `options` 是允许用户在手动加载 App 时自定义当前应用的信息参数,若之前已注册过子应用,则会将已配置信息和这里的 `options` 参数进行 deepMerge,提供用户运行时更新 App 应用信息参数的能力;
@@ -141,62 +151,68 @@ export default App = () => {
141151
## 返回值
142152

143153
```ts
144-
import Garfish from "garfish";
145-
import type { interfaces } from "garfish";
154+
import Garfish from 'garfish';
155+
import type { interfaces } from 'garfish';
146156

147157
let app: interfaces.App;
148158
app = await Garfish.loadApp('vue-app', {
149-
cache: true,
150-
basename,
151-
domGetter: '#container',
152-
entry: 'http://localhost:8092',
159+
cache: true,
160+
basename,
161+
domGetter: '#container',
162+
entry: 'http://localhost:8092',
153163
});
154164
```
165+
155166
> loadApp 的返回值为子应用的 App 实例对象,实例对象上存在一些方法和属性,提供给开发者用于手动进行 App 的挂载、销毁及判断 App 当前应用状态等信息;
156167
157168
### 实例属性
158-
- <Highlight> name: string </Highlight>
159169

160-
应用名称,string。
170+
- <Highlight> name: string </Highlight>
171+
172+
应用名称,string。
161173

162-
- <Highlight> mounted: boolean </Highlight>
174+
- <Highlight> mounted: boolean </Highlight>
163175

164-
应用是否已挂载,boolean。 `true` 表示已挂载,`false` 表示未挂载。
176+
应用是否已挂载,boolean。 `true` 表示已挂载,`false` 表示未挂载。
165177

166-
- <Highlight> display: boolean </Highlight>
178+
- <Highlight> display: boolean </Highlight>
167179

168-
应用是否被隐藏,boolean。 `true` 表示显示状态,未隐藏,`false` 表示隐藏态。
180+
应用是否被隐藏,boolean。 `true` 表示显示状态,未隐藏,`false` 表示隐藏态。
169181

170-
- <Highlight> strictIsolation: boolean </Highlight>
182+
- <Highlight> strictIsolation: boolean </Highlight>
171183

172-
是否开启严格隔离。`true` 表示已开启,`false` 表示未开启。
184+
是否开启严格隔离。`true` 表示已开启,`false` 表示未开启。
173185

174-
- <Highlight> isHtmlMode: boolean </Highlight>
186+
- <Highlight> isHtmlMode: boolean </Highlight>
175187

176-
是否是 `html` 入口模式。
188+
是否是 `html` 入口模式。
177189

178-
- <Highlight> appContainer: HTMLElement </Highlight>
190+
- <Highlight> appContainer: HTMLElement </Highlight>
179191

180-
应用容器
192+
应用容器
181193

182-
- <Highlight> appInfo: AppInfo </Highlight>
194+
- <Highlight> appInfo: AppInfo </Highlight>
183195

184-
应用配置信息
196+
应用配置信息
185197

186-
- <Highlight> hooks: interfaces.AppHooks </Highlight>
198+
- <Highlight> hooks: interfaces.AppHooks </Highlight>
187199
应用生命周期钩子函数
188200

189201
### 实例方法
190202

191203
- app.mount()
204+
192205
- Type
206+
193207
```ts
194208
mount(): Promise<boolean>
195209
```
210+
196211
- 示例
212+
197213
```ts
198-
import Garfish from "garfish";
199-
import type { interfaces } from "garfish";
214+
import Garfish from 'garfish';
215+
import type { interfaces } from 'garfish';
200216

201217
const app = await Garfish.loadApp('vue-app', {
202218
cache: true,
@@ -206,6 +222,7 @@ app = await Garfish.loadApp('vue-app', {
206222
});
207223
await app.mount();
208224
```
225+
209226
- 触发子应用的 <Highlight> 渲染</Highlight> 流程。若应用<span style={{color: '#9b67f6'}}> 已挂载 </span>、或<span style={{color: '#9b67f6'}}> 正在挂载中 </span>、或<span style={{color: '#9b67f6'}}> 正在卸载中 </span>将不会触发渲染流程;
210227
- 在子应用渲染前将会触发 `beforeMount` 钩子函数,渲染完成将触发 `afterMount` 钩子函数并将当前挂载的应用 push 进 `Garfish.activeApps`。若渲染过程中出现异常将触发 `errorMountApp`钩子函数;
211228
- 在此过程中将执行 `provider` 提供的子应用 `render` 函数,若 `provider` 函数未找到将会抛出错误。[尝试解决](/issues/#provider-is-null)
@@ -216,25 +233,31 @@ app = await Garfish.loadApp('vue-app', {
216233
:::
217234

218235
- app.unmount()
236+
219237
```ts
220238
unmount(): boolean;
221239
```
240+
222241
- 触发子应用的 <Highlight> 销毁</Highlight> 流程。若应用<span style={{color: '#9b67f6'}}> 正在卸载中 </span>,将不会重复卸载;
223242
- 在子应用渲染前将会触发 `beforeUnmount` 钩子函数,渲染完成将触发 `afterUnmount` ,若销毁过程中出现异常将触发 `errorUnmountApp` 钩子函数;
224243
- 应用卸载过程中会执行 `provider` 内部提供的 `destroy` 函数。卸载完成后,子应用的渲染容器将被移除、子应用的执行上下文也将被销毁,渲染过程中产生的副作用也都将会被清除,同时将子应用从
225-
`Garfish.activeApps` 里移除,`mounted``display` 状态置为 false;
244+
`Garfish.activeApps` 里移除,`mounted``display` 状态置为 false;
226245
- [unmount 过程中都做了哪些事情](/guide/lifecycle#unmount)
227246

228247
- app.show()
248+
229249
- Type
250+
230251
```ts
231252
show(): Promise<boolean>
232253
```
254+
233255
- 触发子应用的 <Highlight> 显示</Highlight> 流程;
234256
- 示例
257+
235258
```ts
236-
import Garfish from "garfish";
237-
import type { interfaces } from "garfish";
259+
import Garfish from 'garfish';
260+
import type { interfaces } from 'garfish';
238261

239262
const app = await Garfish.loadApp('vue-app', {
240263
cache: true,
@@ -245,23 +268,28 @@ app = await Garfish.loadApp('vue-app', {
245268
// 若已经渲染触发 show,只有首次渲染触发 mount,后面渲染都可以触发 show 提供性能
246269
app.mounted ? app.show() : await app.mount();
247270
```
271+
248272
- 触发子应用的 <Highlight> 显示</Highlight> 流程。若应用<span style={{color: '#9b67f6'}}> 已显示 </span>、或<span style={{color: '#9b67f6'}}> 未挂载 </span> 将不会触发应用渲染流程;
249273

250274
- 在子应用显示前将会触发 `beforeMount` 钩子函数,显示完成将触发 `afterMount` 钩子函数并将当前挂载的应用 push`Garfish.activeApps`
251275
- 在此过程中将执行 `provider` 提供的子应用 render 函数,若 `provider` 函数未找到将会抛出错误。[尝试解决](/issues/#provider-is-null)
252276
- [show 过程中都做了哪些事情](/guide/lifecycle#show)
253277

254278
:::info 请注意:
279+
255280
1. `app.show()` 用于触发子应用的显示流程,此过程并不是 css 中样式的显示或隐藏,show() 方法会触发子应用的 `render` 函数,若 `render` 函数中存在副作用也会再次执行;
256281
2. `app.show()` 在应用渲染的过程中将会执行 `provider` 中提供的 `render` 函数,但与 `app.mount()` 不同的是,`app.show()` 不会创建新的执行上下文;
257282
3. 在基于路由驱动子应用加载模式下,若已启用缓存(`cache: true`),则会默认使用 show() 触发子应用的渲染。若未开启缓存模式,则会使用 `app.mount()` 渲染子应用。非路由驱动模式下,由开发者控制子应用的渲染和销毁;
258-
:::
283+
:::
259284

260285
- app.hide()
286+
261287
- Type
288+
262289
```ts
263290
hide(): boolean;
264291
```
292+
265293
- 触发子应用的 <Highlight> 隐藏</Highlight> 流程。若应用<span style={{color: '#9b67f6'}}> 未显示 </span>、或<span style={{color: '#9b67f6'}}> 未挂载 </span> 将不会触发应用隐藏流程;
266294

267295
- 在子应用隐藏前将会触发 `beforeUnmount` 钩子函数,隐藏完成将触发 `afterUnmount` 钩子函数并将当前隐藏的应用从 `Garfish.activeApps` 中移除;

website/docs/guide/concept/sandbox.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ if ($CONFIG.a) {
335335
最初的版本我们通过重写 HTMLElement.prototype.appendChild,把 append 到 body 的样式放到子应用渲染的根节点里。由于劫持的是原型,这个方案无法支持多实例,如果有多个子应用同时运行,没办法区分是由哪个子应用添加的。
336336
337337
2. 劫持实例的 appendChild
338-
所以我们想到的是去劫持所有的 dom 节点,通过重写获取 dom 节点的方法,如 `document.querySelector``ocument.getElementByID`, 把返回的 `dom` 节点通过 `proxy` 进行包装,这样就能劫持 dom 实例的 appendChild,就可以区分是来自于哪个子应用。但是这个方案经过实践,出现的两个比较棘手的问题:
338+
所以我们想到的是去劫持所有的 dom 节点,通过重写获取 dom 节点的方法,如 `document.querySelector``document.getElementByID`, 把返回的 `dom` 节点通过 `proxy` 进行包装,这样就能劫持 dom 实例的 appendChild,就可以区分是来自于哪个子应用。但是这个方案经过实践,出现的两个比较棘手的问题:
339339
340340
- 封装后的 dom 节点在传参的时候会报错,如
341341

0 commit comments

Comments
 (0)