@modern-js/main-doc 2.67.6 → 2.67.8
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.
- package/docs/en/apis/app/commands.mdx +3 -3
- package/docs/en/apis/app/hooks/src/routes.mdx +0 -70
- package/docs/en/community/blog/v2-release-note.mdx +2 -2
- package/docs/en/community/contributing-guide.mdx +1 -1
- package/docs/en/components/builder.mdx +1 -1
- package/docs/en/components/bundler.mdx +1 -1
- package/docs/en/components/rsbuild.mdx +1 -1
- package/docs/en/components/rspack.mdx +1 -1
- package/docs/en/components/rspackPrecautions.mdx +2 -2
- package/docs/en/configure/app/builder-plugins.mdx +1 -1
- package/docs/en/configure/app/output/assets-retry.mdx +1 -1
- package/docs/en/configure/app/output/copy.mdx +1 -1
- package/docs/en/configure/app/performance/build-cache.mdx +1 -1
- package/docs/en/configure/app/performance/transform-lodash.mdx +4 -1
- package/docs/en/configure/app/security/sri.mdx +1 -1
- package/docs/en/configure/app/source/exclude.mdx +2 -2
- package/docs/en/configure/app/source/include.mdx +1 -1
- package/docs/en/configure/app/source/module-scopes.mdx +4 -1
- package/docs/en/configure/app/source/transform-import.mdx +2 -2
- package/docs/en/configure/app/tools/babel.mdx +5 -5
- package/docs/en/configure/app/tools/bundler-chain.mdx +2 -2
- package/docs/en/configure/app/tools/css-extract.mdx +1 -1
- package/docs/en/configure/app/tools/dev-server.mdx +1 -1
- package/docs/en/configure/app/tools/lightningcss-loader.mdx +1 -1
- package/docs/en/configure/app/tools/rspack.mdx +1 -1
- package/docs/en/configure/app/tools/swc.mdx +3 -3
- package/docs/en/configure/app/tools/terser.mdx +4 -2
- package/docs/en/configure/app/tools/ts-loader.mdx +4 -1
- package/docs/en/configure/app/tools/webpack-chain.mdx +22 -19
- package/docs/en/configure/app/tools/webpack.mdx +4 -1
- package/docs/en/guides/advanced-features/build-performance.mdx +1 -1
- package/docs/en/guides/advanced-features/compatibility.mdx +1 -1
- package/docs/en/guides/advanced-features/page-performance/optimize-bundle.mdx +3 -3
- package/docs/en/guides/advanced-features/rspack-start.mdx +2 -2
- package/docs/en/guides/advanced-features/web-server.mdx +16 -4
- package/docs/en/guides/basic-features/css/css.mdx +4 -4
- package/docs/en/guides/basic-features/data/data-cache.mdx +1 -1
- package/docs/en/guides/basic-features/debug/rsdoctor.mdx +1 -1
- package/docs/en/guides/basic-features/render/ssr.mdx +1 -1
- package/docs/en/guides/basic-features/render/streaming-ssr.mdx +2 -2
- package/docs/en/guides/basic-features/routes.mdx +75 -3
- package/docs/en/guides/basic-features/static-assets/wasm-assets.mdx +1 -1
- package/docs/en/guides/basic-features/static-assets.mdx +1 -1
- package/docs/en/guides/concept/builder.mdx +3 -3
- package/docs/en/guides/concept/entries.mdx +1 -1
- package/docs/en/guides/get-started/tech-stack.mdx +3 -3
- package/docs/en/guides/topic-detail/module-federation/deploy.mdx +83 -7
- package/docs/en/guides/topic-detail/module-federation/usage.mdx +2 -4
- package/docs/en/guides/troubleshooting/builder.mdx +4 -5
- package/docs/en/plugin/cli-plugins/api.mdx +141 -135
- package/docs/en/plugin/introduction.mdx +27 -24
- package/docs/en/tutorials/examples/csr-auth.mdx +15 -198
- package/docs/zh/apis/app/commands.mdx +3 -3
- package/docs/zh/community/blog/v2-release-note.mdx +2 -2
- package/docs/zh/community/contributing-guide.mdx +1 -1
- package/docs/zh/components/builder.mdx +1 -1
- package/docs/zh/components/bundler.mdx +1 -2
- package/docs/zh/components/rsbuild.mdx +1 -1
- package/docs/zh/components/rspack.mdx +1 -1
- package/docs/zh/components/rspackPrecautions.mdx +2 -2
- package/docs/zh/configure/app/builder-plugins.mdx +1 -1
- package/docs/zh/configure/app/output/assets-retry.mdx +1 -1
- package/docs/zh/configure/app/output/copy.mdx +1 -1
- package/docs/zh/configure/app/performance/build-cache.mdx +1 -1
- package/docs/zh/configure/app/performance/transform-lodash.mdx +4 -1
- package/docs/zh/configure/app/security/sri.mdx +1 -1
- package/docs/zh/configure/app/source/exclude.mdx +2 -2
- package/docs/zh/configure/app/source/include.mdx +1 -1
- package/docs/zh/configure/app/source/module-scopes.mdx +4 -1
- package/docs/zh/configure/app/source/transform-import.mdx +2 -2
- package/docs/zh/configure/app/tools/babel.mdx +5 -6
- package/docs/zh/configure/app/tools/bundler-chain.mdx +2 -2
- package/docs/zh/configure/app/tools/css-extract.mdx +1 -1
- package/docs/zh/configure/app/tools/dev-server.mdx +1 -1
- package/docs/zh/configure/app/tools/lightningcss-loader.mdx +1 -1
- package/docs/zh/configure/app/tools/rspack.mdx +1 -1
- package/docs/zh/configure/app/tools/swc.mdx +3 -3
- package/docs/zh/configure/app/tools/terser.mdx +4 -2
- package/docs/zh/configure/app/tools/ts-loader.mdx +4 -1
- package/docs/zh/configure/app/tools/webpack-chain.mdx +23 -20
- package/docs/zh/configure/app/tools/webpack.mdx +4 -1
- package/docs/zh/guides/advanced-features/compatibility.mdx +1 -1
- package/docs/zh/guides/advanced-features/page-performance/optimize-bundle.mdx +2 -2
- package/docs/zh/guides/advanced-features/rspack-start.mdx +2 -2
- package/docs/zh/guides/advanced-features/web-server.mdx +17 -4
- package/docs/zh/guides/basic-features/css/css.mdx +4 -4
- package/docs/zh/guides/basic-features/data/data-cache.mdx +1 -1
- package/docs/zh/guides/basic-features/debug/rsdoctor.mdx +1 -1
- package/docs/zh/guides/basic-features/render/ssr.mdx +1 -1
- package/docs/zh/guides/basic-features/render/streaming-ssr.mdx +1 -1
- package/docs/zh/guides/basic-features/static-assets/wasm-assets.mdx +1 -1
- package/docs/zh/guides/basic-features/static-assets.mdx +2 -2
- package/docs/zh/guides/concept/builder.mdx +3 -3
- package/docs/zh/guides/concept/entries.mdx +1 -1
- package/docs/zh/guides/get-started/tech-stack.mdx +3 -3
- package/docs/zh/guides/topic-detail/module-federation/deploy.mdx +83 -7
- package/docs/zh/guides/topic-detail/module-federation/usage.mdx +2 -4
- package/docs/zh/guides/troubleshooting/builder.mdx +4 -5
- package/docs/zh/plugin/cli-plugins/api.mdx +123 -121
- package/docs/zh/plugin/introduction.mdx +18 -15
- package/docs/zh/tutorials/examples/csr-auth.mdx +15 -198
- package/package.json +6 -6
- package/rspress.config.ts +12 -1
- package/src/components/RsbuildLink/index.tsx +1 -1
- package/src/components/Sandpack/index.tsx +1 -11
- package/src/components/ShowcaseList/useShowcases.ts +1 -1
- package/src/sandbox/csr-auth/src/routes/Auth-tsx.txt +74 -0
- package/src/sandbox/csr-auth/src/routes/fakeAuth-ts.txt +16 -0
- package/src/sandbox/csr-auth/src/routes/layout-tsx.txt +21 -0
- package/src/sandbox/csr-auth/src/routes/login/page-tsx.txt +40 -0
- package/src/sandbox/csr-auth/src/routes/page-tsx.txt +17 -0
- package/src/sandbox/csr-auth/src/routes/protected/page-tsx.txt +11 -0
@@ -4,9 +4,12 @@ title: webpackChain
|
|
4
4
|
|
5
5
|
# tools.webpackChain
|
6
6
|
|
7
|
+
import { Badge } from '@theme';
|
8
|
+
|
9
|
+
<Badge type="danger">仅支持 Webpack</Badge>
|
10
|
+
|
7
11
|
- **类型:** `Function | undefined`
|
8
12
|
- **默认值:** `undefined`
|
9
|
-
- **打包工具:** `仅支持 webpack`
|
10
13
|
|
11
14
|
你可以通过 `tools.webpackChain` 来修改默认的 webpack 配置,它的值为 `Function` 类型,接收两个参数:
|
12
15
|
|
@@ -153,24 +156,24 @@ Modern.js 中预先定义了一些常用的 Chain ID,你可以通过这些 ID
|
|
153
156
|
|
154
157
|
#### CHAIN_ID.RULE
|
155
158
|
|
156
|
-
| ID | 描述
|
157
|
-
| ------------- |
|
158
|
-
| `RULE.MJS` | 处理 `mjs` 的规则
|
159
|
-
| `RULE.JS` | 处理 `js` 的规则
|
160
|
-
| `RULE.TS` | 处理 `ts` 的规则
|
161
|
-
| `RULE.CSS` | 处理 `css` 的规则
|
162
|
-
| `RULE.LESS` | 处理 `less` 的规则
|
163
|
-
| `RULE.SASS` | 处理 `sass` 的规则
|
164
|
-
| `RULE.STYLUS` | 处理 `stylus` 的规则(依赖 [Stylus 插件](https://rsbuild.
|
165
|
-
| `RULE.SVG` | Rule for `svg`
|
166
|
-
| `RULE.PUG` | 处理 `pug` 的规则
|
167
|
-
| `RULE.TOML` | 处理 `toml` 的规则
|
168
|
-
| `RULE.YAML` | 处理 `yaml` 的规则
|
169
|
-
| `RULE.WASM` | 处理 `wasm` 的规则
|
170
|
-
| `RULE.NODE` | 处理 `node` 的规则
|
171
|
-
| `RULE.FONT` | 处理字体的规则
|
172
|
-
| `RULE.IMAGE` | 处理图片的规则
|
173
|
-
| `RULE.MEDIA` | 处理媒体资源的规则
|
159
|
+
| ID | 描述 |
|
160
|
+
| ------------- | -------------------------------------------------------------------------------------------- |
|
161
|
+
| `RULE.MJS` | 处理 `mjs` 的规则 |
|
162
|
+
| `RULE.JS` | 处理 `js` 的规则 |
|
163
|
+
| `RULE.TS` | 处理 `ts` 的规则 |
|
164
|
+
| `RULE.CSS` | 处理 `css` 的规则 |
|
165
|
+
| `RULE.LESS` | 处理 `less` 的规则 |
|
166
|
+
| `RULE.SASS` | 处理 `sass` 的规则 |
|
167
|
+
| `RULE.STYLUS` | 处理 `stylus` 的规则(依赖 [Stylus 插件](https://rsbuild.rs/zh/plugins/list/plugin-stylus)) |
|
168
|
+
| `RULE.SVG` | Rule for `svg` |
|
169
|
+
| `RULE.PUG` | 处理 `pug` 的规则 |
|
170
|
+
| `RULE.TOML` | 处理 `toml` 的规则 |
|
171
|
+
| `RULE.YAML` | 处理 `yaml` 的规则 |
|
172
|
+
| `RULE.WASM` | 处理 `wasm` 的规则 |
|
173
|
+
| `RULE.NODE` | 处理 `node` 的规则 |
|
174
|
+
| `RULE.FONT` | 处理字体的规则 |
|
175
|
+
| `RULE.IMAGE` | 处理图片的规则 |
|
176
|
+
| `RULE.MEDIA` | 处理媒体资源的规则 |
|
174
177
|
|
175
178
|
#### CHAIN_ID.ONE_OF
|
176
179
|
|
@@ -247,4 +250,4 @@ Modern.js 中预先定义了一些常用的 Chain ID,你可以通过这些 ID
|
|
247
250
|
|
248
251
|
### 使用示例
|
249
252
|
|
250
|
-
使用示例可参考:[Rsbuild - bundlerChain 使用示例](https://rsbuild.
|
253
|
+
使用示例可参考:[Rsbuild - bundlerChain 使用示例](https://rsbuild.rs/zh/guide/basic/configure-rspack#%E7%A4%BA%E4%BE%8B)。
|
@@ -4,9 +4,12 @@ title: webpack
|
|
4
4
|
|
5
5
|
# tools.webpack
|
6
6
|
|
7
|
+
import { Badge } from '@theme';
|
8
|
+
|
9
|
+
<Badge type="danger" >仅支持 Webpack</Badge>
|
10
|
+
|
7
11
|
- **类型:** `Object | Function | undefined`
|
8
12
|
- **默认值:** `undefined`
|
9
|
-
- **打包工具:** `仅支持 webpack`
|
10
13
|
|
11
14
|
`tools.webpack` 选项用于配置原生的 [webpack](https://webpack.js.org/)。
|
12
15
|
|
@@ -59,7 +59,7 @@ Modern.js 默认的 Browserslist 配置为:
|
|
59
59
|
```
|
60
60
|
|
61
61
|
:::tip
|
62
|
-
请阅读 [设置浏览器范围](https://rsbuild.
|
62
|
+
请阅读 [设置浏览器范围](https://rsbuild.rs/zh/guide/advanced/browserslist) 章节来了解更多关于 Browserslist 的用法。
|
63
63
|
:::
|
64
64
|
|
65
65
|
## 按需引入 polyfill
|
@@ -98,7 +98,7 @@ export default {
|
|
98
98
|
|
99
99
|
良好的拆包策略对于提升应用的加载性能是十分重要的,可以充分利用浏览器的缓存机制,减少请求数量,加快页面加载速度。
|
100
100
|
|
101
|
-
在 Modern.js 中内置了[多种拆包策略](https://rsbuild.
|
101
|
+
在 Modern.js 中内置了[多种拆包策略](https://rsbuild.rs/zh/guide/optimization/split-chunk),可以满足大部分应用的需求,你也可以根据自己的业务场景,自定义拆包配置。
|
102
102
|
|
103
103
|
比如将 node_modules 下的 `axios` 库拆分到 `axios.js` 中:
|
104
104
|
|
@@ -72,7 +72,7 @@ export default {
|
|
72
72
|
|
73
73
|
## 修改转译配置
|
74
74
|
|
75
|
-
Modern.js 在 Rspack 模式下使用 Rspack [builtin:swc-loader](https://rspack.
|
75
|
+
Modern.js 在 Rspack 模式下使用 Rspack [builtin:swc-loader](https://rspack.rs/zh/guide/features/builtin-swc-loader) 进行代码转译。
|
76
76
|
|
77
77
|
Modern.js 已对 `builtin:swc-loader` 的常见配置提供了更方便的配置方式,如:通过 [source.transformImport](/configure/app/source/transform-import) 配置组件库按需引入。如果对 `builtin:swc-loader` 有自定义配置的需求,可通过 [tools.swc](/configure/app/tools/swc) 进行配置:
|
78
78
|
|
@@ -100,7 +100,7 @@ export default defineConfig<'rspack'>({
|
|
100
100
|
|
101
101
|
但 Modern.js 对于 Rspack 的依赖方式为锁版本方式(非自动升级),由于发版周期不同步等原因,可能会出现 Modern.js 内集成的 Rspack 版本落后于 Rspack 最新版本的情况。
|
102
102
|
|
103
|
-
当你执行 dev / build 命令时,Modern.js 会在[开启调试模式时](https://rsbuild.
|
103
|
+
当你执行 dev / build 命令时,Modern.js 会在[开启调试模式时](https://rsbuild.rs/zh/guide/debug/debug-mode)自动打印当前使用的 Rspack 版本:
|
104
104
|
|
105
105
|

|
106
106
|
|
@@ -12,10 +12,15 @@ Modern.js 将大部分项目需要的服务端能力都进行了封装,通常
|
|
12
12
|
必须确保 Modern.js 版本是 x.67.5 及以上。
|
13
13
|
:::
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
开发者可以在项目根目录执行 `pnpm run new` 命令,开启「自定义 Web Server」功能:
|
16
|
+
|
17
|
+
```bash
|
18
|
+
? 请选择你想要的操作 创建工程元素
|
19
|
+
? 请选择创建元素类型 新建「自定义 Web Server」源码目录
|
20
|
+
```
|
21
|
+
|
22
|
+
执行命令后,项目目录下会自动创建 `server/modern.server.ts` 文件,可以在这个文件中编写自定义逻辑。
|
23
|
+
|
19
24
|
|
20
25
|
## 自定义 Web Server 能力
|
21
26
|
|
@@ -227,6 +232,14 @@ export default () => {
|
|
227
232
|
旧版 API 兼容但不再推荐使用,扩展 Server 能力请移步 [自定义 Web Server](/guides/advanced-features/web-server.html),迁移指南参考 [迁移至新版自定义 Web Server](/guides/advanced-features/web-server.html#迁移至新版自定义-web-server)。
|
228
233
|
:::
|
229
234
|
|
235
|
+
### 开启
|
236
|
+
开启自定义 Web Server 功能,需要执行以下步骤:
|
237
|
+
1. devDependencies 增加 `@modern-js/plugin-server`、`tsconfig-paths` 及 `ts-node`依赖并安装。
|
238
|
+
2. `tsconfig` 的 `include` 中添加 `server`。
|
239
|
+
3. `modern.config.ts` 中注册 `@modern-js/plugin-server` 插件。
|
240
|
+
4. 项目目录下创建 `server/index.ts` 文件,可以在这个文件中编写自定义逻辑。
|
241
|
+
|
242
|
+
|
230
243
|
### Unstable Middleware
|
231
244
|
|
232
245
|
Modern.js 支持为 Web Server 添加渲染中间件,支持在处理页面路由的前后执行自定义逻辑。
|
@@ -12,20 +12,20 @@ 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,只需要安装 Rsbuild 提供的 Stylus 插件即可,使用方式请参考 [Stylus 插件](https://rsbuild.
|
15
|
+
你也可以在 Modern.js 中使用 Stylus,只需要安装 Rsbuild 提供的 Stylus 插件即可,使用方式请参考 [Stylus 插件](https://rsbuild.rs/zh/plugins/list/plugin-stylus)。
|
16
16
|
|
17
17
|
## 使用 PostCSS
|
18
18
|
|
19
19
|
Modern.js 内置了 [PostCSS](https://postcss.org/) 来转换 CSS 代码。
|
20
20
|
|
21
|
-
请阅读 [Rsbuild - 使用 PostCSS](https://rsbuild.
|
21
|
+
请阅读 [Rsbuild - 使用 PostCSS](https://rsbuild.rs/zh/guide/basic/css-usage#%E4%BD%BF%E7%94%A8-postcss) 了解更多用法。
|
22
22
|
|
23
23
|
## 使用 Lightning CSS
|
24
24
|
|
25
25
|
Modern.js 支持使用 [Lightning CSS](https://lightningcss.dev/) 来转换 CSS 代码,可以通过配置 [tools.lightningcssLoader](/configure/app/tools/lightningcss-loader) 来开启此功能。
|
26
26
|
|
27
|
-
请阅读 [Rsbuild - 使用 Lightning CSS](https://rsbuild.
|
27
|
+
请阅读 [Rsbuild - 使用 Lightning CSS](https://rsbuild.rs/zh/guide/basic/css-usage#lightning-css) 了解更多用法。
|
28
28
|
|
29
29
|
## 使用 Uno CSS
|
30
30
|
|
31
|
-
请阅读 [Rsbuild - 使用 UnoCSS](https://rsbuild.
|
31
|
+
请阅读 [Rsbuild - 使用 UnoCSS](https://rsbuild.rs/zh/guide/basic/unocss) 了解更多用法。
|
@@ -159,7 +159,7 @@ const getComplexStatistics = cache(
|
|
159
159
|
}
|
160
160
|
);
|
161
161
|
|
162
|
-
revalidateTag('dashboard
|
162
|
+
revalidateTag('dashboard'); // 会使 getDashboardStats 函数和 getComplexStatistics 函数的缓存都失效
|
163
163
|
```
|
164
164
|
|
165
165
|
#### `getKey` 参数
|
@@ -222,7 +222,7 @@ document.addEventListener('load', () => {
|
|
222
222
|
export const doSomething = () => {}
|
223
223
|
```
|
224
224
|
|
225
|
-
如果直接引用到组件中,会造成
|
225
|
+
如果直接引用到组件中,会造成 SSR 加载报错,即使你已经使用环境变量进行判断,但仍然无法移除依赖中副作用的执行。
|
226
226
|
|
227
227
|
```tsx title="routes/page.tsx"
|
228
228
|
import { doSomething } from 'packageA';
|
@@ -72,7 +72,7 @@ export const loader = ({ params }: LoaderFunctionArgs) => {
|
|
72
72
|
另外,`defer` 还可以同时接收异步数据和同步数据。在下述例子中,我们等待部分耗时较短的请求,在响应后通过对象数据返回,而耗时较长时间的请求,则通过 Promise 返回:
|
73
73
|
|
74
74
|
```ts title="user/[id]/page.data.ts"
|
75
|
-
export const loader = ({ params }: LoaderFunctionArgs) => {
|
75
|
+
export const loader = async ({ params }: LoaderFunctionArgs) => {
|
76
76
|
const userId = params.id;
|
77
77
|
|
78
78
|
const user = new Promise<User>(resolve => {
|
@@ -146,7 +146,7 @@ console.log(myFile); // "/static/myFile.6c12aba3.pdf"
|
|
146
146
|
|
147
147
|
关于以上配置的更多介绍,请参考:
|
148
148
|
|
149
|
-
- [Rspack 文档 - Asset modules](https://
|
149
|
+
- [Rspack 文档 - Asset modules](https://rspack.rs/guide/asset-module.html#asset-modules)
|
150
150
|
- [webpack 文档 - Asset modules](https://webpack.js.org/guides/asset-modules/)
|
151
151
|
|
152
152
|
## 图片格式
|
@@ -158,4 +158,4 @@ console.log(myFile); // "/static/myFile.6c12aba3.pdf"
|
|
158
158
|
| PNG | 无损压缩,不会丢失图片细节,不失真,支持半透明 | 不适合色表复杂的图片 | 适合颜色数量少,边界层次分明的图片,适合用在 logo、icon、透明图等场景 |
|
159
159
|
| JPG | 颜色丰富 | 有损压缩,会导致图片失真,不支持透明度 | 适合颜色数量多,颜色带有渐变、过度复杂的图片,适合用在人像照片、风景图等场景 |
|
160
160
|
| WebP | 同时支持有损压缩与无损压缩,支持透明度,体积比 PNG 和 JPG 小很多 | iOS 兼容性不好 | 几乎任何场景的像素图片,支持 WebP 的宿主环境,都应该首选 WebP 图片格式 |
|
161
|
-
| SVG | 无损格式,不失真,支持透明度
|
161
|
+
| SVG | 无损格式,不失真,支持透明度 | 不适合复杂图形 | 适合矢量图,适合用于 icon |
|
@@ -4,7 +4,7 @@ sidebar_position: 2
|
|
4
4
|
|
5
5
|
# 构建工具
|
6
6
|
|
7
|
-
Modern.js 构建是基于 [Rsbuild](https://rsbuild.
|
7
|
+
Modern.js 构建是基于 [Rsbuild](https://rsbuild.rs/) 实现的,并支持在 Webpack 和 Rspack 两种打包工具间无缝切换。
|
8
8
|
|
9
9
|
:::tip 什么是 Rsbuild
|
10
10
|
Rsbuild 是基于 Rspack 的构建工具,是一个增强版的 Rspack CLI,更易用、开箱即用。
|
@@ -25,7 +25,7 @@ Rsbuild 是基于 Rspack 的构建工具,是一个增强版的 Rspack CLI,
|
|
25
25
|
|
26
26
|
## 构建文档
|
27
27
|
|
28
|
-
Rsbuild 的文档地址为:https://rsbuild.
|
28
|
+
Rsbuild 的文档地址为:https://rsbuild.rs/
|
29
29
|
|
30
30
|
在该文档中,你可以了解到 Rsbuild 的详细介绍,同时也可以找到各个构建能力的完整使用指南。
|
31
31
|
|
@@ -42,4 +42,4 @@ Rsbuild 的文档地址为:https://rsbuild.dev/
|
|
42
42
|
|
43
43
|
Rsbuild 提供了丰富的构建能力,包括 JavaScript 编译、CSS 编译、静态资源处理、代码热更新、代码压缩、TS 类型检查等几十种能力。
|
44
44
|
|
45
|
-
我们推荐你阅读 [「Rsbuild - 功能导航」](https://rsbuild.
|
45
|
+
我们推荐你阅读 [「Rsbuild - 功能导航」](https://rsbuild.rs/zh/guide/start/features) 来了解 Rsbuild 提供的所有构建能力。
|
@@ -280,7 +280,7 @@ export default defineConfig({
|
|
280
280
|
|
281
281
|
4. **单入口应用是否存在输出多个 HTML 文件的例外情况?**
|
282
282
|
|
283
|
-
你可以自行配置 [html-rspack-plugin](https://rspack.
|
283
|
+
你可以自行配置 [html-rspack-plugin](https://rspack.rs/zh/plugins/rspack/html-rspack-plugin#%E7%94%9F%E6%88%90%E5%A4%9A%E4%B8%AA-html-%E6%96%87%E4%BB%B6) 为每个入口生成多个 HTML 产物,或使多个入口共用一个 HTML 产物。
|
284
284
|
|
285
285
|
5. **什么叫多页应用(Multi-Page Application)?**
|
286
286
|
|
@@ -12,7 +12,7 @@ Modern.js 框架默认集成了一些社区中流行的库和开发工具。
|
|
12
12
|
|
13
13
|
Modern.js 使用 [React 18](https://react.dev/) 来构建用户界面,同时也兼容 React 17。
|
14
14
|
|
15
|
-
Modern.js 底层的 Rsbuild 支持构建 Vue 应用,如果你需要使用 Vue,可以参考 [Rsbuild - Vue](https://rsbuild.
|
15
|
+
Modern.js 底层的 Rsbuild 支持构建 Vue 应用,如果你需要使用 Vue,可以参考 [Rsbuild - Vue](https://rsbuild.rs/zh/guide/framework/vue)。
|
16
16
|
|
17
17
|
## 路由
|
18
18
|
|
@@ -38,7 +38,7 @@ Modern.js 可以与社区中任意的包管理器搭配使用,比如 [npm](htt
|
|
38
38
|
|
39
39
|
## 打包工具
|
40
40
|
|
41
|
-
Modern.js 使用 [Webpack 5](https://webpack.js.org/) 或 [Rspack](https://
|
41
|
+
Modern.js 使用 [Webpack 5](https://webpack.js.org/) 或 [Rspack](https://rspack.rs/) 来打包你的 Web 应用。
|
42
42
|
|
43
43
|
默认使用的打包工具为 Webpack 5,你可以参考 [使用 Rspack](/guides/advanced-features/rspack-start) 来切换到更快的 Rspack。
|
44
44
|
|
@@ -69,7 +69,7 @@ Modern.js 支持 [启用 Tailwind CSS](/guides/basic-features/css/tailwindcss)
|
|
69
69
|
Modern.js 支持 [Sass](https://sass-lang.com/)、[Less](https://lesscss.org/) 和 [Stylus](https://stylus-lang.com/) 三种 CSS 预处理器:
|
70
70
|
|
71
71
|
- 默认支持 Sass 和 Less,开箱即用。
|
72
|
-
- 可选支持 Stylus,请参考 [Stylus 插件](https://rsbuild.
|
72
|
+
- 可选支持 Stylus,请参考 [Stylus 插件](https://rsbuild.rs/zh/plugins/list/plugin-stylus) 来使用。
|
73
73
|
|
74
74
|
## CSS Modules
|
75
75
|
|
@@ -1,8 +1,17 @@
|
|
1
1
|
# 部署
|
2
2
|
|
3
|
-
通常情况下,部署 Module Federation
|
3
|
+
通常情况下,部署 Module Federation 应用,需要注意两点:
|
4
4
|
|
5
|
-
|
5
|
+
1. 保证消费者配置文件中的远程模块地址无误,消费者能够正确访问到生产者的 `manifest` 文件。
|
6
|
+
2. 保证生产者 `manifest` 文件中各个资源能被正确访问到。
|
7
|
+
|
8
|
+
我们推荐使用 Modern.js 的 [Node 服务](/guides/basic-features/deploy.html#modernjs-内置-nodejs-服务器)来部署 Module Federation 应用,以获得开箱即用的体验。
|
9
|
+
|
10
|
+
## 消费者
|
11
|
+
|
12
|
+
对于 Module Federation 的消费者来说,它与生产者的联系就是在配置文件中的远程模块地址。
|
13
|
+
|
14
|
+
例如生产者部署在 `https://my-remote-module` 这个域名下,开发者需要修改消费者的配置文件:
|
6
15
|
|
7
16
|
```ts title="module-federation.config.ts"
|
8
17
|
import { createModuleFederationConfig } from '@module-federation/modern-js';
|
@@ -10,7 +19,7 @@ import { createModuleFederationConfig } from '@module-federation/modern-js';
|
|
10
19
|
export default createModuleFederationConfig({
|
11
20
|
name: 'host',
|
12
21
|
remotes: {
|
13
|
-
remote: 'remote@
|
22
|
+
remote: 'remote@https://my-remote-module/static/mf-manifest.json',
|
14
23
|
},
|
15
24
|
shared: {
|
16
25
|
react: { singleton: true },
|
@@ -19,10 +28,77 @@ export default createModuleFederationConfig({
|
|
19
28
|
});
|
20
29
|
```
|
21
30
|
|
22
|
-
|
31
|
+
此时,消费者将加载远程模块生产环境的 `manifest` 配置文件。
|
32
|
+
|
33
|
+
:::note
|
34
|
+
上述代码中,远程模块的地址是 `/static/mf-manifest.json`,这只是以 Modern.js 默认的产物路径举例。在实际项目中,开发者需要根据实际的访问路径进行配置。
|
35
|
+
:::
|
36
|
+
|
37
|
+
## 生产者
|
38
|
+
|
39
|
+
对于 Module Federation 的生产者,开发者需要正确的配置 [`output.assetPrefix`](/configure/app/output/asset-prefix) 配置,它会影响到:
|
40
|
+
|
41
|
+
1. `mf-manifest.json` 中定义的 `publicPath`,它决定了远程模块其他资源的访问路径。
|
42
|
+
2. 通过 Modern.js 服务直接托管产物时,`mf-manifest.json` 文件的访问路径。
|
43
|
+
|
44
|
+
在生产环境,开发者需要将 `output.assetPrefix` 配置为生产环境的访问路径。例如我们将生产者部署在 `https://my-remote-module` 这个域名下,需要将 `output.assetPrefix` 配置为 `https://my-remote-module`。
|
45
|
+
|
46
|
+
```ts title="modern.config.ts"
|
47
|
+
import { defineConfig } from '@modern-js/app-tools';
|
48
|
+
|
49
|
+
export default defineConfig({
|
50
|
+
output: {
|
51
|
+
assetPrefix: 'https://my-remote-module',
|
52
|
+
},
|
53
|
+
});
|
54
|
+
```
|
55
|
+
|
56
|
+
此时,生产者构建产物 `mf-manifest.json` 中定义的 `publicPath` 为 `https://my-remote-module`,例如:
|
57
|
+
|
58
|
+
```json
|
59
|
+
{
|
60
|
+
"id": "remote",
|
61
|
+
"name": "remote",
|
62
|
+
"metaData": {
|
63
|
+
"name": "remote",
|
64
|
+
"publicPath": "https://my-remote-module/"
|
65
|
+
},
|
66
|
+
"shared": [ /* xxx */ ],
|
67
|
+
"remotes": [],
|
68
|
+
"exposes": [ /* xxx */ ]
|
69
|
+
}
|
70
|
+
```
|
71
|
+
|
72
|
+
消费者在访问远程模块时,会自动将 `publicPath` 拼接在远程模块的资源路径前。
|
73
|
+
|
74
|
+
该配置也会影响到生产者 `mf-manifest.json` 的访问路径。例如将这个值设置为 `MyDomain/module-a` 时,`mf-manifest.json` 的托管路径变为 `MyDomain/module-a/static/mf-manifest.json`。
|
75
|
+
|
76
|
+
此时,消费者在配置远程模块时,需要配置以下地址:
|
77
|
+
|
78
|
+
```ts title="module-federation.config.ts"
|
79
|
+
import { createModuleFederationConfig } from '@module-federation/modern-js';
|
80
|
+
|
81
|
+
export default createModuleFederationConfig({
|
82
|
+
name: 'host',
|
83
|
+
remotes: {
|
84
|
+
remote: 'remote@MyDomain/module-a/static/mf-manifest.json',
|
85
|
+
},
|
86
|
+
});
|
87
|
+
```
|
88
|
+
|
89
|
+
## 本地验证部署
|
23
90
|
|
24
|
-
|
91
|
+
Modern.js 提供了 `modern deploy` 命令,可以方便生成可运行在 Node.js 环境的产物。
|
25
92
|
|
26
|
-
|
93
|
+
```bash
|
94
|
+
modern deploy
|
95
|
+
```
|
96
|
+
|
97
|
+
执行命令后,可以在控制台看到以下输出:
|
98
|
+
|
99
|
+
```bash
|
100
|
+
Static directory: .output/static
|
101
|
+
You can preview this build by node .output/index
|
102
|
+
```
|
27
103
|
|
28
|
-
|
104
|
+
此时,开发者只需要运行 `node .output/index` 即可在本地预览部署后的效果。无论是 CSR 应用或是 SSR 应用,所有的 Module Federation 产物都能够被正确的访问。
|
@@ -189,8 +189,6 @@ export default Index;
|
|
189
189
|
import { appTools, defineConfig } from '@modern-js/app-tools';
|
190
190
|
import { moduleFederationPlugin } from '@module-federation/modern-js';
|
191
191
|
|
192
|
-
const isLocal = process.env.IS_LOCAL === 'true';
|
193
|
-
|
194
192
|
// https://modernjs.dev/en/configure/app/usage
|
195
193
|
export default defineConfig({
|
196
194
|
server: {
|
@@ -203,7 +201,7 @@ export default defineConfig({
|
|
203
201
|
// Now this configuration is only used in the local when you run modern serve command.
|
204
202
|
// If you want to deploy the application to the platform, use your own domain name.
|
205
203
|
// Module federation will automatically write it to mf-manifest.json, which influences consumer to fetch remoteEntry.js.
|
206
|
-
assetPrefix:
|
204
|
+
assetPrefix: 'http://127.0.0.1:3051',
|
207
205
|
},
|
208
206
|
plugins: [
|
209
207
|
appTools({
|
@@ -214,7 +212,7 @@ export default defineConfig({
|
|
214
212
|
});
|
215
213
|
```
|
216
214
|
|
217
|
-
现在,在生产者中运行 `
|
215
|
+
现在,在生产者中运行 `modern build && modern serve`,在消费者中运行 `modern build && modern serve`,即可在本地模拟生产环境,访问到远程模块。
|
218
216
|
|
219
217
|
上述用例可以参考:[Modern.js & Module Federation 基础用法示例](https://github.com/web-infra-dev/modern-js-examples/tree/main/examples/module-federation/base)。
|
220
218
|
|
@@ -10,15 +10,14 @@ sidebar_position: 3
|
|
10
10
|
|
11
11
|
### Rsbuild FAQ
|
12
12
|
|
13
|
-
Modern.js 内部基于 [Rsbuild](https://rsbuild.
|
13
|
+
Modern.js 内部基于 [Rsbuild](https://rsbuild.rs/) 封装了自身的构建工具,因此你可以直接参考 Rsbuild 的 FAQ 文档:
|
14
14
|
|
15
|
-
- [Rsbuild - 功能类问题](https://rsbuild.
|
16
|
-
- [Rsbuild - 异常类问题](https://rsbuild.
|
17
|
-
- [Rsbuild - 热更新问题](https://rsbuild.
|
15
|
+
- [Rsbuild - 功能类问题](https://rsbuild.rs/zh/guide/faq/features)
|
16
|
+
- [Rsbuild - 异常类问题](https://rsbuild.rs/zh/guide/faq/exceptions)
|
17
|
+
- [Rsbuild - 热更新问题](https://rsbuild.rs/zh/guide/faq/hmr)
|
18
18
|
|
19
19
|
---
|
20
20
|
|
21
|
-
|
22
21
|
### 如何清空 webpack 编译缓存?
|
23
22
|
|
24
23
|
默认情况下,Modern.js 的 webpack 编译缓存生成在 `./node_modules/.cache/webpack` 目录下。
|