@modern-js/main-doc 2.0.0-beta.5 → 2.0.0-beta.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/en/docusaurus-plugin-content-docs/current/apis/app/hooks/src/index_.md +1 -1
  3. package/en/docusaurus-plugin-content-docs/current/apis/app/hooks/src/pages.md +1 -1
  4. package/en/docusaurus-plugin-content-docs/current/apis/app/hooks/src/routes.md +86 -0
  5. package/en/docusaurus-plugin-content-docs/current/apis/app/runtime/core/use-module-apps.md +1 -1
  6. package/en/docusaurus-plugin-content-docs/current/apis/app/runtime/router/router.md +176 -373
  7. package/en/docusaurus-plugin-content-docs/current/components/enable-bff.md +36 -0
  8. package/en/docusaurus-plugin-content-docs/current/components/global-proxy-config.md +74 -0
  9. package/en/docusaurus-plugin-content-docs/current/components/global-proxy.md +28 -0
  10. package/en/docusaurus-plugin-content-docs/current/components/router-legacy-tip.md +1 -0
  11. package/en/docusaurus-plugin-content-docs/current/configure/app/auto-load-plugin.md +62 -0
  12. package/en/docusaurus-plugin-content-docs/current/configure/app/dev/proxy.md +2 -72
  13. package/en/docusaurus-plugin-content-docs/current/configure/app/runtime/router.md +17 -2
  14. package/en/docusaurus-plugin-content-docs/current/configure/app/source/entries.md +0 -2
  15. package/en/docusaurus-plugin-content-docs/current/configure/app/tools/tailwindcss.md +16 -22
  16. package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/bff/_category_.json +8 -0
  17. package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/bff/bff-proxy.md +27 -0
  18. package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/bff/frameworks.md +150 -0
  19. package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/bff/function.md +222 -0
  20. package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/bff/index.md +20 -0
  21. package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/bff/type.md +43 -0
  22. package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/code-split.md +77 -0
  23. package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/compatibility.md +76 -0
  24. package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/eslint.md +145 -0
  25. package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/index.md +12 -0
  26. package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/low-level.md +46 -0
  27. package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/ssg.md +132 -0
  28. package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/ssr.md +306 -0
  29. package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/testing.md +46 -0
  30. package/en/docusaurus-plugin-content-docs/current/guides/advanced-features/web-server.md +57 -0
  31. package/en/docusaurus-plugin-content-docs/current/guides/basic-features/alias.md +67 -0
  32. package/en/docusaurus-plugin-content-docs/current/guides/basic-features/css/tailwindcss.md +30 -35
  33. package/en/docusaurus-plugin-content-docs/current/guides/basic-features/data-fetch.md +400 -0
  34. package/en/docusaurus-plugin-content-docs/current/guides/basic-features/env-vars.md +166 -0
  35. package/en/docusaurus-plugin-content-docs/current/guides/basic-features/html.md +235 -0
  36. package/en/docusaurus-plugin-content-docs/current/guides/basic-features/mock.md +78 -0
  37. package/en/docusaurus-plugin-content-docs/current/guides/basic-features/proxy.md +60 -0
  38. package/en/docusaurus-plugin-content-docs/current/guides/basic-features/routes.md +0 -2
  39. package/en/docusaurus-plugin-content-docs/current/guides/get-started/quick-start.md +2 -4
  40. package/package.json +4 -4
  41. package/zh/apis/app/hooks/src/index_.md +1 -1
  42. package/zh/apis/app/hooks/src/pages.md +1 -1
  43. package/zh/apis/app/hooks/src/routes.md +89 -0
  44. package/zh/apis/app/runtime/core/use-module-apps.md +1 -1
  45. package/zh/apis/app/runtime/router/router.md +170 -368
  46. package/zh/components/debug-app.md +1 -2
  47. package/zh/components/enable-bff.md +36 -0
  48. package/zh/components/global-proxy-config.md +70 -0
  49. package/zh/components/micro-master-manifest-config.md +15 -0
  50. package/zh/components/router-legacy-tip.md +1 -0
  51. package/zh/configure/app/auto-load-plugin.md +62 -0
  52. package/zh/configure/app/deploy/microFrontend.md +0 -10
  53. package/zh/configure/app/dev/proxy.md +2 -70
  54. package/zh/configure/app/runtime/master-app.md +2 -16
  55. package/zh/configure/app/runtime/router.md +17 -3
  56. package/zh/configure/app/source/entries.md +1 -3
  57. package/zh/configure/app/tools/_category_.json +1 -1
  58. package/zh/configure/app/tools/tailwindcss.md +16 -23
  59. package/zh/guides/advanced-features/bff/frameworks.md +2 -0
  60. package/zh/guides/advanced-features/bff/function.md +44 -24
  61. package/zh/guides/advanced-features/code-split.md +28 -20
  62. package/zh/guides/advanced-features/compatibility.md +24 -14
  63. package/zh/guides/advanced-features/ssg.md +5 -47
  64. package/zh/guides/advanced-features/ssr.md +1 -1
  65. package/zh/guides/advanced-features/testing.md +2 -2
  66. package/zh/guides/basic-features/alias.md +5 -5
  67. package/zh/guides/basic-features/css/tailwindcss.md +31 -35
  68. package/zh/guides/basic-features/data-fetch.md +7 -6
  69. package/zh/guides/basic-features/env-vars.md +2 -2
  70. package/zh/guides/basic-features/html.md +62 -137
  71. package/zh/guides/basic-features/mock.md +8 -9
  72. package/zh/guides/basic-features/proxy.md +2 -2
  73. package/zh/guides/basic-features/routes.md +37 -6
  74. package/zh/guides/get-started/quick-start.md +1 -2
  75. package/zh/guides/topic-detail/framework-plugin/implement.md +54 -6
  76. package/zh/guides/topic-detail/micro-frontend/c02-development.md +2 -2
  77. package/zh/guides/topic-detail/micro-frontend/c03-main-app.md +1 -1
  78. package/en/docusaurus-plugin-content-docs/current/configure/app/dev/with-master-app.md +0 -31
  79. package/zh/configure/app/dev/with-master-app.md +0 -32
@@ -0,0 +1,70 @@
1
+ * 类型: `string | Object`
2
+ * 默认值: `null`
3
+
4
+ 配置该选项后,开发环境时会启动全局代理,类似 [Fiddler](https://www.telerik.com/fiddler), [Charles](https://www.charlesproxy.com/) 等 web 代理调试工具,可以用来查看、修改 HTTP/HTTPS 请求、响应、也可以用作代理服务器。
5
+
6
+
7
+ :::tip 提示
8
+ 使用该选项需要提前安装 `@modern-js/plugin-proxy`。
9
+ :::
10
+
11
+ 值为 `Object` 时,对象的 `key` 对应匹配的 `pattern`,对象的 `value` 对应匹配的 `target`。
12
+
13
+ 例如:
14
+
15
+ ```typescript title="modern.config.ts"
16
+ export default defineConfig({
17
+ dev: {
18
+ proxy: {
19
+ 'https://www.baidu.com': 'https://google.com.hk',
20
+ //可以通过 file 协议直接返回静态文件。
21
+ 'https://example.com/api': 'file://./data.json',
22
+ }
23
+ }
24
+ });
25
+ ```
26
+
27
+ 值为 `string` 时, 可以用来指定单独的代理文件,例如:
28
+
29
+
30
+ ```typescript title="modern.config.ts"
31
+ export default defineConfig({
32
+ dev: {
33
+ proxy: './proxy.js',
34
+ },
35
+ });
36
+ ```
37
+
38
+ ```js title="proxy.js"
39
+ module.exports = {
40
+ name: 'my-app',
41
+ rules: `
42
+ ^example.com:8080/api/*** http://localhost:3001/api/$
43
+ `,
44
+ };
45
+ ```
46
+
47
+ :::info 注
48
+ Modern.js 全局代理实现底层基于 [whistle](https://wproxy.org/whistle/), 更多匹配模式请参考: [匹配模式](https://wproxy.org/whistle/pattern.html)
49
+ :::
50
+
51
+ 执行 `dev`, 提示如下时,即代理服务器启动成功:
52
+
53
+ ```bash
54
+ App running at:
55
+
56
+ Local: http://localhost:8080/
57
+ Network: http://192.168.0.1:8080/
58
+
59
+ ℹ info Starting the proxy server.....
60
+ ✔ success Proxy Server start on localhost:8899
61
+ ```
62
+
63
+ 访问 `localhost:8899`, 可以在 UI 界面上查看 Network 以及配置代理规则:
64
+
65
+ ![proxy ui 界面](https://lf3-static.bytednsdoc.com/obj/eden-cn/aphqeh7uhohpquloj/modern-js/docs/dev-proxy.png)
66
+
67
+ :::caution 注意
68
+ https 代理自动安装证书需要获取 root 权限, 请根据提示输入密码即可。**密码仅在信任证书时使用,不会泄漏或者用于其他环节**。
69
+ :::
70
+
@@ -0,0 +1,15 @@
1
+ ## `manifest`
2
+
3
+ ```ts
4
+ interface Manifest {
5
+ getAppList?: ()=> Array<AppInfo>
6
+ }
7
+ ```
8
+
9
+ ### `getAppList?`
10
+
11
+ 通过 `getAppList` 配置,可以自定义如何获取远程列表数据
12
+
13
+ ```ts
14
+ type GetAppList = ()=> Promise<Array<AppInfo>>;
15
+ ```
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,62 @@
1
+ ---
2
+ title: autoLoadPlugins (自动注册插件)
3
+ sidebar_position: 11
4
+ ---
5
+
6
+ - 类型:`boolean`
7
+ - 默认值:`false`
8
+
9
+ 用于配置 Modern.js 是否开启自动注册插件。
10
+
11
+ ### 手动注册插件
12
+
13
+ 默认情况下,安装插件后需要你在 `modern.config.ts` 文件中手动注册插件。
14
+
15
+ ```ts title="modern.config.ts"
16
+ import AppToolsPlugin, { defineConfig } from '@modern-js/app-tools';
17
+ import I18nPlugin from '@modern-js/plugin-i18n';
18
+
19
+ default export defineConfig({
20
+ plugins: [AppToolsPlugin(), I18nPlugin()]
21
+ })
22
+
23
+ ```
24
+
25
+ ### 自动注册插件
26
+
27
+ 除了手段注册,Modern.js 还提供自动注册插件的方式: 将 `autoLoadPlugin` 配置项置为 `true`。
28
+
29
+ ```ts title="modern.config.ts"
30
+ import { defineConfig } from '@modern-js/app-tools';
31
+
32
+ default export defineConfig({
33
+ autoLoadPlugins: true
34
+ })
35
+ ```
36
+
37
+ Modern.js 将通过以下几个步骤帮你自动注册插件
38
+
39
+ 1. Modern.js 在内部维护一份官方插件列表。
40
+
41
+ ```js
42
+ const InternalPlugins = ['@modern-js/app-tools', '@modern-js/plugin-i18n', ...];
43
+ ```
44
+
45
+ 2. Modern.js 将读取你的 `package.json` 文件,收集依赖信息。
46
+
47
+ ```json title="package.json"
48
+ "dependencies": {
49
+ "@modern-js/plugin-i18n": "x.x.x"
50
+ ...
51
+ },
52
+ "devDependencies": {
53
+ "@modern-js/app-tools": "x.x.x"
54
+ ...
55
+ }
56
+ ```
57
+
58
+ 3. Modern.js 观察到你安装了 `@modern-js/plugin-i18n` 和 `@modern-js/app-tools` 等依赖后,将会引入插件自动注册。
59
+
60
+ 可以注意到这种方式相对黑盒,你甚至对加载插件的过程是无感知的。我们希望更多的细节暴露给开发者,能让开发者去控制这一过程。
61
+
62
+ **因此我们更加推荐你手动注册插件。**
@@ -52,13 +52,3 @@ export default defineConfig({
52
52
  * 默认值:`false`
53
53
 
54
54
  是否 `external` 基础库,当设置为 `true` 时,当前子应用将会 `external`:`react`、`react-dom`,`EdenX` 主应用会自动 `setExternal` 这两个基础库,如果其他类型的框架请通过 `Garfish.setExternal` 增加 `react`、`react-dom` 依赖
55
-
56
-
57
- ### moduleApp
58
-
59
- * 类型:`string`
60
-
61
- * 默认值:`undefined`
62
-
63
- 该值可以配置子应用的名称,目前主要结合 [`dev.withMasterApp`](/docs/configure/app/dev/with-master-app) 进行测试。
64
-
@@ -5,74 +5,6 @@ sidebar_label: proxy
5
5
  # dev.proxy
6
6
 
7
7
 
8
+ import GlobalProxyConfig from '@site-docs/components/global-proxy-config.md'
8
9
 
9
- * 类型: `string | Object`
10
- * 默认值: `null`
11
-
12
- 配置该选项后,开发环境时会启动全局代理,类似 [Fiddler](https://www.telerik.com/fiddler), [Charles](https://www.charlesproxy.com/) 等 web 代理调试工具,可以用来查看、修改 HTTP/HTTPS 请求、响应、也可以用作代理服务器。
13
-
14
-
15
- :::tip 提示
16
- 使用该选项需要提前安装 `@modern-js/plugin-proxy`。
17
- :::
18
-
19
- 值为 `Object` 时,对象的 `key` 对应匹配的 `pattern`,对象的 `value` 对应匹配的 `target`。
20
-
21
- 例如:
22
-
23
- ```typescript title="modern.config.ts"
24
- export default defineConfig({
25
- dev: {
26
- proxy: {
27
- 'https://www.baidu.com': 'https://google.com.hk',
28
- //可以通过 file 协议直接返回静态文件。
29
- 'https://example.com/api': 'file://./data.json',
30
- }
31
- }
32
- });
33
- ```
34
-
35
- 值为 `string` 时, 可以用来指定单独的代理文件,例如:
36
-
37
-
38
- ```typescript title="modern.config.ts"
39
- export default defineConfig({
40
- dev: {
41
- proxy: './proxy.js',
42
- },
43
- });
44
- ```
45
-
46
- ```js title="proxy.js"
47
- module.exports = {
48
- name: 'my-app',
49
- rules: `
50
- ^example.com:8080/api/*** http://localhost:3001/api/$
51
- `,
52
- };
53
- ```
54
-
55
- :::info 注
56
- Modern.js 全局代理实现底层基于 [whistle](https://wproxy.org/whistle/), 更多匹配模式请参考: [匹配模式](https://wproxy.org/whistle/pattern.html)
57
- :::
58
-
59
- 执行 `dev`, 提示如下时,即代理服务器启动成功:
60
-
61
- ```bash
62
- App running at:
63
-
64
- Local: http://localhost:8080/
65
- Network: http://192.168.0.1:8080/
66
-
67
- ℹ info Starting the proxy server.....
68
- ✔ success Proxy Server start on localhost:8899
69
- ```
70
-
71
- 访问 `localhost:8899`, 可以在 UI 界面上查看 Network 以及配置代理规则:
72
-
73
- ![proxy ui 界面](https://lf3-static.bytednsdoc.com/obj/eden-cn/aphqeh7uhohpquloj/modern-js/docs/dev-proxy.png)
74
-
75
- :::caution 注意
76
- https 代理自动安装证书需要获取 root 权限, 请根据提示输入密码即可。**密码仅在信任证书时使用,不会泄漏或者用于其他环节**。
77
- :::
78
-
10
+ <GlobalProxyConfig />
@@ -13,24 +13,10 @@ sidebar_label: masterApp
13
13
  ## 示例
14
14
 
15
15
  import EnableMicroFrontend from '@site-docs/components/enable-micro-frontend.md';
16
+ import MasterManifestAppConfig from '@site-docs/components/micro-master-manifest-config.md';
16
17
 
17
18
  <EnableMicroFrontend />
18
-
19
- ## `manifest`
20
-
21
- ```ts
22
- interface Manifest {
23
- getAppList?: ()=> Array<AppInfo>
24
- }
25
- ```
26
-
27
- #### `getAppList?`
28
-
29
- 通过 `getAppList` 配置,可以自定义如何获取远程列表数据
30
-
31
- ```ts
32
- type GetAppList = ()=> Promise<Array<AppInfo>>;
33
- ```
19
+ <MasterManifestAppConfig />
34
20
 
35
21
 
36
22
  ### apps
@@ -2,19 +2,33 @@
2
2
  sidebar_label: router
3
3
  ---
4
4
 
5
+ import RouterLegacyTip from '@site-docs/components/router-legacy-tip.md'
6
+
7
+ <RouterLegacyTip />
8
+
5
9
  # runtime.router
6
10
 
7
11
  * 类型: `boolean | Object`
8
12
  * 默认值: `false`。
9
13
 
10
- 开启 `router` 之后,支持使用 Modern.js 默认提供的约定式路由进行路由管理。
14
+ 开启 `router` 之后,支持使用 Modern.js 默认提供的约定式路由进行路由管理。Modern.js 的路由模块基于 [React Router 6](https://reactrouter.com/) 实现。
11
15
 
12
16
  具体配置如下:
13
17
 
18
+ ### basename
19
+
20
+ * 类型: `string`
21
+ * 默认值: ``
22
+
23
+ 设置客户端路由的 `basename`,通常用于应用需要部署在域名非根路径下的场景。
24
+
14
25
  ### supportHtml5History
15
26
 
16
- * 类型: `Boolean`
27
+ * 类型: `boolean`
17
28
  * 默认值: `true`
18
29
 
19
- 值为 `true` 则使用 `BrowserRouter` 否则使用 `HashRouter`。
30
+ 值为 `true`,使用 `BrowserRouter`;否则使用 `HashRouter`。推荐使用 `BrowserRouter`。
20
31
 
32
+ :::warning
33
+ 当开启 SSR 时,不支持设置 `supportHtml5History`。
34
+ :::
@@ -61,7 +61,6 @@ export default defineConfig({
61
61
 
62
62
  * `entry`:`string`,入口文件路径。
63
63
  * `disableMount`:`boolean = false`,关闭 Modern.js 生成入口代码的行为。
64
- * `enableFileSystemRoutes`:`boolean = false`,是否 [使用约定式路由](/docs/apis/app/hooks/src/pages)。
65
64
 
66
65
  ```ts title="modern.config.ts"
67
66
  import { defineConfig } from '@modern-js/app-tools';
@@ -76,8 +75,7 @@ export default defineConfig({
76
75
  // 启用约定式路由
77
76
  entry_spa: {
78
77
  // 约定式路由的入口路径必须设置为目录
79
- entry: './src/about',
80
- enableFileSystemRoutes: true,
78
+ entry: './src/about'
81
79
  },
82
80
  },
83
81
  },
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "label": "tools (底层配置)",
3
- "position": 10
3
+ "position": 12
4
4
  }
@@ -4,39 +4,32 @@ title: tools.tailwindcss
4
4
  sidebar_label: tailwindcss
5
5
  ---
6
6
 
7
-
8
- * 类型: `Object | Function`
9
- * 默认值:见下方配置详情。
7
+ - 类型: `Object | Function`
8
+ - 默认值:见下方配置详情。
10
9
 
11
10
  <details>
12
11
  <summary>TailwindCSS 配置详情</summary>
13
12
 
14
13
  ```js
15
- const tailwind = {
16
- purge: {
17
- enabled: options.env === 'production',
18
- content: [
19
- './config/html/**/*.html',
20
- './config/html/**/*.ejs',
21
- './config/html/**/*.hbs',
22
- './src/**/*',
23
- ],
24
- layers: ['utilities'],
25
- },
26
- // https://tailwindcss.com/docs/upcoming-changes
27
- future: {
28
- removeDeprecatedGapUtilities: false,
29
- purgeLayersByDefault: true,
30
- defaultLineHeights: false,
31
- standardFontWeights: false,
32
- },
33
- theme: source.designSystem // 使用source.designSystem配置作为Tailwind CSS Theme配置
34
- }
14
+ const tailwind = {
15
+ content: [
16
+ './config/html/**/*.html',
17
+ './config/html/**/*.ejs',
18
+ './config/html/**/*.hbs',
19
+ './src/**/*.js',
20
+ './src/**/*.jsx',
21
+ './src/**/*.ts',
22
+ './src/**/*.tsx',
23
+ './storybook/**/*',
24
+ ],
25
+ theme: source.designSystem, // 使用source.designSystem配置作为Tailwind CSS Theme配置
26
+ };
35
27
  ```
36
28
 
37
29
  :::tip 提示
38
30
  更多关于:<a href="https://tailwindcss.com/docs/configuration" target="_blank">TailwindCSS 配置</a>。
39
31
  :::
32
+
40
33
  </details>
41
34
 
42
35
  对应 [TailwindCSS](https://tailwindcss.com/docs/configuration) 的配置,值为 `Object` 类型时,与默认配置通过 `Object.assign` 合并。
@@ -3,6 +3,8 @@ sidebar_position: 3
3
3
  title: 运行时框架
4
4
  ---
5
5
 
6
+ Modern.js 的 BFF 支持不同的运行时框架,当前 Modern.js 的 BFF 支持两种运行时框架 [Express.js](https://expressjs.com/) 和 [Koa.js](https://koajs.com/)。
7
+
6
8
  ## 函数写法
7
9
 
8
10
  在函数写法下,各类运行时框架仅中间件写法存在差异,其他实现基本相同。这里以 Express 为例,介绍如何在 `api/_app.ts` 中,手写一个中间件,添加权限校验:
@@ -1,18 +1,24 @@
1
1
  ---
2
2
  sidebar_position: 1
3
- title: 一体化调用
3
+ title: 基础用法
4
4
  ---
5
5
 
6
- Modern.js 允许在 React 组件中直接调用 `api/` 目录下满足一定条件的函数,称为**一体化调用**。
6
+ 通过 Modern.js 开发的应用,可以在 `api/` 目录下定义接口函数,前端可以调用这些接口函数,即可发起请求,无需写前后端胶水层代码,同时保证前后端类型安全。
7
7
 
8
- :::note
9
- 使用一体化调用需要先开启 BFF 功能。
10
- :::
8
+ ## 启用 BFF
9
+
10
+ import EnableBFF from '@site-docs/components/enable-bff.md'
11
+
12
+ <EnableBFF/>
11
13
 
12
14
  ## BFF 函数
13
15
 
14
16
  允许通过一体化调用的函数,称为 **BFF 函数**。这里写一个最简单的 BFF 函数,创建 `api/hello.ts` 文件:
15
17
 
18
+ :::caution
19
+ 如果是框架模式(有 `api/lambda` 目录),需要创建 `api/lambda/hello.ts`
20
+ :::
21
+
16
22
  ```ts title="api/hello.ts"
17
23
  export const get = async () => 'Hello Modern.js';
18
24
  ```
@@ -41,7 +47,7 @@ Modern.js 生成器已经在 `tsconfig.json` 中配置 `@api` 别名,因此可
41
47
 
42
48
  执行 `pnpm run dev` 打开 `http://localhost:8080/` 可以看到页面已经展示了 BFF 函数返回的内容,在 Network 中可以看到页面向 `http://localhost:8080/api/hello` 发送了请求:
43
49
 
44
- ![Network](https://lf3-static.bytednsdoc.com/obj/eden-cn/aphqeh7uhohpquloj/modern-js/docs/hello-modern.png)
50
+ ![Network](https://p6-piu.byteimg.com/tos-cn-i-8jisjyls3a/fd41750f8d414179a9b4ecb519919b36~tplv-8jisjyls3a-3:0:0:q75.png)
45
51
 
46
52
  ## 函数路由
47
53
 
@@ -53,32 +59,30 @@ Modern.js 中,BFF 函数对应的路由系统是基于文件系统实现的,
53
59
  函数写法和框架写法会在下一节详细介绍。
54
60
  :::
55
61
 
56
- 以下的 `$BASENAME` 指的是 BFF 函数的[路由前缀](/docs/configure/app/bff/prefix),可以在 `modern.config.js` 中进行配置,默认值为 `/api`。
62
+ 所有 BFF 函数生成的路由都带有统一的前缀,默认值为 `/api`。可以通过 [bff.prefix](/docs/configure/app/bff/prefix) 设置公共路由的前缀。
57
63
 
58
- :::info 注
59
- 可以通过 [bff.prefix](/docs/configure/app/bff/prefix) 设置公共路由的前缀。
60
- :::
64
+ 下面介绍几种路由的约定。
61
65
 
62
66
  ### 默认路由
63
67
 
64
68
  以 `index.[jt]s` 命名的文件会被映射到上一层目录。
65
69
 
66
- * `api/index.ts` -> `$BASENAME/`
67
- * `api/user/index.ts` -> `$BASENAME/user`
70
+ * `api/index.ts` -> `{prefix}/`
71
+ * `api/user/index.ts` -> `{prefix}/user`
68
72
 
69
- ### 嵌套路由
73
+ ### 多层路由
70
74
 
71
75
  支持解析嵌套的文件,如果创建嵌套文件夹结构,文件仍会以相同方式自动解析路由。
72
76
 
73
- * `api/hello.ts` -> `$BASENAME/hello`
74
- * `api/user/list.ts` -> `$BASENAME/user/list`
77
+ * `api/hello.ts` -> `{prefix}/hello`
78
+ * `api/user/list.ts` -> `{prefix}/user/list`
75
79
 
76
80
  ### 动态路由
77
81
 
78
- 同样的,创建命名带有 `[xxx]` 的文件夹或者文件,支持动态的命名路由参数。
82
+ 同样的,创建命名带有 `[xxx]` 的文件夹或者文件,支持动态的命名路由参数。动态路由的函数参数规则可以看 [dynamac-path](/docs/guides/advanced-features/bff/function#dynamic-path)
79
83
 
80
- * `api/user/[username]/info.ts` -> `$BASENAME/user/:username/info`
81
- * `api/user/username/[action].ts` -> `$BASENAME/user/username/:action`
84
+ * `api/user/[username]/info.ts` -> `{prefix}/user/:username/info`
85
+ * `api/user/username/[action].ts` -> `{prefix}/user/username/:action`
82
86
 
83
87
  ### 白名单
84
88
 
@@ -102,7 +106,7 @@ Modern.js 的 BFF 函数需要遵循 RESTful API 标准来定义, 遵循 HTTP Me
102
106
 
103
107
  ### 函数具名导出
104
108
 
105
- Modern.js BFF 函数的导出名决定了函数对应接口的 Method,如`get`,`post`等。
109
+ Modern.js BFF 函数的导出名决定了函数对应接口的 Method,如 `get`,`post` 等。
106
110
 
107
111
  例如,按照以下例子,可导出一个 GET 接口。
108
112
 
@@ -126,9 +130,9 @@ export const post = async () => {
126
130
  };
127
131
  ```
128
132
 
129
- * 应用工程 中支持了 9 Method 定义,即:`GET`、`POST`、`PUT`、`DELETE`、`CONNECT`、`TRACE`、`PATCH`、`OPTION`、`HEAD`,即可以用这些 Method 作为函数导出的名字。
133
+ * 对应 HTTP Method,Modern.js 也支持了 9 种定义,即:`GET`、`POST`、`PUT`、`DELETE`、`CONNECT`、`TRACE`、`PATCH`、`OPTION`、`HEAD`,即可以用这些 Method 作为函数导出的名字。
130
134
 
131
- * 名字是大小不敏感的,就是说,如果是 `GET`,写成 `get`、`Get`、`GEt`、`GET`,都可以准确识别。而默认导出,即 `export default xxx` 则会被映射为 `Get`。
135
+ * 名字是大小不敏感的,如果是 `GET`,写成 `get`、`Get`、`GEt`、`GET`,都可以准确识别。而默认导出,即 `export default xxx` 则会被映射为 `Get`。
132
136
 
133
137
  * 可以在一个文件中定义多个不同 Method 的函数,但如果定义多个相同 Method 的函数,则只有第一个会生效。
134
138
 
@@ -140,9 +144,7 @@ export const post = async () => {
140
144
 
141
145
  如上所述,为了满足 RESTful API 的设计标准,因此 Modern.js 中 BFF 函数需要遵循一定的入参规则。
142
146
 
143
- Modern.js 函数定义分为普通函数与带有 schema 的函数,这一小节先介绍普通函数。
144
-
145
- 普通函数参数分为两块,分别是请求路径中的动态部分和请求选项 `RequestOption`。
147
+ 函数参数分为两块,分别是请求路径中的动态部分和请求选项 `RequestOption`。
146
148
 
147
149
  #### Dynamic Path
148
150
 
@@ -190,6 +192,24 @@ export async function post(
190
192
  }
191
193
  ```
192
194
 
195
+ 这里你也可以使用自定义类型:
196
+ ```ts title="api/lambda/hello.ts"
197
+ import type { RequestOption } from '@modern-js/runtime/server'
198
+
199
+ type IQuery = {
200
+ // some types
201
+ }
202
+ type IData = {
203
+ // some types
204
+ }
205
+
206
+ export async function post(
207
+ { query, data }: { query:IQuery, data:IData }
208
+ ) {
209
+ // do somethings
210
+ }
211
+ ```
212
+
193
213
  当函数文件使用动态路由规则时,动态路由会在 `RequestOption` 对象参数前。
194
214
 
195
215
  ```ts title="api/[sku]/[id]/item.ts"
@@ -5,6 +5,10 @@ sidebar_position: 6
5
5
 
6
6
  代码分割是优化前端资源加载的一种常用手段,本文将介绍 Modern.js 支持的三种代码分割方式:
7
7
 
8
+ :::info
9
+ 使用 Modern.js [约定式路由](/docs/guides/basic-features/routes#约定式路由)时,默认会根据路由组件做代码分割,包裹 `Suspense` 组件,无需自行进行代码分割。
10
+ :::
11
+
8
12
  - `import`
9
13
  - `React.lazy`
10
14
  - `loadable`
@@ -21,30 +25,14 @@ import("./math").then(math => {
21
25
 
22
26
  `./math` 路径对应的 JS 模块会被打包到单独的 JS 文件中。
23
27
 
24
- ## loadable
25
-
26
- 使用 `loadable` API,示例如下:
27
-
28
- ```ts
29
- import loadable from '@modern-js/runtime/loadable'
30
-
31
- const OtherComponent = loadable(() => import('./OtherComponent'));
32
-
33
- function MyComponent() {
34
- return <OtherComponent />
35
- }
36
- ```
28
+ ## React.lazy
37
29
 
38
- `loadable` 更多用法请见 [loadable API](/docs/apis/app/runtime/utility/loadable)。
30
+ React 官方提供的组件代码分割的方式。
39
31
 
40
- :::info 注
41
- `loadable` 开箱即用的支持 SSR。
32
+ :::caution
33
+ React 17 及以下版本不支持 SSR,建议 React17 的 SSR 应用使用 loadable
42
34
  :::
43
35
 
44
- ## React.lazy
45
-
46
- React 官方提供的组件代码分割的方式,**缺点是不支持 SSR**。
47
-
48
36
  ```ts
49
37
  import React, { Suspense } from 'react';
50
38
 
@@ -66,3 +54,23 @@ function MyComponent() {
66
54
  ```
67
55
 
68
56
  `React.lazy` 更多用法请见 [React lazy](https://zh-hans.reactjs.org/docs/code-splitting.html#reactlazy)。
57
+
58
+ ## loadable
59
+
60
+ 使用 `loadable` API,示例如下:
61
+
62
+ ```ts
63
+ import loadable from '@modern-js/runtime/loadable'
64
+
65
+ const OtherComponent = loadable(() => import('./OtherComponent'));
66
+
67
+ function MyComponent() {
68
+ return <OtherComponent />
69
+ }
70
+ ```
71
+
72
+ `loadable` 更多用法请见 [loadable API](/docs/apis/app/runtime/utility/loadable)。
73
+
74
+ :::info 注
75
+ `loadable` 开箱即用的支持 SSR,但不支持和 Suspense 一起使用,如果是 CSR 项目可以使用 [loadable.lazy](https://loadable-components.com/docs/suspense/)
76
+ :::
@@ -3,13 +3,32 @@ title: 客户端兼容性
3
3
  sidebar_position: 5
4
4
  ---
5
5
 
6
- ## Polyfill 模式
6
+ ## Browserslist 配置
7
+
8
+ Modern.js 支持在项目根目录 `package.json` 文件中的 `browserslist` 字段(或单独的 `.browserslistrc` 文件)指定项目覆盖的目标浏览器范围。该值会被 [`@babel/preset-env`](https://babeljs.io/docs/en/babel-preset-env) 和 [`autoprefixer`](https://github.com/postcss/autoprefixer) 用来确定需要转换的 JavaScript 语法特性和需要添加的 CSS 浏览器前缀。
9
+
10
+ Modern.js 中默认值如下:
11
+
12
+ ```js
13
+ ['> 0.01%', 'not dead', 'not op_mini all']
14
+ ```
15
+
16
+ 可以在[这里](https://github.com/browserslist/browserslist)了解如何自定义浏览器范围。
17
+
18
+ 查看 Modern.js Builder 文档了解更多 [Browserlist](https://modernjs.dev/builder/zh/guide/advanced/browserslist.html) 相关内容。
19
+
20
+ :::note
21
+ Modern.js 支持配置 [output.overrideBrowserlist](/docs/configure/app/output/override-browserslist) 覆盖默认 browserlist 值。
22
+ :::
23
+
24
+
25
+ ## Polyfill
7
26
 
8
27
  ### 编译时 Polyfill
9
28
 
10
29
  Modern.js 在编译时默认通过 [core-js](https://github.com/zloirock/core-js) 引入对应的 Polyfill 代码。
11
30
 
12
- 默认情况下会根据项目 [Browserslist](https://github.com/browserslist/browserslist) 的设置情况引入所需的 Polyfill 代码, 这样基本不用再担心项目源码和第三方依赖的 Polyfill 问题了,但是因为包含了一些没有用到的 Polyfill 代码,所以最终的包大小可能会有所增加。
31
+ 默认情况下会根据项目 Browserslist 的设置情况引入所需的 Polyfill 代码, 这样基本不用再担心项目源码和第三方依赖的 Polyfill 问题了,但是因为包含了一些没有用到的 Polyfill 代码,所以最终的包大小可能会有所增加。
13
32
 
14
33
  :::info 注
15
34
  对于明确第三方依赖不需要 Polyfill 的场景,可以设置 [`output.polyfill`](/docs/configure/app/output/polyfill) 为 `usage`, 这样 Babel 编译时只会根据代码中使用到的语法引入 Polyfill 代码。
@@ -48,17 +67,8 @@ export default defineConfig({
48
67
 
49
68
  在 Chrome 51 下访问页面可以看到 `http://localhost:8080/__polyfill__` 返回内容如下:
50
69
 
51
-
52
70
  ![ua-polyfill](https://lf3-static.bytednsdoc.com/obj/eden-cn/aphqeh7uhohpquloj/modern-js/docs/ua-polyfill.png)
53
71
 
54
- ## Browserslist 配置
55
-
56
- Modern.js 支持在项目根目录 `package.json` 文件中的 `browserslist` 字段(或单独的 `.browserslistrc` 文件)指定项目覆盖的目标浏览器范围。该值会被 [`@babel/preset-env`](https://babeljs.io/docs/en/babel-preset-env) 和 [`autoprefixer`](https://github.com/postcss/autoprefixer) 用来确定需要转换的 JavaScript 语法特性和需要添加的 CSS 浏览器前缀。
57
-
58
- Modern.js 中默认值如下:
59
-
60
- ```js
61
- ['> 0.01%', 'not dead', 'not op_mini all']
62
- ```
63
-
64
- 可以在[这里](https://github.com/browserslist/browserslist)了解如何自定义浏览器范围。
72
+ :::caution 注意
73
+ 该功能只有在使用 Modern.js 内置的 Web Server 时才会生效。
74
+ :::