@modern-js/main-doc 2.46.1 → 2.47.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 (32) hide show
  1. package/docs/en/apis/app/commands.mdx +9 -9
  2. package/docs/en/configure/app/auto-load-plugin.mdx +3 -3
  3. package/docs/en/configure/app/builder-plugins.mdx +13 -13
  4. package/docs/en/configure/app/output/disable-node-polyfill.mdx +1 -1
  5. package/docs/en/configure/app/source/enable-async-entry.mdx +1 -1
  6. package/docs/en/guides/advanced-features/compatibility.mdx +1 -1
  7. package/docs/en/guides/advanced-features/optimize-bundle.mdx +7 -7
  8. package/docs/en/guides/advanced-features/rsbuild-plugin.mdx +51 -0
  9. package/docs/en/guides/advanced-features/rspack-start.mdx +1 -3
  10. package/docs/en/guides/advanced-features/using-storybook.mdx +202 -20
  11. package/docs/en/guides/basic-features/css.mdx +2 -2
  12. package/docs/en/guides/concept/builder.mdx +23 -25
  13. package/docs/en/guides/get-started/tech-stack.mdx +1 -1
  14. package/docs/en/guides/topic-detail/framework-plugin/introduction.mdx +1 -1
  15. package/docs/en/guides/topic-detail/micro-frontend/c02-development.mdx +35 -4
  16. package/docs/zh/apis/app/commands.mdx +9 -9
  17. package/docs/zh/configure/app/auto-load-plugin.mdx +3 -3
  18. package/docs/zh/configure/app/builder-plugins.mdx +14 -14
  19. package/docs/zh/configure/app/output/disable-node-polyfill.mdx +1 -1
  20. package/docs/zh/guides/advanced-features/compatibility.mdx +1 -1
  21. package/docs/zh/guides/advanced-features/optimize-bundle.mdx +8 -8
  22. package/docs/zh/guides/advanced-features/rsbuild-plugin.mdx +51 -0
  23. package/docs/zh/guides/advanced-features/rspack-start.mdx +1 -1
  24. package/docs/zh/guides/advanced-features/using-storybook.mdx +204 -21
  25. package/docs/zh/guides/basic-features/css.mdx +2 -2
  26. package/docs/zh/guides/concept/builder.mdx +20 -22
  27. package/docs/zh/guides/get-started/tech-stack.mdx +1 -1
  28. package/docs/zh/guides/topic-detail/framework-plugin/introduction.mdx +1 -1
  29. package/docs/zh/guides/topic-detail/micro-frontend/c02-development.mdx +35 -6
  30. package/package.json +7 -7
  31. package/docs/en/configure/app/source/compile-js-data-uri.mdx +0 -9
  32. package/docs/zh/configure/app/source/compile-js-data-uri.mdx +0 -9
@@ -89,7 +89,7 @@ Modern.js supports enabling ["Tailwind CSS"](/en/guides/basic-features/css.html#
89
89
  Modern.js supports three CSS preprocessors: [Sass](https://sass-lang.com/), [Less](https://lesscss.org/), and [Stylus](https://stylus-lang.com/):
90
90
 
91
91
  - Sass and Less are supported by default and ready to use.
92
- - Stylus is optional and can be used by referring to the ["Stylus Plugin"](https://modernjs.dev/builder/en/plugins/plugin-stylus.html).
92
+ - Stylus is optional and can be used by referring to the ["Stylus Plugin"](https://rsbuild.dev/plugins/list/plugin-stylus).
93
93
 
94
94
  ---
95
95
 
@@ -10,7 +10,7 @@ Modern.js offers a comprehensive plugin system with a complete lifecycle. Plugin
10
10
 
11
11
  ## Usage
12
12
 
13
- Plugins must be explicitly registered in the configuration file to be effective. When you need to add plugins to Modern.js, you can configure them in the `[plugin](/configure/app/plugins.html)` field:
13
+ Plugins must be explicitly registered in the configuration file to be effective. When you need to add plugins to Modern.js, you can configure them in the `[plugins](/configure/app/plugins.html)` field:
14
14
 
15
15
  ```ts title="edenx.config.ts"
16
16
  // an example for bff
@@ -12,14 +12,15 @@ Through this chapter you can learn:
12
12
 
13
13
  ## Create an app
14
14
 
15
- Currently supports two routing modes
15
+ The routing modes of the current project are divided into the following three types:
16
16
 
17
- - Self-controlled routing
18
- - Conventional routing
17
+ - File-based routing (`router: true` and file-based)
18
+ - Self-Controlled routing (`router: true` and create `BrowserRouter`)
19
+ - Other (`router: false` and independent installation of `react-router-dom` in the project)
19
20
 
20
21
  First, clarify the routing mode of the main application [create a file-based routing main App](#file-based-routing-main-app) or [create a self-controlled main App](#self-controlled-main-app)
21
22
 
22
- In this experience we will create two sub-applications Table and Dashboard for the main application (Table is reduced routing, Dashboard is self-controlled routing)
23
+ In this tutorial we will create two sub-applications Table and Dashboard for the main application (Table is reduced routing, Dashboard is self-controlled routing)
23
24
 
24
25
  ### File-based Routing Main App
25
26
 
@@ -139,6 +140,36 @@ import CustomRouterMicroFrontend from '@site-docs-en/components/custom-router-mi
139
140
 
140
141
  <CustomRouterMicroFrontend />
141
142
 
143
+ ### Other Main App
144
+
145
+ Install and use `react-router-dom` independently in the project. The only difference from self-controlled routing is that after setting `router: false`, plugin-garfish cannot obtain `useLocation`, `useHref` and other hooks to assist in calculating basename and main and child applications. Route synchronization
146
+
147
+ import { Tab, Tabs } from 'rspress/theme';
148
+
149
+ <Tabs>
150
+ <Tab label="react-router-dom@6">
151
+ ```tsx
152
+ import { useLocation, useHref } from 'react-router-dom';
153
+ const App = () => {
154
+ const basename = useHref('/table');
155
+ const { Table } = useModuleApps();
156
+ return <Table useLocation={useLocation} basename={basename} />;
157
+ };
158
+ ```
159
+ </Tab>
160
+ <Tab label="react-router-dom@5">
161
+ ```tsx
162
+ import { useLocation, useHistory } from 'react-router-dom';
163
+ const App = () => {
164
+ const history = useHistory();
165
+ const basename = history.createHref({ pathname: '/table' });
166
+ const { Table } = useModuleApps();
167
+ return <Table useLocation={useLocation} basename={basename} />;
168
+ };
169
+ ```
170
+ </Tab>
171
+ </Tabs>
172
+
142
173
  ### File-based sub-app
143
174
 
144
175
  Initialize the project with a command line:
@@ -195,7 +195,7 @@ Options:
195
195
 
196
196
  ## modern inspect
197
197
 
198
- `modern inspect` 命令用于查看项目的 [Modern.js Builder 配置](https://modernjs.dev/builder/guide/basic/builder-config.html) 以及 webpack 配置。
198
+ `modern inspect` 命令用于查看项目的 [Rsbuild 配置](https://rsbuild.dev/zh/config/index) 以及 webpack 或 Rspack 配置。
199
199
 
200
200
  ```bash
201
201
  Usage: modern inspect [options]
@@ -210,16 +210,16 @@ Options:
210
210
 
211
211
  在项目根目录下执行命令 `npx modern inspect` 后,会在项目的 `dist` 目录生成以下文件:
212
212
 
213
- - `builder.config.js`: 表示在构建时使用的 Modern.js Builder 配置。
214
- - `webpack.config.web.js`: 表示在构建时使用的 webpack 配置。
213
+ - `rsbuild.config.mjs`: 表示在构建时使用的 Rsbuild 配置。
214
+ - `webpack.config.web.mjs`: 表示在构建时使用的 webpack 配置。
215
215
 
216
216
  ```bash
217
217
  ➜ npx modern inspect
218
218
 
219
219
  Inspect config succeed, open following files to view the content:
220
220
 
221
- - Builder Config: /root/my-project/dist/builder.config.js
222
- - Webpack Config (web): /root/my-project/dist/webpack.config.web.js
221
+ - Rsbuild Config: /root/my-project/dist/rsbuild.config.mjs
222
+ - Webpack Config (web): /root/my-project/dist/webpack.config.web.mjs
223
223
  ```
224
224
 
225
225
  ### 指定环境
@@ -240,16 +240,16 @@ modern inspect --verbose
240
240
 
241
241
  ### SSR 构建配置
242
242
 
243
- 如果项目开启了 SSR 能力,则在 `dist` 目录会另外生成一份 `webpack.config.node.js` 文件,对应 SSR 构建时的 webpack 配置。
243
+ 如果项目开启了 SSR 能力,则在 `dist` 目录会另外生成一份 `webpack.config.node.mjs` 文件,对应 SSR 构建时的 webpack 配置。
244
244
 
245
245
  ```bash
246
246
  ➜ npx modern inspect
247
247
 
248
248
  Inspect config succeed, open following files to view the content:
249
249
 
250
- - Builder Config: /root/my-project/dist/builder.config.js
251
- - Webpack Config (web): /root/my-project/dist/webpack.config.web.js
252
- - Webpack Config (node): /root/my-project/dist/webpack.config.node.js
250
+ - Rsbuild Config: /root/my-project/dist/rsbuild.config.mjs
251
+ - Webpack Config (web): /root/my-project/dist/webpack.config.web.mjs
252
+ - Webpack Config (node): /root/my-project/dist/webpack.config.node.mjs
253
253
  ```
254
254
 
255
255
  ## modern lint
@@ -39,14 +39,14 @@ Modern.js 将通过以下几个步骤帮你自动注册插件
39
39
  1. Modern.js 在内部维护一份官方插件列表。
40
40
 
41
41
  ```js
42
- const InternalPlugins = ['@modern-js/app-tools', '@modern-js/plugin-i18n', ...];
42
+ const InternalPlugins = ['@modern-js/app-tools', '@modern-js/plugin-tailwindcss', ...];
43
43
  ```
44
44
 
45
45
  2. Modern.js 将读取你的 `package.json` 文件,收集依赖信息。
46
46
 
47
47
  ```json title="package.json"
48
48
  "dependencies": {
49
- "@modern-js/plugin-i18n": "x.x.x"
49
+ "@modern-js/plugin-tailwindcss": "x.x.x"
50
50
  ...
51
51
  },
52
52
  "devDependencies": {
@@ -55,7 +55,7 @@ const InternalPlugins = ['@modern-js/app-tools', '@modern-js/plugin-i18n', ...];
55
55
  }
56
56
  ```
57
57
 
58
- 3. Modern.js 观察到你安装了 `@modern-js/plugin-i18n` 和 `@modern-js/app-tools` 等依赖后,将会引入插件自动注册。
58
+ 3. Modern.js 观察到你安装了 `@modern-js/plugin-tailwindcss` 和 `@modern-js/app-tools` 等依赖后,将会引入插件自动注册。
59
59
 
60
60
  可以注意到这种方式相对黑盒,你甚至对加载插件的过程是无感知的。我们希望更多的细节暴露给开发者,能让开发者去控制这一过程。
61
61
 
@@ -4,18 +4,18 @@ sidebar_position: 21
4
4
 
5
5
  # builderPlugins 构建插件
6
6
 
7
- - **类型:** `BuilderPlugin[]`
7
+ - **类型:** `RsbuildPlugin[]`
8
8
  - **默认值:** `[]`
9
9
 
10
- 用于配置 Modern.js Builder 构建插件。
10
+ 用于配置 Rsbuild 构建插件。
11
11
 
12
- Modern.js Builder 是 Modern.js 底层的构建工具,请阅读 [构建能力](/guides/concept/builder) 了解相关背景。
12
+ Rsbuild 是 Modern.js 底层的构建工具,请阅读 [构建能力](/guides/concept/builder) 了解相关背景。
13
13
 
14
- 如果你想了解 Builder 插件的编写方式,可以参考 [Modern.js Builder - 插件系统](https://modernjs.dev/builder/plugins/introduction.html)。
14
+ 如果你想了解 Rsbuild 插件的编写方式,可以参考 [Rsbuild - 插件系统](https://rsbuild.dev/zh/plugins/dev/index)。
15
15
 
16
16
  ## 注意事项
17
17
 
18
- 该选项**用于配置 Modern.js Builder 构建插件**,如果你需要配置其他类型的插件,请选择对应的配置方式:
18
+ 该选项**用于配置 Rsbuild 构建插件**,如果你需要配置其他类型的插件,请选择对应的配置方式:
19
19
 
20
20
  - 配置 Modern.js 框架插件,请使用 [plugins](/configure/app/plugins) 配置项。
21
21
  - 配置 Rspack 或 webpack 插件,请使用 [tools.bundlerChain](/configure/app/tools/bundler-chain) 配置项。
@@ -23,23 +23,23 @@ Modern.js Builder 是 Modern.js 底层的构建工具,请阅读 [构建能力]
23
23
 
24
24
  ## 何时使用
25
25
 
26
- 大部分场景下,我们推荐你使用 Modern.js 框架插件,框架插件可以通过 [plugins](/configure/app/plugins) 字段进行注册。因为框架插件提供的 API 更丰富、能力更强,而 Builder 插件提供的 API 只能用于构建场景。
26
+ 大部分场景下,我们推荐你使用 Modern.js 框架插件,框架插件可以通过 [plugins](/configure/app/plugins) 字段进行注册。因为框架插件提供的 API 更丰富、能力更强,而 Rsbuild 插件提供的 API 只能用于构建场景。
27
27
 
28
- 当你需要引用一些现有的 Builder 插件(并且在 Modern.js 中没有相关能力),或是在不同的框架之间复用 Builder 插件时,你可以使用 `builderPlugins` 字段进行注册。
28
+ 当你需要引用一些现有的 Rsbuild 插件(并且在 Modern.js 中没有相关能力),或是在不同的框架之间复用 Rsbuild 插件时,你可以使用 `builderPlugins` 字段进行注册。
29
29
 
30
30
  ## 示例
31
31
 
32
- 下面是 Builder 插件的使用示例。
32
+ 下面是 Rsbuild 插件的使用示例。
33
33
 
34
34
  ### 使用 npm 上的插件
35
35
 
36
36
  使用 npm 上的插件,需要通过包管理器安装插件,并通过 import 引入。
37
37
 
38
38
  ```ts title="modern.config.ts"
39
- import { myBuilderPlugin } from 'my-builder-plugin';
39
+ import { myRsbuildPlugin } from 'my-rsbuild-plugin';
40
40
 
41
41
  export default defineConfig({
42
- builderPlugins: [myBuilderPlugin()],
42
+ builderPlugins: [myRsbuildPlugin()],
43
43
  });
44
44
  ```
45
45
 
@@ -48,10 +48,10 @@ export default defineConfig({
48
48
  使用本地代码仓库中的插件,直接通过相对路径 import 引入即可。
49
49
 
50
50
  ```ts title="modern.config.ts"
51
- import { myBuilderPlugin } from './plugin/myBuilderPlugin';
51
+ import { myRsbuildPlugin } from './plugin/myRsbuildPlugin';
52
52
 
53
53
  export default defineConfig({
54
- builderPlugins: [myBuilderPlugin()],
54
+ builderPlugins: [myRsbuildPlugin()],
55
55
  });
56
56
  ```
57
57
 
@@ -60,11 +60,11 @@ export default defineConfig({
60
60
  如果插件提供了一些自定义的配置项,可以通过插件函数的参数传入配置。
61
61
 
62
62
  ```ts title="modern.config.ts"
63
- import { myBuilderPlugin } from 'my-builder-plugin';
63
+ import { myRsbuildPlugin } from 'my-rsbuild-plugin';
64
64
 
65
65
  export default defineConfig({
66
66
  builderPlugins: [
67
- myBuilderPlugin({
67
+ myRsbuildPlugin({
68
68
  foo: 1,
69
69
  bar: 2,
70
70
  }),
@@ -19,4 +19,4 @@ export default defineConfig({
19
19
  });
20
20
  ```
21
21
 
22
- 该配置项基于 Modern.js Builder 的 Node Polyfill 插件实现,你可以阅读 [Modern.js Builder - Node Polyfill 插件](https://modernjs.dev/builder/plugins/plugin-node-polyfill.html) 文档来了解详细信息。
22
+ 该配置项基于 Rsbuild 的 Node Polyfill 插件实现,你可以阅读 [Rsbuild - Node Polyfill 插件](https://rsbuild.dev/zh/plugins/list/plugin-node-polyfill) 文档来了解详细信息。
@@ -19,7 +19,7 @@ ios_saf >= 10
19
19
  ```
20
20
 
21
21
  :::tip
22
- 请查看 [Modern.js Builder - 设置浏览器范围](https://modernjs.dev/builder/guide/advanced/browserslist) 来了解更多内容。
22
+ 请查看 [Rsbuild - 设置浏览器范围](https://rsbuild.dev/zh/guide/advanced/browserslist) 来了解更多内容。
23
23
  :::
24
24
 
25
25
  ## Polyfill
@@ -44,9 +44,9 @@ BUNDLE_ANALYZE=true pnpm build
44
44
 
45
45
  ## 提升 Browserslist 范围
46
46
 
47
- Builder 会根据项目的 Browserslist 配置范围进行代码编译,并注入相应的 Polyfill。如果项目不需要兼容旧版浏览器,可以根据实际情况来提升 Browserslist 范围,从而减少在语法和 Polyfill 上的编译开销。
47
+ Modern.js 会根据项目的 Browserslist 配置范围进行代码编译,并注入相应的 Polyfill。如果项目不需要兼容旧版浏览器,可以根据实际情况来提升 Browserslist 范围,从而减少在语法和 Polyfill 上的编译开销。
48
48
 
49
- Builder 默认的 Browserslist 配置为:
49
+ Modern.js 默认的 Browserslist 配置为:
50
50
 
51
51
  ```js
52
52
  ['> 0.01%', 'not dead', 'not op_mini all'];
@@ -59,14 +59,14 @@ Builder 默认的 Browserslist 配置为:
59
59
  ```
60
60
 
61
61
  :::tip
62
- 请阅读 [设置浏览器范围](https://modernjs.dev/builder/guide/advanced/browserslist.html) 章节来了解更多关于 Browserslist 的用法。
62
+ 请阅读 [设置浏览器范围](https://rsbuild.dev/zh/guide/advanced/browserslist) 章节来了解更多关于 Browserslist 的用法。
63
63
  :::
64
64
 
65
65
  ## 按需引入 polyfill
66
66
 
67
67
  在明确第三方依赖不需要额外 polyfill 的情况下,你可以将 [output.polyfill](/configure/app/output/polyfill.html) 设置为 `usage`。
68
68
 
69
- 在 `usage` 模式下,Builder 会分析源代码中使用的语法,按需注入所需的 polyfill 代码,从而减少 polyfill 的代码量。
69
+ 在 `usage` 模式下,Modern.js 会分析源代码中使用的语法,按需注入所需的 polyfill 代码,从而减少 polyfill 的代码量。
70
70
 
71
71
  ```js
72
72
  export default {
@@ -85,20 +85,20 @@ export default {
85
85
  在一般的前端项目中,图片资源的体积往往是项目产物体积的大头,因此如果能尽可能精简图片的体积,那么将会对项目的打包产物体积起到明显的优化效果。你可以在 Modern.js 中注册插件来启用图片压缩功能:
86
86
 
87
87
  ```js title="modern.config.ts"
88
- import { builderPluginImageCompress } from '@modern-js/builder-plugin-image-compress';
88
+ import { pluginImageCompress } from '@rsbuild/plugin-image-compress';
89
89
 
90
90
  export default {
91
- builderPlugins: [builderPluginImageCompress()],
91
+ builderPlugins: [pluginImageCompress()],
92
92
  };
93
93
  ```
94
94
 
95
- 详见 [Image Compress 插件](https://modernjs.dev/builder/plugins/plugin-image-compress.html)。
95
+ 详见 [Image Compress 插件](https://rsbuild.dev/zh/plugins/list/plugin-image-compress)。
96
96
 
97
97
  ## 代码拆包
98
98
 
99
99
  良好的拆包策略对于提升应用的加载性能是十分重要的,可以充分利用浏览器的缓存机制,减少请求数量,加快页面加载速度。
100
100
 
101
- 在 Modern.js 中内置了[多种拆包策略](https://modernjs.dev/builder/guide/optimization/split-chunk),可以满足大部分应用的需求,你也可以根据自己的业务场景,自定义拆包配置。
101
+ 在 Modern.js 中内置了[多种拆包策略](https://rsbuild.dev/zh/guide/optimization/split-chunk),可以满足大部分应用的需求,你也可以根据自己的业务场景,自定义拆包配置。
102
102
 
103
103
  比如将 node_modules 下的 `axios` 库拆分到 `axios.js` 中:
104
104
 
@@ -0,0 +1,51 @@
1
+ ---
2
+ sidebar_position: 21
3
+ title: 使用 Rsbuild 插件
4
+ ---
5
+
6
+ # 使用 Rsbuild 插件
7
+
8
+ ## 插件介绍
9
+
10
+ Rsbuild 是 Modern.js 底层的构建工具,可通过添加 Rsbuild 插件修改默认的构建行为并添加各类额外功能,包括但不限于:
11
+
12
+ - 修改 Rsbuild 配置
13
+ - 处理新的文件类型
14
+ - 修改或编译文件
15
+ - 部署产物
16
+
17
+ 你可以在 `modern.config.ts` 中通过 `builderPlugins` 选项来注册 Rsbuild 插件,详见 [builderPlugins 构建插件](/configure/app/builder-plugins.html)。
18
+
19
+ ## 官方插件
20
+
21
+ :::tip
22
+ Rsbuild 中大部分插件已内置在 Modern.js 中,如:需要注入 Node 模块的 Polyfill 时,可直接使用 [output.disableNodePolyfill](/configure/app/output/disable-node-polyfill.html) 配置项。
23
+ :::
24
+
25
+ ### 内置插件
26
+
27
+ 以下是已在 Modern.js 中内置的 Rsbuild 官方插件:
28
+
29
+ | 插件 | 介绍 | Modern.js 链接 |
30
+ | -------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
31
+ | [React 插件](https://rsbuild.dev/zh/plugins/list/plugin-react) | 提供对 React 的支持 | - |
32
+ | [SVGR 插件](https://rsbuild.dev/zh/plugins/list/plugin-svgr) | 支持将 SVG 图片转换为一个 React 组件使用 | [output.disableSvgr](/configure/app/output/disable-svgr)<br />[output.svgDefaultExport](/configure/app/output/svg-default-export) |
33
+ | [Styled Components 插件](https://rsbuild.dev/zh/plugins/list/plugin-styled-components) | 提供对 styled-components 的编译时支持 | [tools.styledComponents](/configure/app/tools/styled-components.html) |
34
+ | [Assets Retry 插件](https://rsbuild.dev/zh/plugins/list/plugin-assets-retry) | 用于在静态资源加载失败时自动发起重试请求 | [output.assetsRetry](/configure/app/output/assets-retry.html) |
35
+ | [Type Check 插件](https://rsbuild.dev/zh/plugins/list/plugin-type-check) | 用于在单独的进程中运行 TypeScript 类型检查 | [output.disableTsChecker](/configure/app/output/disable-ts-checker.html)<br />[tools.tsChecker](/configure/app/tools/ts-checker.html) |
36
+ | [Node Polyfill 插件](https://rsbuild.dev/zh/plugins/list/plugin-node-polyfill) | 用于注入 Node 核心模块在浏览器端的 polyfills | [output.disableNodePolyfill](/configure/app/output/disable-node-polyfill.html) |
37
+ | [Source Build 插件](https://rsbuild.dev/zh/plugins/list/plugin-source-build) | 用于 monorepo 场景,支持引用其他子目录的源代码,并完成构建和热更新 | [experiments.sourceBuild](/configure/app/experiments/source-build.html) |
38
+ | [Check Syntax 插件](https://rsbuild.dev/zh/plugins/list/plugin-check-syntax) | 用于分析产物的语法兼容性,判断是否存在导致兼容性问题的高级语法 | [security.checkSyntax](/configure/app/security/check-syntax.html) |
39
+ | [CSS Minimizer 插件](https://rsbuild.dev/zh/plugins/list/plugin-css-minimizer) | 用于自定义 CSS 压缩工具,切换到 [cssnano](https://cssnano.co/) 或其他工具进行 CSS 压缩。 | [tools.minifyCss](/configure/app/tools/minify-css.html) |
40
+ | [Pug 插件](https://rsbuild.dev/zh/plugins/list/plugin-pug) | 提供对 Pug 模板引擎的支持 | [tools.pug](/configure/app/tools/pug.html) |
41
+ | [Rem 插件](https://rsbuild.dev/zh/plugins/list/plugin-rem) | 用于实现移动端页面的 rem 自适应布局 | [output.convertToRem](/configure/app/output/convert-to-rem.html) |
42
+ | [YAML 插件](https://rsbuild.dev/zh/plugins/list/plugin-yaml) | 用于引用 YAML 文件,并将其转换为 JavaScript 对象 | [TOML 文件](/guides/basic-features/json-files.html#toml-文件) |
43
+ | [TOML 插件](https://rsbuild.dev/zh/plugins/list/plugin-toml) | 用于引用 TOML 文件,并将其转换为 JavaScript 对象 | [YAML 文件](/guides/basic-features/json-files.html#yaml-文件) |
44
+
45
+ ### 未内置插件
46
+
47
+ 以下是未在 Modern.js 中内置的 Rsbuild 官方插件:
48
+
49
+ - [Image Compress 插件](https://rsbuild.dev/zh/plugins/list/plugin-image-compress):将项目中用到的图片资源进行压缩处理。
50
+ - [Stylus 插件](https://rsbuild.dev/zh/plugins/list/plugin-stylus):使用 Stylus 作为 CSS 预处理器。
51
+ - [UMD 插件](https://rsbuild.dev/zh/plugins/list/plugin-umd):用于构建 UMD 格式的产物。
@@ -60,7 +60,7 @@ Modern.js 中 [tools.webpack](/configure/app/tools/webpack) 和 [tools.webpackCh
60
60
  ```diff
61
61
  export default {
62
62
  tools: {
63
- - webppack: (config, { env }) => {
63
+ - webpack: (config, { env }) => {
64
64
  + rspack: (config, { env }) => {
65
65
  if (env === 'development') {
66
66
  config.devtool = 'cheap-module-eval-source-map';
@@ -2,12 +2,7 @@
2
2
  sidebar_position: 15
3
3
  ---
4
4
 
5
- # 使用 StorybookV6
6
-
7
- :::warning
8
- 该教程是用于老版本 StorybookV6 用户,并且会在以后弃用,想要从旧版本插件升级或新用户想要尝试请查看[新文档](https://modernjs.dev/builder/guide/advanced/storybook.html)
9
- :::
10
-
5
+ # 使用 Storybook
11
6
 
12
7
  [Storybook](https://storybook.js.org/) 是一个专门用于组件调试的工具,它围绕着组件开发提供了:
13
8
 
@@ -17,33 +12,221 @@ sidebar_position: 15
17
12
  - 可分享能力
18
13
  - 工作流程自动化
19
14
 
20
- ## 开启 Storybook 调试
15
+ :::tip
16
+ 本教程适用于新版 Storybook V7 用户,如果你在使用老版本 Storybook V6 (有使用 @modern-js/plugin-storybook 插件),可参考 [迁移指南](#迁移指南) 进行升级。
17
+ :::
21
18
 
22
- Modern.js 默认集成了 Storybook 的调试能力。
19
+ ## 快速开始
23
20
 
24
- 当我们想要对组件进行调试的时候,可以通过 `pnpm run new` 启用 Storybook 调试功能。
21
+ Modern.js 默认集成了 Storybook 的调试能力,当我们想要对组件进行调试的时候,可以通过以下方式启用 Storybook 调试功能:
25
22
 
26
23
  ```bash
27
24
  $ npx modern new
28
25
  ? 请选择你想要的操作 启用可选功能
29
- ? 请选择功能名称 启用「Visual Testing (Storybook)」模式
26
+ ? 请选择功能名称 启用「Storybook」V7
27
+ ```
28
+
29
+ 该命令会创建好 Storybook 常用的模版,包括:
30
+
31
+ - 创建配置文件夹 `.storybook`,以及默认配置文件 `.storybook/main.ts`
32
+ - 创建 stories 组件示例
33
+ - 更新 package.json,新增依赖 @storybook/addon-essential 和 @modern-js/storybook,以及创建 storybook 相关脚本
34
+
35
+ 运行 `npm run storybook` 即可启动 Storybook 预览。
36
+
37
+ ## 开启 Rspack 构建
38
+
39
+ Rspack 构建速度非常快,在 Modern.js 中只需要如下配置即可使用 Rspack 作为构建工具。
40
+
41
+ ```diff filename='.storybook/main.js'
42
+ const config = {
43
+ framework: {
44
+ name: '@modern-js/storybook',
45
+ options: {
46
+ - bundler: 'webpack'
47
+ + bundler: 'rspack'
48
+ },
49
+ },
50
+ typescript: {
51
+ - reactDocgen: 'react-docgen-typescript'
52
+ + reactDocgen: 'react-docgen'
53
+ }
54
+ };
55
+
56
+ export default config;
57
+ ```
58
+
59
+ 注意上面配置中,更改了 reactDocgen 配置,因为 Rspack 目前还不支持 @storybook/react-docgen-typescript-plugin。
60
+
61
+ ## 配置
62
+
63
+ 在 `.storybook/main.js` 中包含一些配置。
64
+
65
+ ### configPath
66
+
67
+ - **类型**: `string`
68
+ - **默认值**: `modern.config.(j|t)s`
69
+
70
+ 用于指定配置文件路径。
71
+
72
+ 例如
73
+
74
+ ```javascript filename='.storybook/main.js'
75
+ const config = {
76
+ framework: {
77
+ name: '@modern-js/storybook',
78
+ options: {
79
+ configPath: 'modern.storybook.config.ts',
80
+ },
81
+ },
82
+ };
83
+
84
+ export default config;
85
+ ```
86
+
87
+ ### bundler
88
+
89
+ - **类型**: `'webpack' | 'rspack'`
90
+ - **默认值**: `webpack`
91
+
92
+ 指定底层构建工具使用 Webpack 还是 Rspack。
93
+
94
+ 例如
95
+
96
+ ```javascript filename='.storybook/main.js'
97
+ const config = {
98
+ framework: {
99
+ name: '@modern-js/storybook',
100
+ options: {
101
+ bundler: 'rspack',
102
+ },
103
+ },
104
+ };
105
+
106
+ export default config;
107
+ ```
108
+
109
+ ### builderConfig
110
+
111
+ - **类型**: `BuilderConfig`
112
+ - **默认值**: `undefined`
113
+
114
+ 更改构建配置,该配置比配置文件拥有更高的优先级,若不想使用配置文件,也可直接在此处指定。
115
+
116
+ 例如
117
+
118
+ ```javascript filename='.storybook/main.js'
119
+ const config = {
120
+ framework: {
121
+ name: '@modern-js/storybook',
122
+ options: {
123
+ builderConfig: {
124
+ alias: {
125
+ react: require.resolve('react'),
126
+ 'react-dom': require.resolve('react-dom'),
127
+ },
128
+ },
129
+ },
130
+ },
131
+ };
132
+
133
+ export default config;
30
134
  ```
31
135
 
32
- 执行完成后,你只需在 `modern.config.ts` 文件中注册 Modern.js 的 Storybook 插件,即可启用 Storybook 调试能力。
136
+ ## 命令行
137
+
138
+ @modern-js/storybook 代理了部分 storybook cli 的命令。
139
+
140
+ ### storybook dev
141
+
142
+ 启动 Storybook,详情请看 [storybook#dev](https://storybook.js.org/docs/react/api/cli-options#dev)
143
+
144
+ ### storybook build
145
+
146
+ 对 Storybook 进行生产环境构建,详情请看 [storybook#build](https://storybook.js.org/docs/react/api/cli-options#build)
147
+
148
+ ## Storybook addon 兼容性
149
+
150
+ 由于当前文档中的 Storybook 版本为 7,因此请选择 storybook V7 的 addon。
151
+
152
+ 当 addon 不需要额外的 Babel 或 Webpack 配置时,可以直接使用,如 @storybook/addon-essentials。
33
153
 
34
- ```ts title="modern.config.ts"
35
- import { appTools, defineConfig } from '@modern-js/app-tools';
36
- import { storybookPlugin } from '@modern-js/plugin-storybook';
154
+ 部分 addon 需要依赖 babel 插件和 Webpack 配置时,如 @storybook/addon-coverage,只有使用 webpack 构建才会支持。
37
155
 
38
- export default defineConfig({
39
- plugins: [appTools(), storybookPlugin()],
40
- });
156
+ ## 收益
157
+
158
+ 使用 @modern-js/storybook 可以带给你 Rspack 超快的构建,并且完全无需繁琐配置,开箱即用。并且默认包含了许多 Web 构建中的最佳实践,例如 code splitting 策略,内置 css module 和 postcss,开箱即用的 TypeScript 支持,内置常用 Babel 插件等等。
159
+
160
+ Modern.js 的构建能力和配置都可以直接在 Storybook 项目中使用。
161
+
162
+ ## Trouble Shooting
163
+
164
+ 1. 使用 Modern.js 启动 storybook 时不会读取 babel.config.json 等配置文件,因此 babel 配置需要在 [tools.babel](/configure/app/tools/babel) 中进行配置。
165
+ 同样的 webpack 配置需要写在 [tools.webpack](/configure/app/tools/webpack) 或 [tools.webpackChain](/configure/app/tools/webpack-chain) 中。
166
+
167
+ 2. 如果发现构建速度很慢,请检查是否开启了自动文档生成功能,如果想要最高的性能,请配置为 `react-docgen`。`react-docgen` 和 `react-docgen-typescript` 的区别是,前者基于 Babel 实现,后者基于 TypeScript 实现,前者性能会更好,但类型推断能力更弱。如果使用 Rspack 构建,则只支持 `react-docgen`。
168
+
169
+ ```javascript filename='.storybook/main.js'
170
+ const config = {
171
+ typescript: {
172
+ reactDocgen: 'react-docgen',
173
+ },
174
+ };
175
+
176
+ export default config;
41
177
  ```
42
178
 
43
- ## 调试代码
179
+ ## 迁移指南
180
+
181
+ ### 从 Modern.js Storybook V6 迁移
182
+
183
+ 如果你是从 V6 迁移至 V7 的用户,可以通过 [上述方式](#快速开始) 使用 V7,同时做以下调整:
184
+
185
+ ##### 修改配置文件
186
+
187
+ 若你在旧版本对 storybook 进行了一些自定义配置,需要将配置文件 `root/config/storybook/main.(j|t)s` 移动到 `root/.storybook/main.(j|t)s`。
188
+
189
+ 并在 `root/.storybook/main.(j|t)s` 中添加以下配置,指定 framework 为 @modern-js/storybook:
190
+
191
+ ```diff
192
+ const config = {
193
+ + framework: {
194
+ + name: '@modern-js/storybook'
195
+ + },
196
+ };
197
+
198
+ export default config;
199
+ ```
200
+
201
+ ##### 依赖升级
202
+
203
+ 升级 @storybook/addon-\* 系列依赖,升级到 7 版本。
204
+
205
+ ##### 移除 @modern-js/plugin-storybook 插件
206
+
207
+ 在 modern.config.(j|t)s 中删除 @modern-js/plugin-storybook 插件的注册。
208
+
209
+ ##### 修改 Storybook 写法
210
+
211
+ 按照 Storybook 官网文档,对一些 breaking change 做相应的更新,例如 stories 的写法,MDX 的写法等,参考[storybook 迁移文档](https://storybook.js.org/docs/react/migration-guide)。
212
+
213
+ ### 从原生 Storybook 项目迁移
214
+
215
+ 若当前 Storybook 版本还是 6,需要先按照 Storybook 官网文档升级到版本 7,参考 [storybook 迁移文档](https://storybook.js.org/docs/react/migration-guide)。
216
+
217
+ ```diff filename='.storybook/main.js'
218
+ const config = {
219
+ - framework: '@storybook/react-webapck5',
220
+ + framework: {
221
+ + name: '@modern-js/storybook'
222
+ + },
223
+ };
224
+
225
+ export default config;
226
+ ```
44
227
 
45
- Modern.js 默认识别项目源码目录 src/ [\*.stories.(js|jsx|ts|tsx|mdx)](/apis/app/hooks/src/stories.html) 格式的文件作为 Storybook 的调试文件。
228
+ Modern.js 的配置文件默认为 `modern.config.(j|t)s`,配置请查看 [modern.js 配置](/configure/app/usage)
46
229
 
47
- ## 配置 Storybook
230
+ 若原来项目中包含了 Babel 等配置,需要对应的写在 modern 配置中,大部分 Babel 配置已经包含进了 Modern.js。
48
231
 
49
- 在 Modern.js 中,可以在项目的 [`config/storybook`](/apis/app/hooks/config/storybook.html) 目录下增加 Storybook 配置文件。
232
+ 安装完成后进行相应的[配置](/guides/advanced-features/using-storybook#配置)
@@ -12,13 +12,13 @@ Modern.js 内置了社区流行的 CSS 预处理器,包括 Less 和 Sass。
12
12
 
13
13
  默认情况下,你不需要对 Less 和 Sass 进行任何配置。如果你有自定义 loader 配置的需求,可以通过配置 [tools.less](/configure/app/tools/less)、[tools.sass](/configure/app/tools/sass) 来进行设置。
14
14
 
15
- 你也可以在 Modern.js 中使用 Stylus,只需要安装 Modern.js Builder 提供的 Stylus 插件即可,使用方式请参考 [Stylus 插件](https://modernjs.dev/builder/plugins/plugin-stylus.html)。
15
+ 你也可以在 Modern.js 中使用 Stylus,只需要安装 Rsbuild 提供的 Stylus 插件即可,使用方式请参考 [Stylus 插件](https://rsbuild.dev/zh/plugins/list/plugin-stylus)。
16
16
 
17
17
  ## 使用 PostCSS
18
18
 
19
19
  Modern.js 内置了 [PostCSS](https://postcss.org/) 来转换 CSS 代码。
20
20
 
21
- 请阅读 [Modern.js Builder - 使用 PostCSS](https://modernjs.dev/builder/guide/basic/css-usage.html#%E4%BD%BF%E7%94%A8-postcss) 了解更多用法。
21
+ 请阅读 [Rsbuild - 使用 PostCSS](https://rsbuild.dev/zh/guide/basic/css-usage#%E4%BD%BF%E7%94%A8-postcss) 了解更多用法。
22
22
 
23
23
  ## 使用 CSS Modules
24
24