@modern-js/main-doc 2.34.0 → 2.35.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. package/docs/en/apis/app/commands.mdx +12 -11
  2. package/docs/en/apis/app/hooks/config/public.mdx +2 -2
  3. package/docs/en/apis/app/hooks/config/upload.mdx +3 -3
  4. package/docs/en/components/debug-app.mdx +1 -3
  5. package/docs/en/components/global-proxy-config.mdx +4 -13
  6. package/docs/en/components/global-proxy.mdx +2 -4
  7. package/docs/en/components/init-app.mdx +1 -1
  8. package/docs/en/components/tech-stack-node-framework.mdx +1 -0
  9. package/docs/en/configure/app/builder-plugins.mdx +2 -2
  10. package/docs/en/configure/app/plugins.mdx +3 -4
  11. package/docs/en/configure/app/server/base-url.mdx +0 -2
  12. package/docs/en/configure/app/source/config-dir.mdx +2 -2
  13. package/docs/en/configure/app/source/enable-async-entry.mdx +1 -1
  14. package/docs/en/guides/advanced-features/eslint.mdx +1 -1
  15. package/docs/en/guides/basic-features/alias.mdx +12 -51
  16. package/docs/en/guides/basic-features/css.mdx +35 -15
  17. package/docs/en/guides/basic-features/data-fetch.mdx +12 -12
  18. package/docs/en/guides/basic-features/env-vars.mdx +1 -1
  19. package/docs/en/guides/basic-features/html.mdx +2 -2
  20. package/docs/en/guides/basic-features/routes.mdx +31 -19
  21. package/docs/en/guides/concept/builder.mdx +1 -1
  22. package/docs/en/guides/get-started/glossary.mdx +1 -1
  23. package/docs/en/guides/get-started/introduction.mdx +21 -1
  24. package/docs/en/guides/get-started/quick-start.mdx +8 -17
  25. package/docs/en/guides/get-started/tech-stack.mdx +138 -0
  26. package/docs/en/guides/get-started/upgrade.mdx +10 -4
  27. package/docs/en/guides/topic-detail/changesets/add.mdx +1 -1
  28. package/docs/en/guides/topic-detail/changesets/changelog.mdx +3 -3
  29. package/docs/en/guides/topic-detail/changesets/commit.mdx +3 -3
  30. package/docs/en/guides/topic-detail/changesets/release-note.mdx +3 -3
  31. package/docs/en/guides/topic-detail/changesets/release.mdx +1 -1
  32. package/docs/en/guides/topic-detail/framework-plugin/implement.mdx +6 -4
  33. package/docs/en/guides/topic-detail/generator/create/use.mdx +1 -9
  34. package/docs/en/guides/topic-detail/generator/plugin/context.md +1 -1
  35. package/docs/en/guides/topic-detail/micro-frontend/c01-introduction.mdx +1 -0
  36. package/docs/en/guides/topic-detail/micro-frontend/c02-development.mdx +24 -17
  37. package/docs/en/guides/topic-detail/micro-frontend/c03-main-app.mdx +51 -37
  38. package/docs/en/guides/topic-detail/micro-frontend/c04-communicate.mdx +1 -0
  39. package/docs/en/guides/topic-detail/micro-frontend/c05-mixed-stack.mdx +1 -1
  40. package/docs/en/tutorials/first-app/c02-component.mdx +4 -3
  41. package/docs/zh/apis/app/commands.mdx +10 -9
  42. package/docs/zh/apis/app/hooks/api/api.mdx +2 -1
  43. package/docs/zh/apis/app/hooks/server/index_.mdx +2 -1
  44. package/docs/zh/community/blog/2022-0708-updates.md +4 -4
  45. package/docs/zh/community/blog/overview.md +1 -1
  46. package/docs/zh/components/debug-app.mdx +1 -3
  47. package/docs/zh/components/global-proxy-config.mdx +4 -13
  48. package/docs/zh/components/global-proxy.mdx +2 -4
  49. package/docs/zh/components/tech-stack-node-framework.mdx +1 -0
  50. package/docs/zh/configure/app/builder-plugins.mdx +1 -1
  51. package/docs/zh/configure/app/plugins.mdx +1 -2
  52. package/docs/zh/configure/app/server/base-url.mdx +0 -2
  53. package/docs/zh/configure/app/source/enable-async-entry.mdx +1 -1
  54. package/docs/zh/guides/advanced-features/eslint.mdx +1 -1
  55. package/docs/zh/guides/basic-features/alias.mdx +12 -51
  56. package/docs/zh/guides/basic-features/css.mdx +35 -15
  57. package/docs/zh/guides/basic-features/data-fetch.mdx +11 -12
  58. package/docs/zh/guides/basic-features/html.mdx +4 -5
  59. package/docs/zh/guides/basic-features/routes.mdx +26 -19
  60. package/docs/zh/guides/get-started/introduction.mdx +20 -0
  61. package/docs/zh/guides/get-started/quick-start.mdx +8 -17
  62. package/docs/zh/guides/get-started/tech-stack.mdx +138 -0
  63. package/docs/zh/guides/get-started/upgrade.mdx +10 -4
  64. package/docs/zh/guides/topic-detail/changesets/add.mdx +1 -1
  65. package/docs/zh/guides/topic-detail/changesets/changelog.mdx +3 -3
  66. package/docs/zh/guides/topic-detail/changesets/commit.mdx +3 -3
  67. package/docs/zh/guides/topic-detail/changesets/release-note.mdx +3 -3
  68. package/docs/zh/guides/topic-detail/changesets/release.mdx +1 -1
  69. package/docs/zh/guides/topic-detail/framework-plugin/hook-list.mdx +1 -1
  70. package/docs/zh/guides/topic-detail/framework-plugin/implement.mdx +7 -5
  71. package/docs/zh/guides/topic-detail/generator/create/use.mdx +0 -8
  72. package/docs/zh/guides/topic-detail/generator/plugin/context.md +1 -1
  73. package/docs/zh/guides/topic-detail/micro-frontend/c02-development.mdx +45 -21
  74. package/docs/zh/guides/topic-detail/micro-frontend/c03-main-app.mdx +51 -33
  75. package/docs/zh/guides/topic-detail/micro-frontend/c04-communicate.mdx +1 -0
  76. package/docs/zh/guides/topic-detail/micro-frontend/c05-mixed-stack.mdx +1 -0
  77. package/docs/zh/tutorials/first-app/c02-component.mdx +4 -3
  78. package/package.json +7 -7
@@ -1,10 +1,11 @@
1
1
  ---
2
- sidebar_position: 4
2
+ title: 数据获取
3
+ sidebar_position: 3
3
4
  ---
4
5
 
5
6
  # 数据获取
6
7
 
7
- Modern.js 中提供了开箱即用的数据获取能力,开发者可以通过这些 API,在 CSR 和 SSR 环境同构的进行开发。
8
+ Modern.js 中提供了开箱即用的数据获取能力,开发者可以通过这些 API,在项目中获取数据。
8
9
 
9
10
  需要注意的是,这些 API 并不帮助应用发起请求,而是帮助开发者更好地管理数据,提升项目的性能。
10
11
 
@@ -216,26 +217,25 @@ export default function UserLayout() {
216
217
 
217
218
  :::info
218
219
  此功能目前是实验性质,后续 API 可能有调整。
219
- 目前仅支持 CSR,敬请期待 Streaming SSR。
220
220
 
221
221
  :::
222
222
 
223
223
  创建 `user/layout.loader.ts`,并添加以下代码:
224
224
 
225
225
  ```ts title="routes/user/layout.loader.ts"
226
- import { defer } from "@modern-js/runtime/router"
226
+ import { defer } from '@modern-js/runtime/router';
227
227
 
228
228
  const loader = () =>
229
- defer({
230
- userInfo: new Promise((resolve) => {
229
+ defer({
230
+ userInfo: new Promise(resolve => {
231
231
  setTimeout(() => {
232
232
  resolve({
233
233
  age: 1,
234
- name: 'user layout'
235
- })
236
- }, 1000)
237
- })
238
- })
234
+ name: 'user layout',
235
+ });
236
+ }, 1000);
237
+ }),
238
+ });
239
239
 
240
240
  export default loader;
241
241
  ```
@@ -346,7 +346,6 @@ export default async (): Promise<ProfileData> => {
346
346
 
347
347
  在 SSR 项目中,每个 `loader` 也是一个服务端接口,我们推荐使用 `loader` 替代 http method 为 `get` 的 BFF 函数,作为接口层,避免多一层转发和执行。
348
348
 
349
-
350
349
  ## useLoader(旧版)
351
350
 
352
351
  **`useLoader`** 是 Modern.js 老版本中的 API。该 API 是一个 React Hook,专门提供给 SSR 应用使用,让开发者能同构的在组件中获取数据。
@@ -135,7 +135,7 @@ export default function Document(): React.ReactElement {
135
135
  <!--<?- html ?>-->
136
136
  <h1 style="color:red">以下为构建时传过来的参数:</h1>
137
137
  <h2>entryName: sub</h2>
138
- <h2>title: </h2>
138
+ <h2>title:</h2>
139
139
  <h2>rootId: root</h2>
140
140
  </div>
141
141
  <h1>bottom</h1>
@@ -166,12 +166,11 @@ export default function Document(): React.ReactElement {
166
166
  }
167
167
  ```
168
168
 
169
+ ## HTML 语法
169
170
 
170
- ## Html 语法
171
+ Modern.js 也支持通过 HTML(EJS) 语法来生成 HTML 文件。
171
172
 
172
- Modern.js 也支持 HTML 语法。默认情况下,Modern.js 的应用工程中会内置一份 HTML 模板,用于生成 HTML 代码。
173
-
174
- 基于 HTML 语法的模板,Modern.js 提供了**自定义 HTML 片段**和**完全自定义 HTML 模板**两种方式来自定义模板。
173
+ 默认情况下,Modern.js 的工程中会内置一份 HTML 模板,用于生成 HTML 代码。如果你需要自定义 HTML 模板,可以使用**自定义 HTML 片段**和**完全自定义 HTML 模板**两种方式。
175
174
 
176
175
  ### 自定义 HTML 片段
177
176
 
@@ -1,5 +1,5 @@
1
1
  ---
2
- sidebar_position: 1
2
+ sidebar_position: 2
3
3
  ---
4
4
 
5
5
  # 路由方案
@@ -151,13 +151,13 @@ export default () => {
151
151
 
152
152
  #### Config
153
153
 
154
- 每个 `Layout` 或 `Page` 文件都可以定义一个自己的 `config` 文件,如 `page.config.ts`,该文件中我们约定了一个具名导出 `handle`,
154
+ 每个 `Layout`, `$` 或 `Page` 文件都可以定义一个自己的 `config` 文件,如 `page.config.ts`,该文件中我们约定了一个具名导出 `handle`,
155
155
  这个字段中你可以定义任意属性:
156
156
 
157
157
  ```ts title="routes/page.config.ts"
158
158
  export const handle = {
159
- breadcrumbName: 'profile'
160
- }
159
+ breadcrumbName: 'profile',
160
+ };
161
161
  ```
162
162
 
163
163
  定义的这些属性可以通过 [`useMatches`](https://reactrouter.com/en/main/hooks/use-matches) hook 获取:
@@ -165,15 +165,13 @@ export const handle = {
165
165
  ```ts title="routes/layout.ts"
166
166
  export default () => {
167
167
  const matches = useMatches;
168
- const breadcrumbs = matches.map(matchedRoute => matchedRoute?.handle?.breadcrumbName);
169
- return (
170
- <Breadcrumb names={breadcrumbs}>
171
- </Breadcrumb>
172
- )
173
- }
168
+ const breadcrumbs = matches.map(
169
+ matchedRoute => matchedRoute?.handle?.breadcrumbName,
170
+ );
171
+ return <Breadcrumb names={breadcrumbs}></Breadcrumb>;
172
+ };
174
173
  ```
175
174
 
176
-
177
175
  ### 动态路由
178
176
 
179
177
  通过 `[]` 命名的文件目录,生成的路由会作为动态路由。例如以下文件目录:
@@ -233,6 +231,7 @@ export default () => {
233
231
  ```
234
232
 
235
233
  当访问任何匹配不到的路径时(如 `/blog/a`),都会渲染 `routes/$.tsx` 组件,因为这里有 `layout.tsx`,渲染的 UI 如下:
234
+
236
235
  ```tsx
237
236
  <RootLayout>
238
237
  <BlogLayout>
@@ -254,7 +253,6 @@ params['*']; // => 'aaa/bbb'
254
253
 
255
254
  `$.tsx` 可以加入到 `routes` 目录下的任意目录中,一个常见的使用示例是添加 `routes/$.tsx` 文件去定制任意层级的 404 内容。
256
255
 
257
-
258
256
  ### 无路径布局
259
257
 
260
258
  当目录名以 \_\_ 开头时,对应的目录名不会转换为实际的路由路径,例如以下文件目录:
@@ -368,6 +366,17 @@ export default () => {
368
366
  };
369
367
  ```
370
368
 
369
+ 在组件内做重定向,则可以通过 `useNavigate` hook,示例如下:
370
+
371
+ ```ts title="routes/user/page.ts"
372
+ import { useNavigate } from '@modern-js/runtime/router';
373
+
374
+ export default () => {
375
+ const navigate = useNavigate();
376
+ navigate('/login');
377
+ };
378
+ ```
379
+
371
380
  ### 错误处理
372
381
 
373
382
  `routes/` 下每一层目录中,开发者同样可以定义一个 `error.tsx` 文件,默认导出一个 `<ErrorBoundary>` 组件。
@@ -493,6 +502,7 @@ export const init = (context: RuntimeContext) => {
493
502
  ```
494
503
 
495
504
  :::info
505
+
496
506
  - 该功能目前仅在 Webpack 项目中支持,Rspack 项目暂不支持。
497
507
  - 对数据的预加载目前只会预加载 SSR 项目中 [Data Loader](/guides/basic-features/data-fetch) 中返回的数据。
498
508
 
@@ -512,14 +522,13 @@ export const init = (context: RuntimeContext) => {
512
522
  - 使用 `render`,仅在空闲时对静态资源进行加载,不会与首屏静态资源抢占网络。
513
523
  - 在 SSR 场景下,也会对数据进行预取。
514
524
 
515
- import Motivation from '@site-docs/components/convention-routing-motivation'
516
-
517
- <Motivation/>
525
+ import Motivation from '@site-docs/components/convention-routing-motivation';
518
526
 
519
- import Practice from '@site-docs/components/routes-practice'
527
+ <Motivation />
520
528
 
521
- <Practice/>
529
+ import Practice from '@site-docs/components/routes-practice';
522
530
 
531
+ <Practice />
523
532
 
524
533
  ## 自控式路由
525
534
 
@@ -569,5 +578,3 @@ export default defineConfig({
569
578
  ```
570
579
 
571
580
  如上述配置, 如果关闭了 [`runtime.router`](/configure/app/runtime/router) 配置,并直接使用 `react-router-dom` 进行项目路由管理时,还需要根据 React Router 文档自行包裹 `Provider`。
572
-
573
-
@@ -66,6 +66,26 @@ Modern.js 能为开发者提供极致的**开发体验(Development Experience
66
66
  - 🌏 **周边生态**:自研状态管理、微前端、模块打包、Monorepo 方案等周边需求。
67
67
  - 🕸 **多种路由模式**:包含自控路由、基于文件约定的路由(嵌套路由)等。
68
68
 
69
+ ## 和其他框架的对比
70
+
71
+ ### Next.js
72
+
73
+ Next.js 是社区中最流行的 React 框架之一,由 Vercel 开发。
74
+
75
+ Next.js 默认使用了 React Server Components,这意味着**你需要在服务端渲染你的 Web 应用,并为服务器产生的开销付费**;并且 Server Components 目前不是一项稳定的技术,社区中很多流行的 React 库尚未完成对 RSC 的适配。在目前阶段,你可能需要使用 Next.js 旧版的 Pages Router 来避免 Server Components 带来的问题。
76
+
77
+ 当你想构建一个单页面应用(SPA),并通过客户端渲染时,Next.js 可能不是一个好的选择,因为它的很多功能都是围绕 Server 优先来设计的。如果你需要使用客户端渲染,只能通过 Next.js 提供的 "static exports" 来使用有限的功能。
78
+
79
+ 而 Modern.js 将客户端渲染(CSR)和服务端渲染(SSR)视为同样重要的场景。当你创建一个 Modern.js 应用时,它默认是在客户端渲染的,你不需要了解 Server Components 的用法和局限性。你也可以在任何有需要的时候开启 SSR,甚至可以为一部分页面开启 SSR,整个过程是完全渐进式的。请注意,Modern.js 目前不支持 Server Components,我们会持续观察它的潜力,并在合适的时候支持它。
80
+
81
+ ### Umi
82
+
83
+ Umi 是中文社区中非常流行的 React 框架,也是蚂蚁集团的底层前端框架。Modern.js 和 Umi 有许多相似之处,比如都支持插件系统、约定式路由、微生成器等。
84
+
85
+ **Modern.js 和 Umi 的主要区别在于构建优化方式不同**。Umi 采用了 MFSU 技术来提升构建速度,而 Modern.js 则使用 Rspack 来提升 5 ~ 10 倍构建速度。在我们看来,类似 Rspack 这样的 Rust 工具更符合前端工具链的长期发展趋势,它可以在性能、稳定性和生态兼容性之间取得较好的平衡。
86
+
87
+ 此外,Modern.js 的服务端能力更加丰富,包括完备的 SSR 能力、一体化 BFF 开发能力和自定义 Web Server 支持。这些能力经过了字节跳动大量线上应用的验证,可以直接用于生产环境。
88
+
69
89
  ## 下一步
70
90
 
71
91
  如果你希望了解如何使用 Modern.js 框架,可以尝试 [创建第一个应用](/tutorials/first-app/c01-start),或是阅读 [快速上手](/guides/get-started/quick-start)。
@@ -91,23 +91,15 @@ $ pnpm run build
91
91
 
92
92
  > modern build
93
93
 
94
- info Create a production build...
95
-
96
- info File sizes after production build:
94
+ info Staring production build...
95
+ ready Client compiled in 50ms
96
+ info Production file sizes:
97
97
 
98
98
  File Size Gzipped
99
- dist/static/js/lib-corejs.ffeb7fb8.js 214.96 kB 67.23 kB
100
- dist/static/js/lib-react.09721b5c.js 152.61 kB 49.02 kB
101
- dist/static/js/218.102e2f39.js 85.45 kB 28.5 kB
102
- dist/static/js/lib-babel.a7bba875.js 11.93 kB 3.95 kB
103
- dist/html/main/index.html 5.84 kB 2.57 kB
104
- dist/static/js/main.3568a38e.js 3.57 kB 1.44 kB
105
- dist/static/css/async/304.c3c481a5.css 2.62 kB 874 B
106
- dist/asset-manifest.json 1.48 kB 349 B
107
- dist/static/js/async/304.c45706bc.js 1.4 kB 575 B
108
- dist/static/js/async/509.fcb06e14.js 283 B 230 B
109
-
110
- Client ✔ done in 3.57s
99
+ dist/static/js/lib-react.09721b5c.js 152.6 kB 49.0 kB
100
+ dist/html/main/index.html 5.8 kB 2.5 kB
101
+ dist/static/js/main.3568a38e.js 3.5 kB 1.4 kB
102
+ dist/static/css/main.03221f72.css 1.4 kB 741 B
111
103
  ```
112
104
 
113
105
  构建产物默认生成到 `dist/`,目录结构如下:
@@ -135,8 +127,7 @@ $ pnpm run serve
135
127
 
136
128
  > modern serve
137
129
 
138
- Starting the modern server...
139
- info App running at:
130
+ Starting production server...
140
131
 
141
132
  > Local: http://localhost:8080/
142
133
  > Network: http://192.168.0.1:8080/
@@ -0,0 +1,138 @@
1
+ ---
2
+ sidebar_position: 4
3
+ ---
4
+
5
+ # 技术栈
6
+
7
+ Modern.js 框架默认集成了一些社区中流行的库和开发工具。
8
+
9
+ 在这篇文档中,你可以了解到 Modern.js 框架涉及的主要技术栈,以及一些可选的库和工具。
10
+
11
+ ---
12
+
13
+ ## UI 库
14
+
15
+ Modern.js 使用 [React 18](https://react.dev/) 来构建用户界面,同时也兼容 React 17。
16
+
17
+ Modern.js 底层的 Builder 也支持构建 Vue 应用,如果你需要使用 Vue,可以参考[「构建 Vue 应用」](https://modernjs.dev/builder/guide/framework/vue3.html)。
18
+
19
+ ---
20
+
21
+ ## 路由
22
+
23
+ Modern.js 的路由基于 [React Router 6](https://reactrouter.com/en/main),同时也兼容 React Router 5。
24
+
25
+ Modern.js 支持约定式路由、自控式路由或其他路由方案,请参考[「路由方案」](/guides/basic-features/routes) 进行选择。
26
+
27
+ ---
28
+
29
+ ## 微前端
30
+
31
+ Modern.js 提供对 [Garfish](https://www.garfishjs.org/) 微前端框架开箱即用的支持。
32
+
33
+ 同时,我们也正在与 [Module Federation](https://webpack.js.org/concepts/module-federation/) 的作者 Zack Jackson 合作,以提供更完整的解决方案。
34
+
35
+ ---
36
+
37
+ ## 状态管理
38
+
39
+ Modern.js 可以与社区中任意的状态管理库搭配使用,比如 [Redux](https://redux.js.org/)、[Jotai](https://jotai.org/)、[Zustand](https://docs.pmnd.rs/zustand)、[Valtio](https://valtio.pmnd.rs/) 等。
40
+
41
+ Modern.js 也基于 Redux 封装了 Reduck 状态管理库,你可以参考 [「Reduck 状态管理」](/guides/topic-detail/model/quick-start)来使用。
42
+
43
+ ---
44
+
45
+ ## 包管理器
46
+
47
+ Modern.js 可以与社区中任意的包管理器搭配使用,比如 [npm](https://www.npmjs.com/package/npm)、[yarn](https://classic.yarnpkg.com/lang/en/)、[pnpm](https://pnpm.io/) 或 [Bun](https://bun.sh/)。
48
+
49
+ 我们推荐使用 pnpm 来获得更快的安装速度。
50
+
51
+ ---
52
+
53
+ ## 打包工具
54
+
55
+ Modern.js 使用 [Webpack 5](https://webpack.js.org/) 或 [Rspack](https://www.rspack.dev/) 来打包你的 Web 应用。
56
+
57
+ 默认使用的打包工具为 Webpack 5,你可以参考[「使用 Rspack」](/guides/advanced-features/rspack-start) 来切换到更快的 Rspack。
58
+
59
+ ---
60
+
61
+ ## 转译工具
62
+
63
+ Modern.js 使用 [Babel](https://babeljs.io/)、[SWC](https://swc.rs/) 或 [esbuild](https://esbuild.github.io/) 作为 JS 转译工具,将 TypeScript 或 JSX 转义为可以在浏览器上运行的 JavaScript 代码,并进行语法降级。
64
+
65
+ - 使用 Webpack 打包时,默认为 Babel,支持切换到 SWC 或 esbuild。
66
+ - 使用 Rspack 打包时,默认为 SWC,支持切换到 Babel。
67
+
68
+ ---
69
+
70
+ ## 压缩工具
71
+
72
+ 在生产环境构建时,Modern.js 使用 [Terser](https://github.com/terser/terser)、[SWC](https://swc.rs/) 或 [esbuild](https://esbuild.github.io/) 来压缩 JavaScript 代码,使用 [cssnano](https://cssnano.co/) 来压缩 CSS 代码。
73
+
74
+ - 使用 Webpack 打包时,默认使用 Terser 压缩 JS 代码,支持切换到 SWC 或 esbuild。
75
+ - 使用 Rspack 打包时,默认使用 SWC 压缩 JS 代码,暂不支持切换到其他工具。
76
+
77
+ ---
78
+
79
+ ## CSS 转换
80
+
81
+ Modern.js 使用 [PostCSS](https://postcss.org/) 来转换 CSS 代码,并默认开启 [autoprefixer](https://github.com/postcss/autoprefixer) 来补全 CSS 前缀。
82
+
83
+ Modern.js 支持[「启用 Tailwind CSS」](/guides/basic-features/css.html#使用-tailwind-css),并同时兼容 Tailwind CSS v2 和 v3 版本。
84
+
85
+ ---
86
+
87
+ ## CSS 预处理器
88
+
89
+ Modern.js 支持 [Sass](https://sass-lang.com/)、[Less](https://lesscss.org/) 和 [Stylus](https://stylus-lang.com/) 三种 CSS 预处理器:
90
+
91
+ - 默认支持 Sass 和 Less,开箱即用。
92
+ - 可选支持 Stylus,请参考[「Stylus 插件」](https://modernjs.dev/builder/plugins/plugin-stylus.html) 来使用。
93
+
94
+ ---
95
+
96
+ ## CSS Modules
97
+
98
+ Modern.js 对 [CSS Modules](https://github.com/css-modules/css-modules) 提供了开箱即用的支持,内部基于 [css-loader](https://www.npmjs.com/package/css-loader) 实现。
99
+
100
+ 请参考[「使用 CSS Modules」](https://modernjs.dev/builder/guide/basic/css-modules.html) 来使用。
101
+
102
+ ---
103
+
104
+ ## CSS-in-JS
105
+
106
+ Modern.js 支持使用 [styled-components](https://styled-components.com/),请参考[「使用 CSS-in-JS」](/guides/basic-features/css.html#使用-css-in-js) 来使用。
107
+
108
+ 如果你需要使用其他 CSS-in-JS 方案,可以自行集成到你的项目中。
109
+
110
+ ---
111
+
112
+ ## 测试框架
113
+
114
+ Modern.js 支持使用 [Jest](https://jestjs.io/) 进行单元测试或集成测试。该功能为可选功能,请参考[「使用 Jest 测试」](/guides/advanced-features/testing) 启用。
115
+
116
+ 如果你需要使用 [Vitest](https://vitest.dev/) 或其他测试框架,可以自行集成到你的项目中。
117
+
118
+ ---
119
+
120
+ ## 组件库
121
+
122
+ Modern.js 可以与社区中任意的 React 组件库搭配使用,比如 [MUI](https://mui.com/)、[Ant Design](https://ant.design/)、[Arco Design](https://github.com/arco-design/arco-design)、[Semi Design](https://semi.design/)、[Radix UI](https://www.radix-ui.com/) 等。
123
+
124
+ 同时,Modern.js 内置了对 Ant Design 和 Arco Design 的 [按需引入](/configure/app/source/transform-import) 支持。
125
+
126
+ ---
127
+
128
+ ## 组件开发
129
+
130
+ Modern.js 支持使用 [Storybook](https://storybook.js.org/) 来开发 UI 组件。该功能为可选功能,请参考[「使用 Storybook」](/guides/advanced-features/using-storybook) 启用。
131
+
132
+ ---
133
+
134
+ ## Node.js 框架
135
+
136
+ import TechStackNodeFramework from '@site-docs/components/tech-stack-node-framework';
137
+
138
+ <TechStackNodeFramework />
@@ -8,11 +8,13 @@ sidebar_position: 3
8
8
 
9
9
  Modern.js 提供了 `upgrade` 命令支持项目升级到最新的 Modern.js 版本。
10
10
 
11
- 在项目中执行 `pnpm run upgrade`:
11
+ 在项目中执行 `upgrade` 命令:
12
12
 
13
- ```bash
14
- $ pnpm run upgrade
13
+ import { PackageManagerTabs } from '@theme';
14
+
15
+ <PackageManagerTabs command="run upgrade" />
15
16
 
17
+ ```bash
16
18
  > modern upgrade
17
19
 
18
20
  [INFO] [项目类型]: Web 应用
@@ -22,11 +24,15 @@ $ pnpm run upgrade
22
24
 
23
25
  可以看到项目 `package.json` 中的依赖已经更改到最新。
24
26
 
27
+ :::tip
28
+ 如果项目的 package.json 中没有声明 upgrade 命令,你可以执行 `npx modern upgrade`,效果是等价的。
29
+ :::
30
+
25
31
  ## 指定版本升级
26
32
 
27
33
  Modern.js 所有的官方包目前都使用**统一版本号**进行发布。
28
34
 
29
- import ReleaseNote from "@site-docs/components/release-note"
35
+ import ReleaseNote from '@site-docs/components/release-note';
30
36
 
31
37
  <ReleaseNote />
32
38
 
@@ -23,7 +23,7 @@ sidebar_position: 2
23
23
 
24
24
  :::
25
25
 
26
- ### 模块工程方案
26
+ ### Modern.js Module
27
27
 
28
28
  #### 在根目录执行 change 命令
29
29
 
@@ -160,11 +160,11 @@ module.exports = {
160
160
  }
161
161
  ```
162
162
 
163
- ### 使用模块工程方案
163
+ ### 使用 Modern.js Module
164
164
 
165
- 自定义 changelog 还可以使用模块工程方案进行管理,提供通用方案。
165
+ 自定义 changelog 还可以使用 Modern.js Module 方案进行管理,提供通用方案。
166
166
 
167
- #### 使用 `npx @modern-js/create@latest` 创建模块工程方案
167
+ #### 使用 `npx @modern-js/create@latest` 创建 Modern.js Module
168
168
 
169
169
  ```md
170
170
  ? 请选择你想创建的工程类型:Npm 模块
@@ -191,11 +191,11 @@ commit 配置为 ./my-commit-config.js 即可:
191
191
  }
192
192
  ```
193
193
 
194
- ### 使用模块工程方案
194
+ ### 使用 Modern.js Module
195
195
 
196
- 自定义 commit 还可以使用模块工程方案进行管理,提供通用方案。
196
+ 自定义 commit 还可以使用 Modern.js Module 进行管理,提供通用方案。
197
197
 
198
- #### 使用 `npx @modern-js/create@latest` 创建模块工程方案
198
+ #### 使用 `npx @modern-js/create@latest` 创建 Modern.js Module
199
199
 
200
200
  ```md
201
201
  ? 请选择你想创建的工程类型:Npm 模块
@@ -204,11 +204,11 @@ pnpm run gen-release-note --custom ./scripts/my-release-note-config.js
204
204
 
205
205
  直接执行命令 `pnpm run gen-release-note` 即可。
206
206
 
207
- ### 使用模块工程方案
207
+ ### 使用 Modern.js Module
208
208
 
209
- custom 参数值还可以使用模块工程方案进行管理,提供通用方案。
209
+ custom 参数值还可以使用 Modern.js Module 进行管理,提供通用方案。
210
210
 
211
- #### 使用 `npx @modern-js/create@latest` 创建模块工程方案
211
+ #### 使用 `npx @modern-js/create@latest` 创建 Modern.js Module
212
212
 
213
213
  ```md
214
214
  ? 请选择你想创建的工程类型:Npm 模块
@@ -13,7 +13,7 @@ sidebar_position: 3
13
13
 
14
14
  :::
15
15
 
16
- ### 模块工程方案
16
+ ### Modern.js Module
17
17
 
18
18
  #### 在根目录执行 bump 命令
19
19
 
@@ -736,7 +736,7 @@ export const myPlugin = (): CliPlugin<AppTools> => ({
736
736
 
737
737
  :::
738
738
 
739
- 应用工程中的 Server 部分也支持了插件。其中的 Hook 将会提供一些特定阶段调用和特殊功能的 Hook。
739
+ Modern.js 工程中的 Server 部分也支持了插件。其中的 Hook 将会提供一些特定阶段调用和特殊功能的 Hook。
740
740
 
741
741
  ### `create`
742
742
 
@@ -36,13 +36,13 @@ const myPlugin = {
36
36
 
37
37
  ### 插件类型
38
38
 
39
- Modern-js 支持多种工程开发,如应用工程(app-tools), 模块工程(module-tools)等。
39
+ Modern.js 支持多种工程开发,如应用开发(Modern.js Framework), 模块开发(Modern.js Module)等。
40
40
 
41
- 为了兼顾不同工程开发的差异和通性,Modern-js 将插件如下图进行组织:
41
+ 为了兼顾不同工程开发的差异和通性,Modern.js 将插件如下图进行组织:
42
42
 
43
43
  ![plugin-relationship](https://lf3-static.bytednsdoc.com/obj/eden-cn/eeeh7uhbepxlpe/modern-website/plugin-relationship.jpg)
44
44
 
45
- 从图可以看出,Modern-js 将插件大致分为两类:
45
+ 从图可以看出,Modern.js 将插件大致分为两类:
46
46
 
47
47
  1. 通用插件: 插件只会包含一些基础的 Hooks
48
48
 
@@ -177,6 +177,8 @@ export const myPlugin = (): CliPlugin => ({
177
177
  });
178
178
  ```
179
179
 
180
+ 注意,只有当前插件的 setup 异步函数执行完毕,才会继续执行下一个插件的 setup 函数。因此,你需要避免在 setup 函数中进行耗时过长的异步操作,防止影响 CLI 启动性能。
181
+
180
182
  ## 添加插件
181
183
 
182
184
  自定义插件的使用方式可以查看:[plugins (框架插件)](/configure/app/plugins)。下面会介绍 Modern.js 中推荐的插件实现方法。
@@ -210,9 +212,9 @@ export default defineConfig({
210
212
 
211
213
  ### 在 npm 上发布插件
212
214
 
213
- 如果需要将 Modern.js 插件发布到 npm,推荐使用 Modern.js 中的模块工程方案来管理和构建。
215
+ 如果你需要将 Modern.js 插件发布到 npm,推荐使用 [Modern.js Module](https://modernjs.dev/module-tools) 来管理和构建。
214
216
 
215
- 首先创建一个空的模块工程方案项目,调整 npm 包名称:
217
+ 首先创建一个空的 Modern.js Module 项目,调整 npm 包名称:
216
218
 
217
219
  ```json
218
220
  {
@@ -48,14 +48,6 @@ npx @modern-js/create@latest npm-module
48
48
  ? 请选择包管理工具 pnpm
49
49
  ```
50
50
 
51
- ### 创建文档站项目
52
-
53
- ```bash
54
- npx @modern-js/create@latest doc-website
55
- ? 请选择你想创建的工程类型 文档站
56
- ? 请选择包管理工具 pnpm
57
- ```
58
-
59
51
  ### 创建 Monorepo
60
52
 
61
53
  ```bash
@@ -26,7 +26,7 @@ export default function (context: IPluginContext) {
26
26
 
27
27
  ## 自定义 Input
28
28
 
29
- Modern.js Web 应用和 Npm 模块工程方案都存在一些默认的 Input 交互,使用这里的 API 可以对这些 Input 进行添加、修改、隐藏、提供默认值等操作。
29
+ Modern.js Framework Modern.js Module 都存在一些默认的 Input 交互,使用这里的 API 可以对这些 Input 进行添加、修改、隐藏、提供默认值等操作。
30
30
 
31
31
  例如:
32
32