@modern-js/main-doc 2.0.0-beta.6 → 2.0.0-beta.7
Sign up to get free protection for your applications and to get access to all the features.
- package/.turbo/turbo-build.log +1 -1
- package/en/docusaurus-plugin-content-docs/current/apis/app/hooks/src/index_.md +1 -1
- package/en/docusaurus-plugin-content-docs/current/apis/app/hooks/src/pages.md +1 -1
- package/en/docusaurus-plugin-content-docs/current/apis/app/hooks/src/routes.md +86 -0
- package/en/docusaurus-plugin-content-docs/current/apis/app/runtime/router/router.md +176 -373
- package/en/docusaurus-plugin-content-docs/current/components/enable-bff.md +36 -0
- package/en/docusaurus-plugin-content-docs/current/components/global-proxy-config.md +74 -0
- package/en/docusaurus-plugin-content-docs/current/components/global-proxy.md +28 -0
- package/en/docusaurus-plugin-content-docs/current/components/router-legacy-tip.md +1 -0
- package/en/docusaurus-plugin-content-docs/current/configure/app/auto-load-plugin.md +62 -0
- package/en/docusaurus-plugin-content-docs/current/configure/app/dev/proxy.md +2 -72
- package/en/docusaurus-plugin-content-docs/current/configure/app/runtime/router.md +17 -2
- package/en/docusaurus-plugin-content-docs/current/configure/app/source/entries.md +0 -2
- package/en/docusaurus-plugin-content-docs/current/configure/app/tools/tailwindcss.md +16 -22
- package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/bff/_category_.json +8 -0
- package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/bff/bff-proxy.md +27 -0
- package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/bff/frameworks.md +150 -0
- package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/bff/function.md +222 -0
- package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/bff/index.md +20 -0
- package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/bff/type.md +43 -0
- package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/code-split.md +77 -0
- package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/compatibility.md +76 -0
- package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/eslint.md +145 -0
- package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/index.md +12 -0
- package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/low-level.md +46 -0
- package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/ssg.md +132 -0
- package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/ssr.md +306 -0
- package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/testing.md +46 -0
- package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/web-server.md +57 -0
- package/en/docusaurus-plugin-content-docs/current/guides/basic-features/alias.md +67 -0
- package/en/docusaurus-plugin-content-docs/current/guides/basic-features/css/tailwindcss.md +30 -35
- package/en/docusaurus-plugin-content-docs/current/guides/basic-features/data-fetch.md +400 -0
- package/en/docusaurus-plugin-content-docs/current/guides/basic-features/env-vars.md +166 -0
- package/en/docusaurus-plugin-content-docs/current/guides/basic-features/html.md +235 -0
- package/en/docusaurus-plugin-content-docs/current/guides/basic-features/mock.md +78 -0
- package/en/docusaurus-plugin-content-docs/current/guides/basic-features/proxy.md +60 -0
- package/en/docusaurus-plugin-content-docs/current/guides/basic-features/routes.md +0 -2
- package/en/docusaurus-plugin-content-docs/current/guides/get-started/quick-start.md +2 -4
- package/package.json +3 -3
- package/zh/apis/app/hooks/src/index_.md +1 -1
- package/zh/apis/app/hooks/src/pages.md +1 -1
- package/zh/apis/app/hooks/src/routes.md +89 -0
- package/zh/apis/app/runtime/router/router.md +170 -368
- package/zh/components/debug-app.md +1 -2
- package/zh/components/enable-bff.md +36 -0
- package/zh/components/global-proxy-config.md +70 -0
- package/zh/components/micro-master-manifest-config.md +15 -0
- package/zh/components/router-legacy-tip.md +1 -0
- package/zh/configure/app/auto-load-plugin.md +62 -0
- package/zh/configure/app/deploy/microFrontend.md +0 -10
- package/zh/configure/app/dev/proxy.md +2 -70
- package/zh/configure/app/runtime/master-app.md +2 -16
- package/zh/configure/app/runtime/router.md +17 -3
- package/zh/configure/app/source/entries.md +1 -3
- package/zh/configure/app/tools/_category_.json +1 -1
- package/zh/configure/app/tools/tailwindcss.md +16 -23
- package/zh/guides/advanced-features/bff/frameworks.md +2 -0
- package/zh/guides/advanced-features/bff/function.md +44 -24
- package/zh/guides/advanced-features/code-split.md +28 -20
- package/zh/guides/advanced-features/compatibility.md +24 -14
- package/zh/guides/advanced-features/ssg.md +5 -47
- package/zh/guides/advanced-features/ssr.md +1 -1
- package/zh/guides/advanced-features/testing.md +2 -2
- package/zh/guides/basic-features/alias.md +5 -5
- package/zh/guides/basic-features/css/tailwindcss.md +31 -35
- package/zh/guides/basic-features/data-fetch.md +7 -6
- package/zh/guides/basic-features/env-vars.md +2 -2
- package/zh/guides/basic-features/html.md +62 -137
- package/zh/guides/basic-features/mock.md +8 -9
- package/zh/guides/basic-features/proxy.md +2 -2
- package/zh/guides/basic-features/routes.md +37 -6
- package/zh/guides/get-started/quick-start.md +1 -2
- package/zh/guides/topic-detail/framework-plugin/implement.md +54 -6
- package/zh/guides/topic-detail/micro-frontend/c02-development.md +1 -1
- package/en/docusaurus-plugin-content-docs/current/configure/app/dev/with-master-app.md +0 -31
- package/zh/configure/app/dev/with-master-app.md +0 -32
@@ -27,7 +27,7 @@ export default defineConfig({
|
|
27
27
|
请求 `http://localhost:8080/go/api` 时,会从 [http://www.example.com/](http://www.example.com/) 返回响应内容。
|
28
28
|
|
29
29
|
:::info 补充信息
|
30
|
-
|
30
|
+
配置格式可参考:[http-proxy-middleware](https://github.com/chimurai/http-proxy-middleware)。
|
31
31
|
:::
|
32
32
|
|
33
33
|
## 全局代理
|
@@ -38,7 +38,7 @@ import GlobalProxy from '@site-docs/components/global-proxy.md'
|
|
38
38
|
|
39
39
|
## BFF 代理
|
40
40
|
|
41
|
-
通过配置 [`bff.proxy`](/docs/configure/app/bff/proxy) 可以代理 BFF API
|
41
|
+
通过配置 [`bff.proxy`](/docs/configure/app/bff/proxy) 可以代理 BFF API 请求到指定的服务上,上述两种代理不同,它同样可以用在生产环境:
|
42
42
|
|
43
43
|
```typescript title="modern.config.ts"
|
44
44
|
export default defineConfig({
|
@@ -13,7 +13,7 @@ Modern.js 内置了对 [React Router 6](https://reactrouter.com/en/main) 的**
|
|
13
13
|
|
14
14
|
以 `routes/` 为约定的入口,Modern.js 会自动基于文件系统,生成对应的路由结构。
|
15
15
|
|
16
|
-
Modern.js
|
16
|
+
Modern.js 支持了业界流行的约定式路由模式:**嵌套路由**,使用嵌套路由时,页面的路由 与 UI 结构是相呼应的,我们将会详细介绍这种路由模式。
|
17
17
|
|
18
18
|
```
|
19
19
|
/user/johnny/profile /user/johnny/posts
|
@@ -26,11 +26,30 @@ Modern.js 支持了业界流行的约定路由模式:**嵌套路由**,使用
|
|
26
26
|
+------------------+ +-----------------+
|
27
27
|
```
|
28
28
|
|
29
|
+
|
29
30
|
### 路由文件约定
|
30
31
|
|
31
|
-
|
32
|
+
在`routes/` 目录下,目录名会作为路由 url 的映射,Modern.js 有两个文件约定 `layout.[jt]sx` 和 `page.[jt]sx`(后面简写为 `.tsx`)。这两个文件决定了应用的布局层次,其中 `layout.tsx` 中作为布局组件,`page.tsx` 作为内容组件,是整条路由的叶子节点(一条路由有且仅有一个叶子节点,且必须以叶子节点结尾)。
|
32
33
|
|
33
|
-
|
34
|
+
例如以下目录结构:
|
35
|
+
|
36
|
+
```bash
|
37
|
+
.
|
38
|
+
└── routes
|
39
|
+
├── page.tsx
|
40
|
+
└── user
|
41
|
+
└── page.tsx
|
42
|
+
```
|
43
|
+
|
44
|
+
会产出下面两条路由:
|
45
|
+
- `/`
|
46
|
+
- `/user`
|
47
|
+
|
48
|
+
当添加 `layout.tsx` 后, 假设有以下目录
|
49
|
+
|
50
|
+
:::info
|
51
|
+
这里 `routes/layout.tsx` 会作为 `/` 路由下所有组件的布局组件使用, `routes/user/layout.tsx` 会作为 `/user` 路由下所有路由组件的布局组件使用。
|
52
|
+
:::
|
34
53
|
|
35
54
|
```bash
|
36
55
|
.
|
@@ -64,6 +83,18 @@ Modern.js 支持了业界流行的约定路由模式:**嵌套路由**,使用
|
|
64
83
|
|
65
84
|
`<Layout>` 组件是指 `routes/` 目录下所有 `layout.tsx` 文件,它们表示对应路由片段的布局,使用 `<Outlet>` 表示子组件。
|
66
85
|
|
86
|
+
```tsx title=routes/layout.tsx
|
87
|
+
import { Link, Outlet, useLoaderData } from '@modern-js/runtime/router';
|
88
|
+
|
89
|
+
export default () => {
|
90
|
+
return (
|
91
|
+
<>
|
92
|
+
<Outlet></Outlet>
|
93
|
+
</>
|
94
|
+
)
|
95
|
+
}
|
96
|
+
```
|
97
|
+
|
67
98
|
:::note
|
68
99
|
`<Outlet>` 是 React Router 6 中新的 API,详情可以查看 [Outlet](https://reactrouter.com/en/main/components/outlet#outlet).
|
69
100
|
:::
|
@@ -130,6 +161,8 @@ Modern.js 支持了业界流行的约定路由模式:**嵌套路由**,使用
|
|
130
161
|
|
131
162
|
在组件中,可以通过 [useParams](/docs/apis/app/runtime/router/#useparams) 获取对应命名的参数。
|
132
163
|
|
164
|
+
在 loader 中,params 会作为 [loader](/docs/guides/basic-features/data-fetch#loader-函数) 的入参,通过 `params.xxx` 可以获取。
|
165
|
+
|
133
166
|
### 无路径布局
|
134
167
|
|
135
168
|
当目录名以 __ 开头时,对应的目录名不会转换为实际的路由路径,例如以下文件目录:
|
@@ -217,6 +250,7 @@ Modern.js 会生成 `/login` 和 `/sign` 两条路由,`__auth/layout.tsx` 组
|
|
217
250
|
```
|
218
251
|
:::info
|
219
252
|
当目录的 layout 组件不存在时,该目录下的 loading 组件也不会生效。
|
253
|
+
Modern.js 建议必须有根 layout 和根 loading。
|
220
254
|
:::
|
221
255
|
|
222
256
|
当路由从 `/` 跳转到 `/blog` 时,如果 `blog/page` 组件的 JS Chunk 还未加载,则会先展示 `loading.tsx` 中导出的组件 UI。
|
@@ -272,9 +306,6 @@ export default () => {
|
|
272
306
|
|
273
307
|
:::note
|
274
308
|
在自控式路由下,开发者如果希望在 SSR 中使用 React Router 6 中 [Loader API](https://reactrouter.com/en/main/hooks/use-loader-data#useloaderdata) 的能力会相对复杂,推荐直接使用约定式路由。Modern.js 已经为你封装好了一切。
|
275
|
-
|
276
|
-
<!-- Todo 嵌套路由带来的优化可以补充下文档-->
|
277
|
-
如果项目只想升级到 React Router 6,而不希望使用嵌套路由带来的优化,那 [useLoader](/docs/apis/app/runtime/core/use-loader) 在 SSR 下仍然可以工作。
|
278
309
|
:::
|
279
310
|
|
280
311
|
## 其他路由方案
|
@@ -120,8 +120,7 @@ Starting the modern server...
|
|
120
120
|
info App running at:
|
121
121
|
|
122
122
|
> Local: http://localhost:8080/
|
123
|
-
> Network: http://
|
124
|
-
> Network: http://10.254.68.105:8080/
|
123
|
+
> Network: http://192.168.0.1:8080/
|
125
124
|
```
|
126
125
|
|
127
126
|
在浏览器中打开 `http://localhost:8000/`,内容应该和 `pnpm run dev` 时一致。
|
@@ -30,11 +30,23 @@ const MyPlugin = {
|
|
30
30
|
};
|
31
31
|
```
|
32
32
|
|
33
|
-
|
33
|
+
另外,在插件中,允许配置与其他插件的执行顺序。详情可以参考[插件关系](/docs/guides/topic-detail/framework-plugin/relationship)。
|
34
34
|
|
35
35
|
### 插件类型
|
36
36
|
|
37
|
-
|
37
|
+
Modern-js 支持多种工程开发,如应用工程(app-tools), 模块工程(module-tools)等。
|
38
|
+
|
39
|
+
为了兼顾不同工程开发的差异和通性,Modern-js 将插件如下图进行组织:
|
40
|
+
|
41
|
+
![plugin-relationship](https://lf3-static.bytednsdoc.com/obj/eden-cn/eeeh7uhbepxlpe/modern-website/plugin-relationship.jpg)
|
42
|
+
|
43
|
+
从图可以看出,Modern-js 将插件大致分为两类:
|
44
|
+
|
45
|
+
1. 通用插件: 插件只会包含一些基础的 Hooks
|
46
|
+
|
47
|
+
2. 工程插件: 不同的工程开发会在通用插件的基础上扩展出自己的 Hooks, Config 等类型。
|
48
|
+
|
49
|
+
使用 TypeScript 时,可以引入内置的 `CliPlugin` 等类型,为插件提供正确的类型推导。
|
38
50
|
|
39
51
|
```ts
|
40
52
|
import type { CliPlugin } from '@modern-js/core';
|
@@ -54,19 +66,55 @@ const MyPlugin: CliPlugin = {
|
|
54
66
|
};
|
55
67
|
```
|
56
68
|
|
57
|
-
Modern.js
|
69
|
+
上述代码为通用插件,只包含一些基础的 Hooks。 Modern.js 支持通过泛型对插件的定义进行扩展:
|
70
|
+
|
71
|
+
```ts
|
72
|
+
import type { CliPlugin, AppTools } from '@modern-js/app-tools';
|
58
73
|
|
59
|
-
|
74
|
+
const MyPlugin: CliPlugin<AppTools> = {
|
75
|
+
name: 'my-plugin',
|
76
|
+
|
77
|
+
setup() {
|
78
|
+
const foo = '1';
|
79
|
+
|
80
|
+
return {
|
81
|
+
afterBuild: () => {
|
82
|
+
// 在构建完成后执行逻辑
|
83
|
+
},
|
84
|
+
};
|
85
|
+
},
|
86
|
+
};
|
87
|
+
```
|
88
|
+
|
89
|
+
如果仔细观察 `AppTools` 这个类型,可以发现 `AppTools` 由 3 种类型构成.
|
90
|
+
|
91
|
+
```ts
|
92
|
+
type AppTools = {
|
93
|
+
hooks: AppToolsHooks;
|
94
|
+
userConfig: AppToolsUserConfig;
|
95
|
+
normalizedConfig: AppToolsNormalizedConfig;
|
96
|
+
};
|
97
|
+
```
|
98
|
+
|
99
|
+
当编写插件时,插件通过泛型扩展在不同的基础上扩展自己的 Hooks 等类型:
|
60
100
|
|
61
101
|
```ts
|
102
|
+
// 通用插件上扩展
|
62
103
|
import type { CliPlugin } from '@modern-js/core';
|
63
104
|
import type { MyPluginHook } from 'xxx';
|
64
105
|
|
65
|
-
const MyPlugin: CliPlugin<MyPluginHook> = {};
|
106
|
+
const MyPlugin: CliPlugin<{ hooks: MyPluginHook }> = {};
|
66
107
|
```
|
67
108
|
|
68
|
-
|
109
|
+
```ts
|
110
|
+
// 在 @modern-js/app-tools 基础上扩展
|
111
|
+
import type { CliPlugin, AppTools } from '@modern-js/app-tools';
|
112
|
+
import type { MyPluginHook } from 'xxx';
|
113
|
+
|
114
|
+
const MyPlugin: CliPlugin<AppTools & { hooks: MyPluginHook }> = {};
|
115
|
+
```
|
69
116
|
|
117
|
+
详细说明,请参考 [扩展 Hook](/docs/guides/topic-detail/framework-plugin/extend)。
|
70
118
|
|
71
119
|
### 插件配置项
|
72
120
|
|
@@ -179,7 +179,7 @@ export default () => <div>Table Page</div>;
|
|
179
179
|
|
180
180
|
访问主应用地址 `http://localhost:8080`,效果如下:
|
181
181
|
|
182
|
-
![demo](https://
|
182
|
+
![demo](https://lf3-static.bytednsdoc.com/obj/eden-cn/zq-uylkvT/ljhwZthlaukjlkulzlp/micro-demo.gif)
|
183
183
|
|
184
184
|
在完成了微前端整体开发流程的体验后,你可以进一步了解如何 [开发主应用](./c03-main-app.md)
|
185
185
|
|
@@ -1,31 +0,0 @@
|
|
1
|
-
---
|
2
|
-
sidebar_label: withMasterApp
|
3
|
-
---
|
4
|
-
|
5
|
-
# dev.withMasterApp
|
6
|
-
|
7
|
-
* Type: `Object`
|
8
|
-
* Default: `null`
|
9
|
-
|
10
|
-
When the project is a micro-front-end sub-application, you can use the `withMasterApp` configuration to enable the sub-application debugging mode.
|
11
|
-
|
12
|
-
:::caution Caution
|
13
|
-
When using child app debugging mode, you should first ensure that the main app has online debugging mode turned on.
|
14
|
-
:::
|
15
|
-
|
16
|
-
```js title=modern.config.js
|
17
|
-
export default defineConfig({
|
18
|
-
dev: {
|
19
|
-
withMasterApp: {
|
20
|
-
//the path of the main application
|
21
|
-
moduleApp: 'https://www.masterApp.com',
|
22
|
-
//name of the subapplication
|
23
|
-
moduleName: 'Contact'
|
24
|
-
}
|
25
|
-
}
|
26
|
-
})
|
27
|
-
```
|
28
|
-
|
29
|
-
- moduleApp: `string` Online address of the main application.
|
30
|
-
- moduleName: `Contact` The name of the child app (needs to match the module name registered in the main app)。
|
31
|
-
|
@@ -1,32 +0,0 @@
|
|
1
|
-
---
|
2
|
-
sidebar_label: withMasterApp
|
3
|
-
---
|
4
|
-
|
5
|
-
# dev.withMasterApp
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
* 类型: `Object`
|
10
|
-
* 默认值: `null`
|
11
|
-
|
12
|
-
当项目为微前端子应用的时候,可以使用 `withMasterApp` 配置启用子应用调试模式。
|
13
|
-
|
14
|
-
:::caution 注意
|
15
|
-
使用子应用调试的模式时,应该先确保主应用开启了线上 debug 模式。
|
16
|
-
:::
|
17
|
-
|
18
|
-
```js title=modern.config.js
|
19
|
-
export default defineConfig({
|
20
|
-
dev: {
|
21
|
-
withMasterApp: {
|
22
|
-
// 主应用的路径
|
23
|
-
moduleApp: 'https://www.masterApp.com',
|
24
|
-
// 子应用的名称
|
25
|
-
moduleName: 'Contact'
|
26
|
-
}
|
27
|
-
}
|
28
|
-
})
|
29
|
-
```
|
30
|
-
|
31
|
-
- moduleApp: `string` 主应用的线上地址。
|
32
|
-
- moduleName: `Contact` 子应用的名称(需要和在主应用中注册的模块名匹配)。
|