@modern-js/main-doc 2.58.3 → 2.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/docs/en/_meta.json +10 -5
  2. package/docs/en/apis/app/hooks/api/lambda.mdx +4 -48
  3. package/docs/en/apis/app/hooks/api/middleware.mdx +11 -0
  4. package/docs/en/apis/app/runtime/core/use-loader.mdx +1 -1
  5. package/docs/en/community/blog/v2-release-note.mdx +1 -1
  6. package/docs/en/components/enable-bff.mdx +19 -2
  7. package/docs/en/components/extend-bff-function.mdx +5 -0
  8. package/docs/en/components/init-app.mdx +0 -1
  9. package/docs/en/components/init-rspack-app.mdx +0 -1
  10. package/docs/en/components/other-plugins.mdx +0 -0
  11. package/docs/en/components/ssr-monitor.mdx +3 -0
  12. package/docs/en/configure/app/auto-load-plugin.mdx +4 -0
  13. package/docs/en/configure/app/output/ssg.mdx +52 -141
  14. package/docs/en/configure/app/plugins.mdx +2 -2
  15. package/docs/en/configure/app/tools/esbuild.mdx +1 -1
  16. package/docs/en/configure/app/tools/swc.mdx +1 -1
  17. package/docs/en/configure/app/tools/tailwindcss.mdx +1 -1
  18. package/docs/en/guides/_meta.json +0 -5
  19. package/docs/en/guides/advanced-features/_meta.json +3 -8
  20. package/docs/en/guides/advanced-features/bff/_meta.json +1 -1
  21. package/docs/en/guides/advanced-features/bff/extend-server.mdx +154 -0
  22. package/docs/en/guides/advanced-features/bff/frameworks.mdx +52 -123
  23. package/docs/en/guides/advanced-features/bff/function.mdx +108 -80
  24. package/docs/en/guides/advanced-features/bff/sdk.mdx +40 -51
  25. package/docs/en/guides/advanced-features/build-performance.mdx +6 -21
  26. package/docs/en/guides/advanced-features/page-performance/_meta.json +1 -0
  27. package/docs/en/guides/advanced-features/rspack-start.mdx +6 -14
  28. package/docs/en/guides/basic-features/_meta.json +31 -9
  29. package/docs/en/guides/basic-features/css/_meta.json +1 -0
  30. package/docs/en/guides/basic-features/css/css-in-js.mdx +34 -0
  31. package/docs/en/guides/basic-features/{css-modules.mdx → css/css-modules.mdx} +0 -4
  32. package/docs/en/guides/basic-features/css/css.mdx +25 -0
  33. package/docs/en/guides/basic-features/{css.mdx → css/tailwindcss.mdx} +5 -66
  34. package/docs/en/guides/basic-features/data/data-fetch.mdx +134 -235
  35. package/docs/en/guides/basic-features/data/data-write.mdx +66 -77
  36. package/docs/en/guides/basic-features/debug/_meta.json +1 -0
  37. package/docs/en/guides/basic-features/debug/rsdoctor.mdx +57 -0
  38. package/docs/en/guides/{advanced-features → basic-features/debug}/using-storybook.mdx +2 -0
  39. package/docs/en/guides/basic-features/render/_meta.json +1 -0
  40. package/docs/en/guides/basic-features/render/ssg.mdx +208 -0
  41. package/docs/en/guides/{advanced-features/ssr/cache.mdx → basic-features/render/ssr-cache.mdx} +38 -50
  42. package/docs/en/guides/basic-features/render/ssr.mdx +301 -0
  43. package/docs/en/guides/basic-features/render/streaming-ssr.mdx +230 -0
  44. package/docs/en/guides/basic-features/routes.mdx +274 -263
  45. package/docs/en/guides/basic-features/static-assets/_meta.json +1 -0
  46. package/docs/en/guides/basic-features/static-assets.mdx +2 -2
  47. package/docs/en/guides/basic-features/testing/_meta.json +1 -0
  48. package/docs/en/guides/basic-features/testing/cypress.mdx +95 -0
  49. package/docs/en/guides/basic-features/testing/jest.mdx +148 -0
  50. package/docs/en/guides/basic-features/testing/playwright.mdx +111 -0
  51. package/docs/en/guides/basic-features/testing/vitest.mdx +100 -0
  52. package/docs/en/guides/concept/entries.mdx +9 -2
  53. package/docs/en/guides/deprecated.md +2 -0
  54. package/docs/en/guides/get-started/quick-start.mdx +1 -1
  55. package/docs/en/guides/get-started/tech-stack.mdx +4 -4
  56. package/docs/en/guides/topic-detail/_meta.json +0 -6
  57. package/docs/en/guides/topic-detail/generator/create/config.mdx +0 -10
  58. package/docs/en/guides/topic-detail/generator/create/use.mdx +0 -1
  59. package/docs/en/plugin/_meta.json +19 -0
  60. package/docs/en/plugin/cli-plugins/_meta.json +1 -0
  61. package/docs/en/plugin/cli-plugins/plugin-bff.mdx +5 -0
  62. package/docs/en/plugin/cli-plugins/plugin-ssg.mdx +5 -0
  63. package/docs/en/{guides/rsbuild-plugins → plugin/cli-plugins}/plugin-swc.mdx +7 -0
  64. package/docs/en/plugin/cli-plugins/plugin-tailwind.mdx +5 -0
  65. package/docs/en/plugin/cli-plugins.mdx +6 -0
  66. package/docs/en/{guides/advanced-features/rsbuild-plugin.mdx → plugin/introduction.mdx} +36 -11
  67. package/docs/en/{guides/topic-detail/framework-plugin → plugin/plugin-system}/extend.mdx +1 -1
  68. package/docs/en/{guides/topic-detail/framework-plugin → plugin/plugin-system}/implement.mdx +3 -3
  69. package/docs/en/{guides/topic-detail/framework-plugin → plugin/plugin-system}/plugin-api.mdx +2 -2
  70. package/docs/en/plugin/rsbuild-plugins/_meta.json +1 -0
  71. package/docs/en/plugin/rsbuild-plugins.mdx +3 -0
  72. package/docs/en/tutorials/first-app/c03-css.mdx +1 -1
  73. package/docs/zh/_meta.json +10 -5
  74. package/docs/zh/apis/app/hooks/api/lambda.mdx +5 -48
  75. package/docs/zh/apis/app/hooks/api/middleware.mdx +11 -0
  76. package/docs/zh/apis/app/runtime/core/use-loader.mdx +1 -1
  77. package/docs/zh/community/blog/v2-release-note.mdx +1 -1
  78. package/docs/zh/components/enable-bff.mdx +19 -2
  79. package/docs/zh/components/extend-bff-function.mdx +5 -0
  80. package/docs/zh/components/init-app.mdx +0 -1
  81. package/docs/zh/components/init-rspack-app.mdx +0 -1
  82. package/docs/zh/components/other-plugins.mdx +0 -0
  83. package/docs/zh/components/ssr-monitor.mdx +3 -0
  84. package/docs/zh/configure/app/auto-load-plugin.mdx +4 -0
  85. package/docs/zh/configure/app/output/ssg.mdx +49 -139
  86. package/docs/zh/configure/app/plugins.mdx +2 -2
  87. package/docs/zh/configure/app/tools/esbuild.mdx +1 -1
  88. package/docs/zh/configure/app/tools/swc.mdx +1 -1
  89. package/docs/zh/configure/app/tools/tailwindcss.mdx +1 -1
  90. package/docs/zh/guides/_meta.json +0 -5
  91. package/docs/zh/guides/advanced-features/_meta.json +3 -8
  92. package/docs/zh/guides/advanced-features/bff/_meta.json +1 -1
  93. package/docs/zh/guides/advanced-features/bff/extend-server.mdx +156 -0
  94. package/docs/zh/guides/advanced-features/bff/frameworks.mdx +51 -117
  95. package/docs/zh/guides/advanced-features/bff/function.mdx +69 -59
  96. package/docs/zh/guides/advanced-features/bff/sdk.mdx +27 -36
  97. package/docs/zh/guides/advanced-features/build-performance.mdx +6 -21
  98. package/docs/zh/guides/advanced-features/page-performance/_meta.json +1 -0
  99. package/docs/zh/guides/advanced-features/rspack-start.mdx +8 -17
  100. package/docs/zh/guides/basic-features/_meta.json +31 -9
  101. package/docs/zh/guides/basic-features/alias.mdx +5 -11
  102. package/docs/zh/guides/basic-features/css/_meta.json +1 -0
  103. package/docs/zh/guides/basic-features/css/css-in-js.mdx +34 -0
  104. package/docs/zh/guides/basic-features/css/css.mdx +25 -0
  105. package/docs/zh/guides/basic-features/{css.mdx → css/tailwindcss.mdx} +3 -64
  106. package/docs/zh/guides/basic-features/data/data-fetch.mdx +96 -211
  107. package/docs/zh/guides/basic-features/data/data-write.mdx +54 -55
  108. package/docs/zh/guides/basic-features/debug/_meta.json +1 -0
  109. package/docs/zh/guides/basic-features/debug/rsdoctor.mdx +57 -0
  110. package/docs/zh/guides/{advanced-features → basic-features/debug}/using-storybook.mdx +1 -1
  111. package/docs/zh/guides/basic-features/env-vars.mdx +1 -1
  112. package/docs/zh/guides/basic-features/render/_meta.json +1 -0
  113. package/docs/zh/guides/basic-features/render/ssg.mdx +210 -0
  114. package/docs/zh/guides/{advanced-features/ssr/cache.mdx → basic-features/render/ssr-cache.mdx} +16 -26
  115. package/docs/zh/guides/basic-features/render/ssr.mdx +309 -0
  116. package/docs/zh/guides/{advanced-features/ssr/stream.mdx → basic-features/render/streaming-ssr.mdx} +22 -37
  117. package/docs/zh/guides/basic-features/routes.mdx +251 -237
  118. package/docs/zh/guides/basic-features/static-assets/_meta.json +1 -0
  119. package/docs/zh/guides/basic-features/static-assets.mdx +3 -7
  120. package/docs/zh/guides/basic-features/testing/_meta.json +1 -0
  121. package/docs/zh/guides/basic-features/testing/cypress.mdx +95 -0
  122. package/docs/zh/guides/basic-features/testing/jest.mdx +148 -0
  123. package/docs/zh/guides/basic-features/testing/playwright.mdx +112 -0
  124. package/docs/zh/guides/basic-features/testing/vitest.mdx +100 -0
  125. package/docs/zh/guides/concept/entries.mdx +6 -3
  126. package/docs/zh/guides/deprecated.md +4 -0
  127. package/docs/zh/guides/get-started/quick-start.mdx +1 -1
  128. package/docs/zh/guides/get-started/tech-stack.mdx +8 -8
  129. package/docs/zh/guides/topic-detail/_meta.json +0 -6
  130. package/docs/zh/guides/topic-detail/generator/create/config.mdx +0 -10
  131. package/docs/zh/guides/topic-detail/generator/create/use.mdx +0 -1
  132. package/docs/zh/plugin/_meta.json +19 -0
  133. package/docs/zh/plugin/cli-plugins/_meta.json +1 -0
  134. package/docs/zh/plugin/cli-plugins/plugin-bff.mdx +5 -0
  135. package/docs/zh/plugin/cli-plugins/plugin-ssg.mdx +5 -0
  136. package/docs/zh/{guides/rsbuild-plugins → plugin/cli-plugins}/plugin-swc.mdx +7 -0
  137. package/docs/zh/plugin/cli-plugins/plugin-tailwind.mdx +5 -0
  138. package/docs/zh/plugin/cli-plugins.mdx +6 -0
  139. package/docs/zh/{guides/advanced-features/rsbuild-plugin.mdx → plugin/introduction.mdx} +38 -13
  140. package/docs/zh/{guides/topic-detail/framework-plugin → plugin/plugin-system}/extend.mdx +1 -1
  141. package/docs/zh/{guides/topic-detail/framework-plugin → plugin/plugin-system}/implement.mdx +3 -3
  142. package/docs/zh/{guides/topic-detail/framework-plugin → plugin/plugin-system}/plugin-api.mdx +2 -2
  143. package/docs/zh/plugin/rsbuild-plugins/_meta.json +1 -0
  144. package/docs/zh/plugin/rsbuild-plugins.mdx +4 -0
  145. package/docs/zh/tutorials/first-app/c03-css.mdx +1 -1
  146. package/i18n.json +42 -6
  147. package/package.json +7 -6
  148. package/rspress.config.ts +1 -58
  149. package/src/components/Footer/index.tsx +1 -1
  150. package/src/pages/index.tsx +0 -1
  151. package/docs/en/apis/app/hooks/api/api.mdx +0 -80
  152. package/docs/en/apis/app/hooks/api/app.mdx +0 -12
  153. package/docs/en/apis/app/hooks/config/storybook.mdx +0 -37
  154. package/docs/en/guides/advanced-features/bff/type.mdx +0 -46
  155. package/docs/en/guides/advanced-features/eslint.mdx +0 -148
  156. package/docs/en/guides/advanced-features/ssg.mdx +0 -116
  157. package/docs/en/guides/advanced-features/ssr/_meta.json +0 -1
  158. package/docs/en/guides/advanced-features/ssr/index.mdx +0 -23
  159. package/docs/en/guides/advanced-features/ssr/stream.mdx +0 -248
  160. package/docs/en/guides/advanced-features/ssr/usage.mdx +0 -341
  161. package/docs/en/guides/advanced-features/ssr.mdx +0 -555
  162. package/docs/zh/apis/app/hooks/api/api.mdx +0 -81
  163. package/docs/zh/apis/app/hooks/api/app.mdx +0 -12
  164. package/docs/zh/apis/app/hooks/config/storybook.mdx +0 -38
  165. package/docs/zh/guides/advanced-features/bff/type.mdx +0 -46
  166. package/docs/zh/guides/advanced-features/eslint.mdx +0 -152
  167. package/docs/zh/guides/advanced-features/ssg.mdx +0 -116
  168. package/docs/zh/guides/advanced-features/ssr/_meta.json +0 -1
  169. package/docs/zh/guides/advanced-features/ssr/index.mdx +0 -23
  170. package/docs/zh/guides/advanced-features/ssr/usage.mdx +0 -329
  171. /package/docs/en/guides/advanced-features/{bff/index.mdx → bff.mdx} +0 -0
  172. /package/docs/en/guides/advanced-features/{code-split.mdx → page-performance/code-split.mdx} +0 -0
  173. /package/docs/en/guides/advanced-features/{inline-assets.mdx → page-performance/inline-assets.mdx} +0 -0
  174. /package/docs/en/guides/advanced-features/{optimize-bundle.mdx → page-performance/optimize-bundle.mdx} +0 -0
  175. /package/docs/en/guides/basic-features/{mock.mdx → debug/mock.mdx} +0 -0
  176. /package/docs/en/guides/basic-features/{proxy.mdx → debug/proxy.mdx} +0 -0
  177. /package/docs/en/guides/basic-features/{json-files.mdx → static-assets/json-files.mdx} +0 -0
  178. /package/docs/en/guides/basic-features/{svg-assets.mdx → static-assets/svg-assets.mdx} +0 -0
  179. /package/docs/en/guides/basic-features/{wasm-assets.mdx → static-assets/wasm-assets.mdx} +0 -0
  180. /package/docs/en/{guides/topic-detail/framework-plugin → plugin/plugin-system}/_meta.json +0 -0
  181. /package/docs/en/{guides/topic-detail/framework-plugin → plugin/plugin-system}/hook-list.mdx +0 -0
  182. /package/docs/en/{guides/topic-detail/framework-plugin → plugin/plugin-system}/hook.mdx +0 -0
  183. /package/docs/en/{guides/topic-detail/framework-plugin → plugin/plugin-system}/introduction.mdx +0 -0
  184. /package/docs/en/{guides/topic-detail/framework-plugin → plugin/plugin-system}/lifecycle.mdx +0 -0
  185. /package/docs/en/{guides/topic-detail/framework-plugin → plugin/plugin-system}/relationship.mdx +0 -0
  186. /package/docs/en/{guides → plugin}/rsbuild-plugins/plugin-esbuild.mdx +0 -0
  187. /package/docs/zh/guides/advanced-features/{bff/index.mdx → bff.mdx} +0 -0
  188. /package/docs/zh/guides/advanced-features/{code-split.mdx → page-performance/code-split.mdx} +0 -0
  189. /package/docs/zh/guides/advanced-features/{inline-assets.mdx → page-performance/inline-assets.mdx} +0 -0
  190. /package/docs/zh/guides/advanced-features/{optimize-bundle.mdx → page-performance/optimize-bundle.mdx} +0 -0
  191. /package/docs/zh/guides/basic-features/{css-modules.mdx → css/css-modules.mdx} +0 -0
  192. /package/docs/zh/guides/basic-features/{mock.mdx → debug/mock.mdx} +0 -0
  193. /package/docs/zh/guides/basic-features/{proxy.mdx → debug/proxy.mdx} +0 -0
  194. /package/docs/zh/guides/basic-features/{json-files.mdx → static-assets/json-files.mdx} +0 -0
  195. /package/docs/zh/guides/basic-features/{svg-assets.mdx → static-assets/svg-assets.mdx} +0 -0
  196. /package/docs/zh/guides/basic-features/{wasm-assets.mdx → static-assets/wasm-assets.mdx} +0 -0
  197. /package/docs/zh/{guides/topic-detail/framework-plugin → plugin/plugin-system}/_meta.json +0 -0
  198. /package/docs/zh/{guides/topic-detail/framework-plugin → plugin/plugin-system}/hook-list.mdx +0 -0
  199. /package/docs/zh/{guides/topic-detail/framework-plugin → plugin/plugin-system}/hook.mdx +0 -0
  200. /package/docs/zh/{guides/topic-detail/framework-plugin → plugin/plugin-system}/introduction.mdx +0 -0
  201. /package/docs/zh/{guides/topic-detail/framework-plugin → plugin/plugin-system}/lifecycle.mdx +0 -0
  202. /package/docs/zh/{guides/topic-detail/framework-plugin → plugin/plugin-system}/relationship.mdx +0 -0
  203. /package/docs/zh/{guides → plugin}/rsbuild-plugins/plugin-esbuild.mdx +0 -0
@@ -1,16 +1,12 @@
1
- ---
2
- sidebar_position: 4
3
- title: 自定义请求 SDK
4
- ---
5
- # 自定义请求 SDK
1
+ # 扩展一体化调用 SDK
6
2
 
7
- Modern.js 的 BFF CSR 和 SSR 是同构的。在浏览器端依赖了[Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch),在服务端依赖了 [node-fetch](https://www.npmjs.com/package/node-fetch)。但在很多业务场景下我们需要对请求或响应做一些额外的处理,例如:
3
+ BFF 函数的一体化调用在 CSR 和 SSR 是同构的。Modern.js 封装的请求 SDK,在浏览器端依赖了 [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch),在服务端依赖了 [node-fetch](https://www.npmjs.com/package/node-fetch)。但在实际业务场景下,有时需要对请求或响应做一些额外的处理,例如:
8
4
 
9
5
  - 在请求头中写入鉴权信息
10
6
  - 对响应的数据或错误进行统一的处理
11
7
  - 特定平台无法使用浏览器的原生 fetch 函数,需要使用其他方式发送请求
12
8
 
13
- 针对上述的场景,Modern.js 提供了 `configure` 函数,自定义能力从低到高,可以用它配置 ssr 透传请求头,拦截器,请求 SDK。
9
+ 针对上述的场景,Modern.js 提供了 `configure` 函数,开放了一系列扩展能力,可以用它配置 ssr 透传请求头,添加拦截器,自定义请求 SDK。
14
10
 
15
11
  :::caution 注意
16
12
  `configure` 函数的调用需要在所有 BFF 请求发送前调用,以确保覆盖默认的请求配置。
@@ -18,42 +14,42 @@ Modern.js 的 BFF 在 CSR 和 SSR 是同构的。在浏览器端依赖了[Fetch
18
14
  :::
19
15
 
20
16
 
21
- ```ts title="App.tsx"
17
+ ```tsx title="routes/page.tsx"
22
18
  import { configure } from '@modern-js/runtime/bff';
23
19
 
24
- configure({
25
- request: customRequest
20
+ configure({
21
+ // ...
26
22
  })
23
+
24
+ const Index = () => <div>Hello world</div>
25
+ export default Index;
27
26
  ```
28
27
 
29
- ## 配置 ssr 透传请求头
28
+ ## 配置 SSR 透传请求头
30
29
 
31
- 在同时使用 Modernjs SSR 和 BFF 的场景下,常常需要将 SSR 页面请求上的一些请求头信息,透传给 BFF 服务。
30
+ 在同时使用 Modern.js SSR 和 BFF 的场景下,常常需要将 SSR 页面请求上的一些请求头信息,透传给 BFF 服务。
32
31
 
33
32
  例如项目有页面地址是 `https://website.com`,该页面是 SSR 的,在组件中会调用 API 接口 `https://website.com/api/info`,该接口需要用户的 cookie 信息做鉴权。页面在请求该 API 接口时,需要将 SSR 页面请求的 `cookie` 传给 BFF。
34
33
 
35
34
  目前以下请求头在 Modernjs 中是自动透传的:
36
35
 
37
- - cookie
38
- - x-tt-logid
39
- - user-agent
40
- - x-tt-stress
41
-
42
- 可以通过 `configure` 配置请求头。例如以下例子,Modern.js 会自动将 SSR 页面请求的 cookie 信息透传给 BFF 服务:
36
+ ```ts
37
+ ['cookie', 'user-agent', 'x-tt-logid', 'x-tt-stress']
38
+ ```
43
39
 
44
- ```tsx title="App.tsx"
45
- import { configure } from '@modern-js/runtime/bff';
40
+ 可以通过 `configure` 配置请求头。例如以下例子,Modern.js 会自动将 SSR 页面请求的 `x-uid` 信息透传给 BFF 服务:
46
41
 
42
+ ```tsx
47
43
  configure({
48
44
  allowedHeaders: ['x-uid']
49
45
  })
50
46
  ```
51
47
 
52
- ## 配置拦截器
48
+ ## 添加拦截器
53
49
 
54
- 在有些业务场景下需要对请求和响应进行一些统一的处理,这种场景下可以配置拦截器满足需求:
50
+ 在有些业务场景下需要对请求和响应进行统一的处理,这种场景下可以通过**配置拦截器**满足需求:
55
51
 
56
- ```tsx title="App.tsx"
52
+ ```tsx
57
53
  configure({
58
54
  // 这里的 request 是一体化默认的请求工具,interceptor 函数需返回一个新的 request。
59
55
  // 新 request 的出参必须是 parse body 之后的结果
@@ -66,16 +62,11 @@ configure({
66
62
  });
67
63
  ```
68
64
 
69
- ## 配置自定义请求 SDK
70
-
71
- 如果仅仅通过配置拦截器无法满足需求,需要对请求的 SDK 做进一步的自定义,可以通过 `configure` 函数配置自定义请求 SDK:
72
-
73
- :::caution 注意
74
- 在 SSR 和一体化调用的场景下,在 SSR 向 BFF 服务发送请求时,Modern.js 会通过**服务发现**找到 BFF 服务内网 IP,并通过 IP 发送请求,以提高性能。如果使用自定义请求 SDK 会**失去这种优化**。
65
+ ## 自定义请求 SDK
75
66
 
76
- :::
67
+ 如果仅仅通过配置拦截器无法满足需求,希望自定义请求函数,也可以通过 `configure` 进行配置:
77
68
 
78
- ```tsx title="App.tsx"
69
+ ```tsx
79
70
  import nodeFetch from 'node-fetch';
80
71
 
81
72
  const customFetch = (input: RequestInfo | URL, init: RequestInit) => {
@@ -92,13 +83,13 @@ configure({
92
83
  });
93
84
  ```
94
85
 
95
- 配置自定义请求 SDK 有以下约定:
86
+ 配置自定义请求函数有以下约定:
96
87
 
97
- - 通过 `configure` 函数可以配置一个 `request` 函数,这个函数的入参与浏览器中的 Fetch 或 node-fetch 对齐,所有的一体化 BFF 函数会通过该函数发送请求。
98
- - `request` 函数出参必须是接口实际返回的数据,不能是 Promise,否则会导致一体化 BFF 函数无法正常返回数据。
99
- - 如果是 SSR 项目,`request` 必须要同时支持浏览器端和服务器端发送请求。
88
+ - 函数的入参与浏览器中的 Fetch 或 node-fetch 对齐,所有 BFF 函数的一体化调用会通过该函数发送请求。
89
+ - 函数出参必须是接口实际返回的数据,不能是 Promise,否则会导致 BFF 函数无法正常返回数据。
90
+ - 如果是 SSR 项目,函数必须要同时支持浏览器端和服务器端发送请求。
100
91
 
101
- 使用 axios 定制自定义请求 SDK 的示例:
92
+ 下面是使用 axios 定制自定义请求函数的示例:
102
93
 
103
94
  ```tsx title="App.tsx"
104
95
  import { configure } from '@modern-js/runtime/bff';
@@ -9,13 +9,17 @@ Modern.js 默认对构建性能进行了充分优化,但是随着业务场景
9
9
  本文档提供了一些可选的提速策略,**开发者可以根据实际场景选取其中的部分策略**,从而进一步提升构建速度。
10
10
 
11
11
  :::tip 📢 注意
12
- 在[优化产物体积](/guides/advanced-features/optimize-bundle.html)一文中介绍的策略也可以用于提升构建性能,这里不再重复介绍。
12
+ 在[优化产物体积](/guides/advanced-features/page-performance/optimize-bundle)一文中介绍的策略也可以用于提升构建性能,这里不再重复介绍。
13
13
  :::
14
14
 
15
15
  ## 通用优化策略
16
16
 
17
17
  以下是一些通用的优化策略,对开发环境和生产环境均有提速效果,其中部分策略对包体积也有优化。
18
18
 
19
+ ### 使用 Rspack 构建(推荐)
20
+
21
+ 如果你还未使用 Rspack 构建,可以切换到 Rspack 构建模式来提升 5~10 倍的构建速度,请参考 [使用 Rspack](/guides/advanced-features/rspack-start.html) 来进行切换。
22
+
19
23
  ### 升级 Node.js 版本
20
24
 
21
25
  通常来说,将 Node.js 更新到最新的 [LTS 版本](https://github.com/nodejs/release#release-schedule),有助于提升构建性能。
@@ -40,25 +44,6 @@ nvm default 18
40
44
  node -v
41
45
  ```
42
46
 
43
- ### 使用 Rspack 构建
44
-
45
- 如果你对构建性能有更极致的需求,可以一键切换到 Rspack 构建模式,请参考 [使用 Rspack](/guides/advanced-features/rspack-start.html) 来进行切换。
46
-
47
- ### 使用 SWC 或 esbuild 编译
48
-
49
- [SWC](https://swc.rs/) (Speedy Web Compiler) 是基于 `Rust` 语言编写的高性能 JavaScript 和 TypeScript 转译和压缩工具。在 Polyfill 和语法降级方面可以和 Babel 提供一致的能力,并且性能比 Babel 高出一个数量级。
50
-
51
- [esbuild](https://esbuild.github.io/) 是一款基于 Golang 开发的前端构建工具,具有打包、编译和压缩 JavaScript 代码的功能,相比传统的打包编译工具,esbuild 在性能上有显著提升。
52
-
53
- Modern.js 提供了 SWC 插件和 esbuild 插件,让你能使用 SWC 或 esbuild 代替 babel-loader、ts-loader 和 terser 等库进行代码编译和压缩。详见:
54
-
55
- - [SWC 插件文档](/configure/app/tools/swc.html)
56
- - [esbuild 插件文档](/configure/app/tools/esbuild.html)
57
-
58
- :::tip SWC vs esbuild
59
- SWC 编译产物的兼容性较好,支持注入 core-js 等 Polyfill,并且功能更加完备,因此推荐优先使用 SWC 插件。
60
- :::
61
-
62
47
  ### 避免使用 ts-loader
63
48
 
64
49
  默认情况下,Modern.js 使用 Babel 编译 TS 文件,开启 [tools.tsLoader](/configure/app/tools/ts-loader.html) 选项后,会使用 `ts-loader` 编译 TS 文件。
@@ -118,7 +103,7 @@ export default {
118
103
 
119
104
  ### 调整 Browserslist 范围
120
105
 
121
- 这项优化的原理与[「提升 Browserslist 范围」](/guides/advanced-features/optimize-bundle.html#adjust-browserslist)类似,区别在于,我们可以为开发环境和生产环境设置不同的 browserslist,从而减少开发环境下的编译开销。
106
+ 这项优化的原理与[「提升 Browserslist 范围」](/guides/advanced-features/page-performance/optimize-bundle#adjust-browserslist)类似,区别在于,我们可以为开发环境和生产环境设置不同的 browserslist,从而减少开发环境下的编译开销。
122
107
 
123
108
  比如,你可以在 `package.json` 中添加以下配置,表示在开发环境下只兼容最新的浏览器,在生产环境下兼容实际需要的浏览器:
124
109
 
@@ -0,0 +1 @@
1
+ ["code-split", "inline-assets", "optimize-bundle"]
@@ -8,13 +8,13 @@ import Rspack from '@modern-js/builder-doc/docs/zh/shared/rspackTip.mdx';
8
8
 
9
9
  <Rspack />
10
10
 
11
- **Modern.js 提供开箱即用的 Rspack 支持**,你可以在成熟的 Webpack 和更快的 Rspack 之间进行切换。
11
+ **Modern.js 提供开箱即用的 Rspack 支持**,你可以在成熟的 webpack 和更快的 Rspack 之间进行切换。
12
12
 
13
13
  这篇文档会向你介绍如何在 Modern.js 中开启 Rspack 构建模式。
14
14
 
15
15
  ## 初始化 Rspack 项目
16
16
 
17
- Modern.js 生成器会提供一个可交互的问答界面,只需将构建工具选择为 **Rspack**,即可创建一个 Rspack 项目:
17
+ Modern.js 新项目已默认启用 Rspack 构建,只需执行 [初始化项目](/guides/get-started/quick-start.html#初始化项目),即可创建一个 Rspack 项目:
18
18
 
19
19
  import InitRspackApp from '@site-docs/components/init-rspack-app';
20
20
 
@@ -24,7 +24,7 @@ import InitRspackApp from '@site-docs/components/init-rspack-app';
24
24
 
25
25
  ## 开启 Rspack 构建
26
26
 
27
- 从 Modern.js MAJOR_VERSION.46.0 版本起,在一个已有的 Modern.js 项目中,你仅需在 `modern.config.ts` 中添加以下配置,即可启用 Rspack 构建:
27
+ 从 Modern.js MAJOR_VERSION.59.0 版本起,在一个已有的 Modern.js 项目中,你仅需在 `modern.config.ts` 中添加以下配置,即可启用 Rspack 构建:
28
28
 
29
29
  ```diff title=modern.config.ts
30
30
  import { appTools, defineConfig } from '@modern-js/app-tools';
@@ -32,14 +32,14 @@ import { appTools, defineConfig } from '@modern-js/app-tools';
32
32
  export default defineConfig({
33
33
  plugins: [
34
34
  appTools({
35
- + bundler: 'experimental-rspack',
35
+ + bundler: 'rspack',
36
36
  }),
37
37
  ],
38
38
  });
39
39
  ```
40
40
 
41
41
  :::tip
42
- 如果你当前版本低于 MAJOR_VERSION.46.0, 可通过执行 `npx modern upgrade` 进行升级。
42
+ 如果你当前版本低于 MAJOR_VERSION.59.0,可通过执行 `npx modern upgrade` 进行升级。
43
43
  :::
44
44
 
45
45
  import RspackPrecautions from '@modern-js/builder-doc/docs/zh/shared/rspackPrecautions.md';
@@ -70,13 +70,6 @@ export default {
70
70
  };
71
71
  ```
72
72
 
73
-
74
- :::tip
75
- 开启 Rspack 构建能力后,目前有小部分配置在 Rspack 中还不支持使用,如 [source.moduleScopes](/configure/app/source/module-scopes)、[security.sri](/configure/app/security/sri) 等。
76
-
77
- 对于不支持的配置,我们在文档中有标注 `打包工具: 仅支持 webpack` 或 `打包工具: 仅支持 rspack`,可参考具体配置介绍。
78
- :::
79
-
80
73
  ## 修改转译配置
81
74
 
82
75
  Modern.js 在 Rspack 模式下使用 Rspack [builtin:swc-loader](https://rspack.dev/zh/guide/features/builtin-swc-loader) 进行代码转译。
@@ -105,13 +98,13 @@ export default defineConfig<'rspack'>({
105
98
 
106
99
  通常情况下,Modern.js 内会集成 Rspack 的最新版本,通过 `npx modern upgrade` 即可将当前项目中的 Modern.js 相关依赖以及内置的 Rspack 更新至最新版本。
107
100
 
108
- 但 Modern.js 对于 Rspack 的依赖方式为锁版本方式(非自动升级),由于发版周期不同步等原因,可能会出现 Modern.js 内集成的 Rspack 版本落后于 Rspack 最新版本的情况。
101
+ 但 Modern.js 对于 Rspack 的依赖方式为锁版本方式(非自动升级),由于发版周期不同步等原因,可能会出现 Modern.js 内集成的 Rspack 版本落后于 Rspack 最新版本的情况。
109
102
 
110
103
  当你执行 dev / build 命令时,Modern.js 会在[开启调试模式时](https://rsbuild.dev/zh/guide/debug/debug-mode)自动打印当前使用的 Rspack 版本:
111
104
 
112
105
  ![rspack_version_log](https://lf3-static.bytednsdoc.com/obj/eden-cn/6221eh7uhbfvhn/modern/20240110-155444.png)
113
106
 
114
- #### 修改内置 Rspack 版本
107
+ ### 修改内置 Rspack 版本
115
108
 
116
109
  可以使用 pnpm / yarn / npm 等包管理工具自带的依赖升级功能来将 Rspack 强制升级到指定版本。
117
110
 
@@ -140,9 +133,7 @@ export default defineConfig<'rspack'>({
140
133
  "@rspack/plugin-react-refresh": "npm:@rspack/plugin-react-refresh@nightly"
141
134
  },
142
135
  "peerDependencyRules": {
143
- "allowAny": [
144
- "@rspack/*"
145
- ]
136
+ "allowAny": ["@rspack/*"]
146
137
  }
147
138
  }
148
139
  }
@@ -1,5 +1,4 @@
1
1
  [
2
- "css",
3
2
  "routes",
4
3
  {
5
4
  "type": "dir",
@@ -7,16 +6,39 @@
7
6
  "label": "data-solution",
8
7
  "collapsed": true
9
8
  },
9
+ {
10
+ "type": "dir",
11
+ "name": "render",
12
+ "label": "rendering",
13
+ "collapsed": true
14
+ },
15
+ {
16
+ "type": "dir",
17
+ "name": "css",
18
+ "label": "css-solution",
19
+ "collapsed": true
20
+ },
21
+ "html",
22
+ {
23
+ "type": "dir",
24
+ "name": "static-assets",
25
+ "label": "static-assets",
26
+ "collapsed": true
27
+ },
28
+ {
29
+ "type": "dir",
30
+ "name": "debug",
31
+ "label": "debug",
32
+ "collapsed": true
33
+ },
34
+ {
35
+ "type": "dir",
36
+ "name": "testing",
37
+ "label": "testing",
38
+ "collapsed": true
39
+ },
10
40
  "alias",
11
- "mock",
12
- "proxy",
13
41
  "env-vars",
14
- "html",
15
42
  "output-files",
16
- "static-assets",
17
- "svg-assets",
18
- "json-files",
19
- "wasm-assets",
20
- "css-modules",
21
43
  "deploy"
22
44
  ]
@@ -15,9 +15,7 @@ sidebar_position: 4
15
15
 
16
16
  ## 通过 `tsconfig.json` 的 `paths` 配置
17
17
 
18
- 你可以通过 `tsconfig.json` 中的 `paths` 来配置别名,这是我们在 TypeScript 项目中推荐使用的方式,因为它可以解决路径别名的 TS 类型问题。
19
-
20
- 比如:
18
+ 你可以通过 `tsconfig.json` 中的 `paths` 来配置别名,这是我们在 TypeScript 项目中推荐使用的方式,因为它可以解决路径别名的 TS 类型问题。比如:
21
19
 
22
20
  ```json title="tsconfig.json"
23
21
  {
@@ -29,7 +27,7 @@ sidebar_position: 4
29
27
  }
30
28
  ```
31
29
 
32
- 以上配置完成后,如果你在代码中引用 `@common/Foo.tsx`, 则会映射到 `<project>/src/common/Foo.tsx` 路径上。
30
+ 以上配置完成后,如果你在代码中引用 `@common/Foo.tsx`,则会映射到 `<project>/src/common/Foo.tsx` 路径上。
33
31
 
34
32
  :::tip
35
33
  你可以阅读 [TypeScript - paths](https://www.typescriptlang.org/tsconfig#paths) 文档来了解更多用法。
@@ -47,9 +45,7 @@ Modern.js 提供了 [source.alias](/configure/app/source/alias) 配置项,对
47
45
 
48
46
  ### 对象用法
49
47
 
50
- 你可以通过对象的方式来配置 `source.alias`,其中的相对路径会被自动补全为绝对路径。
51
-
52
- 比如:
48
+ 你可以通过对象的方式来配置 `source.alias`,其中的相对路径会被自动补全为绝对路径。比如:
53
49
 
54
50
  ```js
55
51
  export default {
@@ -61,13 +57,11 @@ export default {
61
57
  };
62
58
  ```
63
59
 
64
- 以上配置完成后,如果你在代码中引用 `@common/Foo.tsx`, 则会映射到 `<project>/src/common/Foo.tsx` 路径上。
60
+ 以上配置完成后,如果你在代码中引用 `@common/Foo.tsx`,则会映射到 `<project>/src/common/Foo.tsx` 路径上。
65
61
 
66
62
  ### 函数用法
67
63
 
68
- 你也可以将 `source.alias` 配置为一个函数,拿到内置的 `alias` 对象,对其进行修改。
69
-
70
- 比如:
64
+ 你也可以将 `source.alias` 配置为一个函数,拿到内置的 `alias` 对象,对其进行修改。比如:
71
65
 
72
66
  ```js
73
67
  export default {
@@ -0,0 +1 @@
1
+ ["css", "css-modules", "css-in-js", "tailwindcss"]
@@ -0,0 +1,34 @@
1
+ # 使用 CSS-in-JS
2
+
3
+ CSS-in-JS 是一种可以将 CSS 样式写在 JS 文件里的技术。
4
+
5
+ Modern.js 集成了社区常用的 CSS-in-JS 实现库 [styled-components](https://styled-components.com/),它使用 JavaScript 的新特性 [Tagged template](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates) 编写组件的 CSS 样式。可以直接从 `@modern-js/runtime/styled` 引入 [styled-components](https://styled-components.com/) 的 API 进行使用。
6
+
7
+ 当需要编写一个内部字体为红色的 `div` 组件时,可以如下实现:
8
+
9
+ ```js
10
+ import styled from '@modern-js/runtime/styled';
11
+
12
+ const RedDiv = styled.div`
13
+ color: red;
14
+ `;
15
+ ```
16
+
17
+ 当需要根据组件的 `props` 动态设置组件样式时,例如 `props` 的属性 `primary` 为 `true` 时,按钮的颜色为白色,其他情况为红色,实现代码如下:
18
+
19
+ ```js
20
+ import styled from '@modern-js/runtime/styled';
21
+
22
+ const Button = styled.button`
23
+ color: ${props => (props.primary ? 'white' : 'red')};
24
+ font-size: 1em;
25
+ `;
26
+ ```
27
+
28
+ 关于 styled-components 的更多用法,请参考 [styled-components 官网](https://styled-components.com/)。
29
+
30
+ Modern.js 内部集成了 Babel 的 [babel-plugin-styled-components](https://github.com/styled-components/babel-plugin-styled-components) 插件,你可以通过 [tools.styledComponents](/configure/app/tools/styled-components) 对插件进行配置。
31
+
32
+ :::tip 提示
33
+ 如果需要使用 [styled-jsx](https://www.npmjs.com/package/styled-jsx)、[Emotion](https://emotion.sh/) 等其他 CSS-in-JS 库,需要先安装对应库的依赖。具体使用方式请参考对应库的官网。
34
+ :::
@@ -0,0 +1,25 @@
1
+ ---
2
+ sidebar_position: 1
3
+ ---
4
+
5
+ # 引入 CSS
6
+
7
+ Modern.js 内置多种常用的 CSS 开发方案,包括 Less / Sass / Stylus 预处理器、PostCSS、CSS Modules、CSS-in-JS 和 Tailwind CSS。
8
+
9
+ ## 使用 Less、Sass 和 Stylus
10
+
11
+ Modern.js 内置了社区流行的 CSS 预处理器,包括 Less 和 Sass。
12
+
13
+ 默认情况下,你不需要对 Less 和 Sass 进行任何配置。如果你有自定义 loader 配置的需求,可以通过配置 [tools.less](/configure/app/tools/less)、[tools.sass](/configure/app/tools/sass) 来进行设置。
14
+
15
+ 你也可以在 Modern.js 中使用 Stylus,只需要安装 Rsbuild 提供的 Stylus 插件即可,使用方式请参考 [Stylus 插件](https://rsbuild.dev/zh/plugins/list/plugin-stylus)。
16
+
17
+ ## 使用 PostCSS
18
+
19
+ Modern.js 内置了 [PostCSS](https://postcss.org/) 来转换 CSS 代码。
20
+
21
+ 请阅读 [Rsbuild - 使用 PostCSS](https://rsbuild.dev/zh/guide/basic/css-usage#%E4%BD%BF%E7%94%A8-postcss) 了解更多用法。
22
+
23
+ ## 使用 Uno CSS
24
+
25
+ 请阅读 [Rsbuild - 使用 UnoCSS](https://rsbuild.dev/zh/guide/basic/unocss) 了解更多用法。
@@ -1,65 +1,4 @@
1
- ---
2
- sidebar_position: 1
3
- ---
4
-
5
- # 样式开发
6
-
7
- Modern.js 内置多种常用的 CSS 开发方案,包括 Less / Sass / Stylus 预处理器、PostCSS、CSS Modules、CSS-in-JS 和 Tailwind CSS。
8
-
9
- ## 使用 Less、Sass 和 Stylus
10
-
11
- Modern.js 内置了社区流行的 CSS 预处理器,包括 Less 和 Sass。
12
-
13
- 默认情况下,你不需要对 Less 和 Sass 进行任何配置。如果你有自定义 loader 配置的需求,可以通过配置 [tools.less](/configure/app/tools/less)、[tools.sass](/configure/app/tools/sass) 来进行设置。
14
-
15
- 你也可以在 Modern.js 中使用 Stylus,只需要安装 Rsbuild 提供的 Stylus 插件即可,使用方式请参考 [Stylus 插件](https://rsbuild.dev/zh/plugins/list/plugin-stylus)。
16
-
17
- ## 使用 PostCSS
18
-
19
- Modern.js 内置了 [PostCSS](https://postcss.org/) 来转换 CSS 代码。
20
-
21
- 请阅读 [Rsbuild - 使用 PostCSS](https://rsbuild.dev/zh/guide/basic/css-usage#%E4%BD%BF%E7%94%A8-postcss) 了解更多用法。
22
-
23
- ## 使用 CSS Modules
24
-
25
- 请阅读 [使用 CSS Modules](/guides/basic-features/css-modules) 章节来了解 CSS Modules 的完整用法。
26
-
27
- ## 使用 CSS-in-JS
28
-
29
- CSS-in-JS 是一种可以将 CSS 样式写在 JS 文件里的技术。
30
-
31
- Modern.js 集成了社区常用的 CSS-in-JS 实现库 [styled-components](https://styled-components.com/),它使用 JavaScript 的新特性 [Tagged template](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#tagged_templates) 编写组件的 CSS 样式。可以直接从 `@modern-js/runtime/styled` 引入 [styled-components](https://styled-components.com/) 的 API 进行使用。
32
-
33
- 当需要编写一个内部字体为红色的 `div` 组件时,可以如下实现:
34
-
35
- ```js
36
- import styled from '@modern-js/runtime/styled';
37
-
38
- const RedDiv = styled.div`
39
- color: red;
40
- `;
41
- ```
42
-
43
- 当需要根据组件的 `props` 动态设置组件样式时,例如 `props` 的属性 `primary` 为 `true` 时,按钮的颜色为白色,其他情况为红色,实现代码如下:
44
-
45
- ```js
46
- import styled from '@modern-js/runtime/styled';
47
-
48
- const Button = styled.button`
49
- color: ${props => (props.primary ? 'white' : 'red')};
50
- font-size: 1em;
51
- `;
52
- ```
53
-
54
- 关于 styled-components 的更多用法,请参考 [styled-components 官网](https://styled-components.com/)。
55
-
56
- Modern.js 内部集成了 Babel 的 [babel-plugin-styled-components](https://github.com/styled-components/babel-plugin-styled-components) 插件,你可以通过 [tools.styledComponents](/configure/app/tools/styled-components) 对插件进行配置。
57
-
58
- :::tip 提示
59
- 如果需要使用 [styled-jsx](https://www.npmjs.com/package/styled-jsx)、[Emotion](https://emotion.sh/) 等其他 CSS-in-JS 库,需要先安装对应库的依赖。具体使用方式请参考对应库的官网。
60
- :::
61
-
62
- ## 使用 Tailwind CSS
1
+ # 使用 Tailwind CSS
63
2
 
64
3
  [Tailwind CSS](https://tailwindcss.com/) 是一个以 Utility Class 为基础的 CSS 框架和设计系统,可以快速地为组件添加常用样式,同时支持主题样式的灵活扩展。
65
4
 
@@ -153,7 +92,7 @@ Tailwind CSS 官方提供了 [Tailwind CSS IntelliSense](https://github.com/tail
153
92
  1. 在 VS Code 中安装 [Tailwind CSS IntelliSense](https://github.com/tailwindlabs/tailwindcss-intellisense) 插件。
154
93
  2. 如果项目的根目录没有 `tailwind.config.{ts,js}` 文件,那么你需要创建该文件,并写入当前项目的 Tailwind CSS 配置,否则 IDE 插件将无法正确生效。
155
94
 
156
- ### Tailwind CSS 版本
95
+ ## Tailwind CSS 版本
157
96
 
158
97
  Modern.js 同时支持 Tailwind CSS v2 和 v3 版本,框架会识别项目 `package.json` 中的 `tailwindcss` 依赖版本,并启用相应的配置。默认情况下,我们会为你安装 Tailwind CSS v3 版本。
159
98
 
@@ -162,7 +101,7 @@ Modern.js 同时支持 Tailwind CSS v2 和 v3 版本,框架会识别项目 `pa
162
101
  - [Tailwind CSS v3.0](https://tailwindcss.com/blog/tailwindcss-v3)
163
102
  - [Upgrade Guide](https://tailwindcss.com/docs/upgrade-guide)
164
103
 
165
- ### 浏览器兼容性
104
+ ## 浏览器兼容性
166
105
 
167
106
  Tailwind CSS v2 和 v3 均不支持 IE 11 浏览器,相关背景请参考:
168
107