@modern-js/main-doc 2.22.1 → 2.23.0
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +38 -0
- package/docs/en/apis/app/commands.mdx +5 -5
- package/docs/en/apis/app/runtime/core/bootstrap.mdx +5 -5
- package/docs/en/apis/app/runtime/core/use-loader.mdx +2 -2
- package/docs/en/apis/app/runtime/core/use-module-apps.mdx +2 -2
- package/docs/en/apis/app/runtime/core/use-runtime-context.mdx +1 -1
- package/docs/en/apis/app/runtime/testing/render.mdx +1 -1
- package/docs/en/components/bff-proxy-path-rewrite.mdx +16 -0
- package/docs/en/components/bff-proxy-principle.mdx +1 -0
- package/docs/en/components/enable-bff-caution.mdx +3 -0
- package/docs/en/components/global-proxy-config.mdx +33 -13
- package/docs/en/configure/app/bff/enable-handle-web.mdx +5 -5
- package/docs/en/configure/app/bff/prefix.mdx +6 -6
- package/docs/en/configure/app/bff/proxy.mdx +19 -30
- package/docs/en/configure/app/builder-plugins.mdx +1 -1
- package/docs/en/configure/app/plugins.mdx +19 -19
- package/docs/en/configure/app/runtime/intro.mdx +28 -4
- package/docs/en/configure/app/runtime/master-app.mdx +1 -1
- package/docs/en/configure/app/runtime/router.mdx +2 -2
- package/docs/en/configure/app/server/base-url.mdx +4 -4
- package/docs/en/configure/app/server/enable-framework-ext.mdx +4 -4
- package/docs/en/configure/app/server/port.mdx +6 -6
- package/docs/en/configure/app/server/public-routes.mdx +5 -5
- package/docs/en/configure/app/server/routes.mdx +13 -13
- package/docs/en/configure/app/server/ssr-by-entries.mdx +4 -4
- package/docs/en/configure/app/server/ssr.mdx +5 -5
- package/docs/en/configure/app/usage.mdx +5 -5
- package/docs/en/guides/advanced-features/code-split.mdx +15 -14
- package/docs/en/guides/advanced-features/rspack-start.mdx +0 -1
- package/docs/en/guides/advanced-features/ssr.mdx +2 -2
- package/docs/en/guides/advanced-features/testing.mdx +8 -7
- package/docs/en/guides/advanced-features/web-server.mdx +16 -16
- package/docs/en/guides/basic-features/alias.mdx +11 -9
- package/docs/en/guides/basic-features/env-vars.mdx +14 -14
- package/docs/en/guides/basic-features/html.mdx +41 -43
- package/docs/en/guides/basic-features/mock.mdx +10 -10
- package/docs/en/guides/topic-detail/framework-plugin/implement.mdx +4 -4
- package/docs/en/guides/topic-detail/framework-plugin/introduction.mdx +1 -1
- package/docs/en/guides/troubleshooting/cli.mdx +13 -13
- package/docs/en/guides/troubleshooting/dependencies.mdx +25 -25
- package/docs/en/tutorials/first-app/c03-css.mdx +1 -1
- package/docs/zh/apis/app/commands.mdx +4 -4
- package/docs/zh/apis/app/runtime/testing/render.mdx +1 -1
- package/docs/zh/components/bff-proxy-path-rewrite.mdx +16 -0
- package/docs/zh/components/bff-proxy-principle.mdx +1 -0
- package/docs/zh/components/enable-bff-caution.mdx +4 -0
- package/docs/zh/components/global-proxy-config.mdx +35 -11
- package/docs/zh/configure/app/bff/enable-handle-web.mdx +3 -3
- package/docs/zh/configure/app/bff/prefix.mdx +2 -3
- package/docs/zh/configure/app/bff/proxy.mdx +11 -21
- package/docs/zh/configure/app/runtime/intro.mdx +1 -1
- package/docs/zh/configure/app/server/base-url.mdx +1 -1
- package/docs/zh/configure/app/server/public-routes.mdx +2 -2
- package/docs/zh/configure/app/server/routes.mdx +2 -2
- package/docs/zh/configure/app/server/ssr-by-entries.mdx +3 -3
- package/docs/zh/configure/app/server/ssr.mdx +1 -1
- package/docs/zh/configure/app/usage.mdx +9 -9
- package/docs/zh/guides/advanced-features/code-split.mdx +13 -12
- package/docs/zh/guides/advanced-features/rspack-start.mdx +0 -1
- package/docs/zh/guides/advanced-features/ssr.mdx +2 -2
- package/docs/zh/guides/advanced-features/testing.mdx +4 -4
- package/docs/zh/guides/basic-features/alias.mdx +5 -3
- package/docs/zh/guides/basic-features/html.mdx +9 -9
- package/docs/zh/guides/basic-features/mock.mdx +2 -2
- package/docs/zh/guides/topic-detail/_category_.json +1 -1
- package/docs/zh/guides/troubleshooting/cli.mdx +1 -1
- package/docs/zh/guides/troubleshooting/dependencies.mdx +1 -1
- package/package.json +7 -6
@@ -7,9 +7,9 @@ title: enableHandleWeb
|
|
7
7
|
- **类型:** `boolean`
|
8
8
|
- **默认值:** `false`
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
import EnableBFFCaution from "@site-docs/components/enable-bff-caution";
|
11
|
+
|
12
|
+
<EnableBFFCaution />
|
13
13
|
|
14
14
|
默认情况下,BFF 服务只能处理 BFF API 的请求。
|
15
15
|
|
@@ -7,10 +7,9 @@ sidebar_label: prefix
|
|
7
7
|
- **类型:** `string`
|
8
8
|
- **默认值:** `/api`
|
9
9
|
|
10
|
-
|
11
|
-
请先在当前应用项目根目录使用【[new](/apis/app/commands#modern-new)】 启用 BFF 功能。
|
10
|
+
import EnableBFFCaution from "@site-docs/components/enable-bff-caution";
|
12
11
|
|
13
|
-
|
12
|
+
<EnableBFFCaution />
|
14
13
|
|
15
14
|
默认情况下,BFF API 目录下的路由访问前缀是 `/api`, 如下目录结构:
|
16
15
|
|
@@ -7,13 +7,11 @@ sidebar_label: proxy
|
|
7
7
|
- **类型:** `Record<string, string>`
|
8
8
|
- **默认值:** `{}`
|
9
9
|
|
10
|
-
|
11
|
-
请先在当前应用项目根目录使用【[new](/apis/app/commands#modern-new)】 启用 BFF 功能。
|
10
|
+
import EnableBFFCaution from "@site-docs/components/enable-bff-caution";
|
12
11
|
|
13
|
-
|
12
|
+
<EnableBFFCaution />
|
14
13
|
|
15
|
-
|
16
|
-
BFF Proxy 使用了强大的 [http-proxy-middleware](https://github.com/chimurai/http-proxy-middleware),如果需要更多高级的用法, 可以查看它的[文档](https://github.com/chimurai/http-proxy-middleware#options)。
|
14
|
+
通过简单配置,Modern.js 可以将发送给 BFF server 的请求,自动代理到指定的服务上。
|
17
15
|
|
18
16
|
在 `modern.server-runtime.config.js` 中加入以下配置;即可开启代理:
|
19
17
|
|
@@ -28,27 +26,18 @@ export default defineConfig({
|
|
28
26
|
});
|
29
27
|
```
|
30
28
|
|
31
|
-
|
29
|
+
假设 Modern.js BFF server 的地址是 `localhost:8080`,所有以 `api` 开头的请求都会被代理到 `https://cnodejs.org`,如 `localhost:8080/api/v1/topics` 的请求会被代理到 `https://cnodejs.org/api/v1/topics`。
|
32
30
|
|
33
|
-
|
31
|
+
import BFFProxyPathRewrite from "@site-docs/components/bff-proxy-path-rewrite";
|
34
32
|
|
35
|
-
|
36
|
-
import { defineConfig } from '@modern-js/app-tools/server';
|
37
|
-
export default defineConfig({
|
38
|
-
bff: {
|
39
|
-
proxy: {
|
40
|
-
'/api': {
|
41
|
-
target: 'https://cnodejs.org',
|
42
|
-
pathRewrite: { '/api/topics': '/api/v1/topics' },
|
43
|
-
changeOrigin: true,
|
44
|
-
},
|
45
|
-
},
|
46
|
-
},
|
47
|
-
});
|
48
|
-
```
|
33
|
+
<BFFProxyPathRewrite />
|
49
34
|
|
50
35
|
与 [dev.proxy](/configure/app/dev/proxy) 不同,本节所介绍的代理只作用于进入 BFF/API 服务的请求;同时,这一配置不但可以在开发环境中使用,在生产环境中也会代理相应的请求。
|
51
36
|
|
37
|
+
import BFFProxyPrinciple from "@site-docs/components/bff-proxy-principle";
|
38
|
+
|
39
|
+
<BFFProxyPrinciple />
|
40
|
+
|
52
41
|
## 常见用法
|
53
42
|
|
54
43
|
### 解决接口跨域问题
|
@@ -72,3 +61,4 @@ export default defineServerConfig({
|
|
72
61
|
},
|
73
62
|
};
|
74
63
|
```
|
64
|
+
|
@@ -87,7 +87,7 @@ Runtime 插件运行时配置和直接在 `modern.config.ts` 中的配置默认
|
|
87
87
|
:::
|
88
88
|
|
89
89
|
:::warning
|
90
|
-
defineConfig 中只能定义 Runtime 插件的具体配置内容,确认是否开启插件还需要通过 `
|
90
|
+
defineConfig 中只能定义 Runtime 插件的具体配置内容,确认是否开启插件还需要通过 `modern.config.ts` 中的配置决定。
|
91
91
|
|
92
92
|
:::
|
93
93
|
|
@@ -5,11 +5,11 @@ sidebar_label: publicRoutes
|
|
5
5
|
# server.publicRoutes
|
6
6
|
|
7
7
|
- **类型:** `Object`
|
8
|
-
- **默认值:**
|
8
|
+
- **默认值:** 根据文件约定自动生成的服务端路由规则,每个文件生成一条路由规则。
|
9
9
|
|
10
10
|
该配置选项只作用于服务端路由,可以自定义 `config/public/` 下资源的访问路由。
|
11
11
|
|
12
|
-
对象的 `key`
|
12
|
+
对象的 `key` 为 `config/public/` 的相对文件路径(不使用 `./`), 值可以是 `string`。
|
13
13
|
|
14
14
|
```ts title="modern.config.ts"
|
15
15
|
export default defineConfig({
|
@@ -5,9 +5,9 @@ sidebar_label: routes
|
|
5
5
|
# server.routes
|
6
6
|
|
7
7
|
- **类型:** `Object`
|
8
|
-
- **默认值:**
|
8
|
+
- **默认值:** 根据文件约定自动生成的服务端路由规则,每个入口生成一条路由规则,入口名称等于路由路径。
|
9
9
|
|
10
|
-
|
10
|
+
该配置选项只作用于服务端路由,可以自定义应用入口的访问路由。
|
11
11
|
|
12
12
|
## 自定义访问路由
|
13
13
|
|
@@ -7,7 +7,7 @@ sidebar_label: ssrByEntries
|
|
7
7
|
- **类型:** `Object`
|
8
8
|
- **默认值:** `undefined`
|
9
9
|
|
10
|
-
按入口设置
|
10
|
+
按入口设置 SSR 选项,选项内的属性同 [ssr](./ssr.mdx),指定值会和 SSR 属性内容做替换合并操作,例如:
|
11
11
|
|
12
12
|
:::info
|
13
13
|
「 入口名 」默认为目录名,少数情况下通过 `source.entries` 自定义入口时,入口名为 `source.entries` 对象的 `key`。
|
@@ -19,11 +19,11 @@ export default defineConfig({
|
|
19
19
|
server: {
|
20
20
|
ssr: true,
|
21
21
|
ssrByEntries: {
|
22
|
-
// page-a 不启用
|
22
|
+
// page-a 不启用 SSR
|
23
23
|
'page-a': false,
|
24
24
|
},
|
25
25
|
},
|
26
26
|
});
|
27
27
|
```
|
28
28
|
|
29
|
-
如上配置,项目整体启用了
|
29
|
+
如上配置,项目整体启用了 SSR, 但是针对入口 `page-a` 关闭了 SSR 渲染能力。
|
@@ -25,7 +25,7 @@ export default defineConfig({
|
|
25
25
|
|
26
26
|
当值类型为 `Object` 时,可以配置如下属性:
|
27
27
|
|
28
|
-
- `mode`:`string = 'string'`,默认为使用 `renderToString` 渲染。配置为
|
28
|
+
- `mode`:`string = 'string'`,默认为使用 `renderToString` 渲染。配置为 `stream` 开启流式渲染。
|
29
29
|
- `forceCSR`:`boolean = false`,默认关闭强制 CSR 渲染。配置为 `true` 后,在页面访问时添加 `?csr=true` 即可强制 CSR。
|
30
30
|
- `inlineScript`:`boolean = true`,默认情况下,SSR 的数据会以内联脚本的方式注入到 HTML 中,并且直接赋值给全局变量。配置为 `false` 后,会下发 JSON,而不是赋值给全局变量。
|
31
31
|
|
@@ -4,7 +4,7 @@ sidebar_position: 0
|
|
4
4
|
|
5
5
|
# 配置使用
|
6
6
|
|
7
|
-
Modern.js
|
7
|
+
Modern.js 中有两种配置,分别是编译时配置和服务端运行时配置。
|
8
8
|
|
9
9
|
编译时配置可以在两个位置进行配置:
|
10
10
|
|
@@ -12,10 +12,10 @@ Modern.js 中有两种配置,一个是编译时配置,一个是服务端运
|
|
12
12
|
- `package.json` 文件
|
13
13
|
|
14
14
|
:::info
|
15
|
-
Modern.js 不支持同时在 package.json 中和 modern.config.ts
|
15
|
+
Modern.js 不支持同时在 `package.json` 中和 `modern.config.ts` 中配置同一个配置项,推荐在 `modern.config.ts` 中进行配置。如果 Modern.js 检测到重复配置导致的冲突,将会抛出警告。
|
16
16
|
:::
|
17
17
|
|
18
|
-
服务端运行时配置可以在根路径下的 `modern.server-runtime.config.(ts|js|mjs)`
|
18
|
+
服务端运行时配置可以在根路径下的 `modern.server-runtime.config.(ts|js|mjs)` 中进行配置。
|
19
19
|
|
20
20
|
## 在配置文件中配置
|
21
21
|
|
@@ -27,7 +27,7 @@ Modern.js 的配置文件定义在项目的根目录下,支持 `.ts`, `.js`
|
|
27
27
|
|
28
28
|
### modern.config.ts(推荐)
|
29
29
|
|
30
|
-
我们推荐使用
|
30
|
+
我们推荐使用 `.ts` 格式的配置文件,它提供了友好的 TypeScript 类型提示,从而帮助你避免配置中的错误。
|
31
31
|
|
32
32
|
从 `@modern-js/app-tools` 中导入 `defineConfig` 工具函数, 它会帮助你进行配置的类型推导和类型补全:
|
33
33
|
|
@@ -54,7 +54,7 @@ export default defineConfig({
|
|
54
54
|
|
55
55
|
### modern.config.js
|
56
56
|
|
57
|
-
如果你在开发一个非 TypeScript 项目,可以使用
|
57
|
+
如果你在开发一个非 TypeScript 项目,可以使用 `.js` 格式的配置文件:
|
58
58
|
|
59
59
|
```js title="modern.config.js"
|
60
60
|
export default {
|
@@ -66,7 +66,7 @@ export default {
|
|
66
66
|
};
|
67
67
|
```
|
68
68
|
|
69
|
-
你也可以通过 `process.env.NODE_ENV
|
69
|
+
你也可以通过 `process.env.NODE_ENV`,根据环境做不同配置:
|
70
70
|
|
71
71
|
```js title="modern.config.js"
|
72
72
|
export default {
|
@@ -98,7 +98,7 @@ export default defineConfig(({ env, command }) => ({
|
|
98
98
|
- 当运行 `modern dev` 或 `modern start` 时,`env` 的值为 `development`。
|
99
99
|
- 当运行 `modern build` 或 `modern serve` 时,`env` 的值为 `production`。
|
100
100
|
- 当运行 `modern test` 时,`env` 的值为 `test`。
|
101
|
-
- `command
|
101
|
+
- `command`:对应当前运行的命令,如 `dev`、`start`、`build`、`serve`。
|
102
102
|
|
103
103
|
### 导出异步函数
|
104
104
|
|
@@ -122,7 +122,7 @@ export default defineConfig(async ({ env, command }) => {
|
|
122
122
|
|
123
123
|
Modern.js 命令行支持通过 `--config` 选项来指定配置文件的名称。
|
124
124
|
|
125
|
-
例如,你需要在执行 build 命令时使用 `modern.prod.config.ts` 文件,可以在 `package.json` 中添加如下配置:
|
125
|
+
例如,你需要在执行 `build` 命令时使用 `modern.prod.config.ts` 文件,可以在 `package.json` 中添加如下配置:
|
126
126
|
|
127
127
|
```json title="package.json"
|
128
128
|
{
|
@@ -159,7 +159,7 @@ $ modern build -c modern.prod.config.js
|
|
159
159
|
|
160
160
|
### 注意事项
|
161
161
|
|
162
|
-
- 不建议同时使用 `package.json` 和 `modern.config.js` 进行配置。如果同时使用了两者并出现配置冲突,Modern.js
|
162
|
+
- 不建议同时使用 `package.json` 和 `modern.config.js` 进行配置。如果同时使用了两者并出现配置冲突,Modern.js 会在命令行进行提示错误。
|
163
163
|
- `@modern-js/runtime` 导出了同名的 [defineConfig](/apis/app/runtime/app/define-config) API,请注意区分。
|
164
164
|
|
165
165
|
## 本地调试配置
|
@@ -7,8 +7,7 @@ sidebar_position: 6
|
|
7
7
|
代码分割是优化前端资源加载的一种常用手段,本文将介绍 Modern.js 支持的三种代码分割方式:
|
8
8
|
|
9
9
|
:::info
|
10
|
-
使用 Modern.js [约定式路由](/guides/basic-features/routes#约定式路由)
|
11
|
-
|
10
|
+
使用 Modern.js [约定式路由](/guides/basic-features/routes#约定式路由)时,默认会根据路由组件做代码分割,无需自行进行代码分割。
|
12
11
|
:::
|
13
12
|
|
14
13
|
- `import`
|
@@ -17,7 +16,7 @@ sidebar_position: 6
|
|
17
16
|
|
18
17
|
## import
|
19
18
|
|
20
|
-
使用动态 `import()`
|
19
|
+
使用动态 `import()` 语法,传入的 JS 模块将会被被打包到单独的 JS 文件中。例如:
|
21
20
|
|
22
21
|
```ts
|
23
22
|
import('./math').then(math => {
|
@@ -25,15 +24,14 @@ import('./math').then(math => {
|
|
25
24
|
});
|
26
25
|
```
|
27
26
|
|
28
|
-
`./math` 路径对应的 JS 模块会被打包到单独的 JS 文件中。
|
29
|
-
|
30
27
|
## React.lazy
|
31
28
|
|
32
29
|
React 官方提供的组件代码分割的方式。
|
33
30
|
|
34
31
|
:::caution
|
35
|
-
React
|
32
|
+
`React.lazy` 通常配合 `<Suspense>` 使用,因此仅在 CSR 或 React 18 Streaming SSR 中可用。
|
36
33
|
|
34
|
+
对于使用传统 SSR(字符串渲染)的项目,不支持 `React.lazy`,请使用 Loadable API。
|
37
35
|
:::
|
38
36
|
|
39
37
|
```ts
|
@@ -56,11 +54,11 @@ function MyComponent() {
|
|
56
54
|
}
|
57
55
|
```
|
58
56
|
|
59
|
-
`React.lazy` 更多用法请见 [React
|
57
|
+
`React.lazy` 更多用法请见 [React 官网文档](https://zh-hans.react.dev/reference/react/lazy)。
|
60
58
|
|
61
|
-
##
|
59
|
+
## Loadable
|
62
60
|
|
63
|
-
|
61
|
+
在 Modern.js 中,可以从 `@modern-js/runtime/loadable` 中导出使用 Loadable API,示例如下:
|
64
62
|
|
65
63
|
```ts
|
66
64
|
import loadable from '@modern-js/runtime/loadable';
|
@@ -72,9 +70,12 @@ function MyComponent() {
|
|
72
70
|
}
|
73
71
|
```
|
74
72
|
|
75
|
-
`loadable
|
73
|
+
Modern.js 开箱即用的支持在 SSR 中使用 `loadable`,无需再添加 Babel 插件,或是在 SSR 时向 HTML 中注入脚本。
|
76
74
|
|
77
|
-
|
78
|
-
`loadable` 开箱即用的支持 SSR,但不支持和 Suspense 一起使用,如果是 CSR 项目可以使用 [loadable.lazy](https://loadable-components.com/docs/suspense/)
|
75
|
+
但需要注意的是,任何 Loadable API 在 SSR 中都不支持配合 `<Suspense>` 使用。
|
79
76
|
|
77
|
+
:::info
|
78
|
+
如果希望在 React 17 及以下的 CSR 项目中使用 `<Suspense>`,可以用 [loadable.lazy](https://loadable-components.com/docs/suspense/) 代替 `React.lazy`。
|
80
79
|
:::
|
80
|
+
|
81
|
+
更多用法请见 [Loadable API](/apis/app/runtime/utility/loadable)。
|
@@ -74,7 +74,7 @@ Warning: Expected server HTML to contain a matching <div> in <div>.
|
|
74
74
|
这是 React 在客户端执行 hydrate 逻辑时,发现渲染结果与 SSR 渲染结果不一致造成的。虽然页面表现正常,但在复杂应用中,很有可能因此出现 DOM 层级混乱、样式混乱等问题。
|
75
75
|
|
76
76
|
:::info
|
77
|
-
关于 hydrate (注水)逻辑请参考[这里](https://
|
77
|
+
关于 hydrate (注水)逻辑请参考[这里](https://zh-hans.react.dev/reference/react-dom/hydrate)。
|
78
78
|
|
79
79
|
:::
|
80
80
|
|
@@ -447,7 +447,7 @@ export default Page;
|
|
447
447
|
```
|
448
448
|
|
449
449
|
`Await` 需要包裹在 `Suspense` 组件内部,`Await` 的 `resolve` 传入的是 Data Loader 异步获取的数据,当数据获取完成后,
|
450
|
-
通过 [Render Props](https://
|
450
|
+
通过 [Render Props](https://zh-hans.react.dev/reference/react/cloneElement#passing-data-with-a-render-prop) 模式,渲染获取到的数据。在数据的获取阶段,将展示
|
451
451
|
`Suspense` 组件 `fallback` 属性设置的内容。
|
452
452
|
|
453
453
|
:::warning 注意
|
@@ -8,14 +8,14 @@ Modern.js 默认集成了 [Jest](https://jestjs.io/) 的测试能力。
|
|
8
8
|
|
9
9
|
我们首先需要执行 `pnpm run new` 启用「单元测试 / 集成测试」功能:
|
10
10
|
|
11
|
-
```
|
11
|
+
```bash
|
12
12
|
? 请选择你想要的操作 启用可选功能
|
13
13
|
? 请选择功能名称 启用「单元测试 / 集成测试」功能
|
14
14
|
```
|
15
15
|
|
16
|
-
执行上述命令后,`package.json`
|
16
|
+
执行上述命令后,`package.json` 中将会自动添加 `"test": "modern test"` 命令。
|
17
17
|
|
18
|
-
在 `modern.config.ts` 中注册
|
18
|
+
在 `modern.config.ts` 中注册 `@modern-js/plugin-testing` 插件后即可使用测试功能:
|
19
19
|
|
20
20
|
```ts title="modern.config.ts"
|
21
21
|
import testPlugin from '@modern-js/plugin-testing';
|
@@ -36,7 +36,7 @@ Modern.js 默认识别的测试文件路径为:`<rootDir>/src/**/*.test.[jt]s?
|
|
36
36
|
|
37
37
|
Modern.js test 支持使用 [testing-library](https://testing-library.com/docs/) 相关包 API,可直接通过 `@modern-js/runtime/testing` 进行导入:
|
38
38
|
|
39
|
-
```
|
39
|
+
```ts
|
40
40
|
import { render, screen } from '@modern-js/runtime/testing';
|
41
41
|
```
|
42
42
|
|
@@ -14,7 +14,7 @@ Modern.js 允许在 JS 和 CSS 中使用别名导入自定义目录下的模块
|
|
14
14
|
```
|
15
15
|
|
16
16
|
:::info
|
17
|
-
|
17
|
+
在开启可选功能时,new 命令也会动态的添加内置别名,例如启用 BFF 时默认会添加 `@api` 别名。
|
18
18
|
|
19
19
|
:::
|
20
20
|
|
@@ -27,7 +27,7 @@ Modern.js 允许在 JS 和 CSS 中使用别名导入自定义目录下的模块
|
|
27
27
|
│ │ └── base.css
|
28
28
|
│ └── utils
|
29
29
|
│ └── index.ts
|
30
|
-
|
30
|
+
└── App.tsx
|
31
31
|
```
|
32
32
|
|
33
33
|
`src/App.tsx` 中写法如下:
|
@@ -37,7 +37,9 @@ import utils from '@/src/common/utils';
|
|
37
37
|
import '@/src/common/styles/base.css';
|
38
38
|
```
|
39
39
|
|
40
|
-
Modern.js 也提供了自定义别名的方式,以添加 `@common`
|
40
|
+
Modern.js 也提供了自定义别名的方式,以添加 `@common` 别名为例:
|
41
|
+
|
42
|
+
对于 TypeScript 项目,只需要在项目根目录 `tsconfig.json` 下配置 `compilerOptions.paths`:
|
41
43
|
|
42
44
|
```json
|
43
45
|
{
|
@@ -9,7 +9,7 @@ Modern.js 提供了 **JSX 语法**和 **HTML(EJS) 语法**两种方式用于自
|
|
9
9
|
|
10
10
|
## JSX 语法
|
11
11
|
|
12
|
-
Modern.js 约定,在 `src/`
|
12
|
+
Modern.js 约定,在 `src/` 或入口目录下,可以创建 `Document.[jt]sx` 文件并默认导出组件,该组件的渲染结果可以作为入口的 HTML 模板。
|
13
13
|
|
14
14
|
例如以下目录结构:
|
15
15
|
|
@@ -27,17 +27,17 @@ Modern.js 约定,在 `src/` 目录下,或在入口目录下,可以创建 `
|
|
27
27
|
|
28
28
|
`entry-a` 会优先使用当前入口下的 `Docoument.[jt]sx` 文件。如果当前入口没有 `Document.[jt]sx` 文件,例如 `entry-b`,则会查找根目录下的 `Document.[jt]sx` 文件。
|
29
29
|
|
30
|
-
|
30
|
+
如果未找到,将会使用 Modern.js 的默认模板。
|
31
31
|
|
32
32
|
### HTML 组件
|
33
33
|
|
34
|
-
Modern.js 提供了一些列渲染页面的组件,用来帮助开发者生成模板,可以从 `@modern-js/runtime/document`
|
34
|
+
Modern.js 提供了一些列渲染页面的组件,用来帮助开发者生成模板,可以从 `@modern-js/runtime/document` 中使用这些组件:
|
35
35
|
|
36
36
|
```tsx
|
37
37
|
import { Html, Body, Root, Head, Scripts } from '@modern-js/runtime/document';
|
38
38
|
```
|
39
39
|
|
40
|
-
|
40
|
+
这些组件分别用于渲染:
|
41
41
|
|
42
42
|
- `Html`:提供原生 HTML Element 的能力,并能默认渲染开发者未添加的必须的组件。`<Head>` 和 `<Body>` 是必须要存在的,其它组件可以按需选择合适的组件进行组装。
|
43
43
|
|
@@ -57,10 +57,10 @@ import { Html, Body, Root, Head, Scripts } from '@modern-js/runtime/document';
|
|
57
57
|
|
58
58
|
Modern.js 也提供了 `DocumentContext` 来提供一些配置、环境参数,方便直接获取。主要以下参数:
|
59
59
|
|
60
|
-
- `processEnv`:提供构建时的 `process.env
|
61
|
-
- `config`:Modern.js 项目的配置。目前只暴露出 output
|
62
|
-
- `entryName
|
63
|
-
- `templateParams`:HTML
|
60
|
+
- `processEnv`:提供构建时的 `process.env`。
|
61
|
+
- `config`:Modern.js 项目的配置。目前只暴露出 output 相关的配置。
|
62
|
+
- `entryName`:当前的入口名。
|
63
|
+
- `templateParams`:HTML 模板的参数(为了兼容传统模板,不推荐使用)。
|
64
64
|
|
65
65
|
### 示例
|
66
66
|
|
@@ -151,7 +151,7 @@ export default function Document(): React.ReactElement {
|
|
151
151
|
|
152
152
|
Modern.js 也支持 HTML 语法。默认情况下,Modern.js 的应用工程中会内置一份 HTML 模板,用于生成 HTML 代码。
|
153
153
|
|
154
|
-
基于 HTML 语法的模板,Modern.js
|
154
|
+
基于 HTML 语法的模板,Modern.js 提供了**自定义 HTML 片段**和**完全自定义 HTML 模板**两种方式来自定义模板。
|
155
155
|
|
156
156
|
### 自定义 HTML 片段
|
157
157
|
|
@@ -6,7 +6,7 @@ sidebar_position: 6
|
|
6
6
|
|
7
7
|
Modern.js 提供了快速生成 Mock 数据的功能,能够让前端独立自主开发,不被后端接口阻塞。
|
8
8
|
|
9
|
-
## Mock
|
9
|
+
## 启用 Mock
|
10
10
|
|
11
11
|
约定当 `config/mock` 目录下存在 `index.[jt]s` 时,会自动开启 Mock 功能,如下:
|
12
12
|
|
@@ -63,7 +63,7 @@ module.exports = {
|
|
63
63
|
|
64
64
|
:::
|
65
65
|
|
66
|
-
##
|
66
|
+
## 延迟响应
|
67
67
|
|
68
68
|
- 可以使用浏览器「 弱网模拟 」的功能实现。
|
69
69
|
- 可以通过 `setTimeout` 为单个接口设置延迟,例如:
|
@@ -105,6 +105,6 @@ Type '{}' is not assignable to type 'ReactNode'.
|
|
105
105
|
**Modern.js 框架推荐使用的 React 版本为 >= 18.0.0**,并且不同功能对 React 版本的要求有所不同。
|
106
106
|
|
107
107
|
- 如果你在使用 React 17,那么部分框架功能将无法使用,比如 Steaming SSR,因为它依赖 React 18 提供的新特性。
|
108
|
-
- 如果你仍然在使用 React 16,那么将无法使用 Modern.js 的运行时或服务端能力。你可以考虑使用 Modern.js 的构建模式,即只使用 Modern.js
|
108
|
+
- 如果你仍然在使用 React 16,那么将无法使用 Modern.js 的运行时或服务端能力。你可以考虑使用 Modern.js 的构建模式,即只使用 Modern.js 的构建能力,这种情况可以继续使用 React 16。
|
109
109
|
|
110
110
|
在 Modern.js 未来的 major 版本中,我们会逐步移除对 React 16 和 React 17 的支持。因此,请尽快升级到 React 18 以上版本。
|
package/package.json
CHANGED
@@ -15,13 +15,14 @@
|
|
15
15
|
"modern",
|
16
16
|
"modern.js"
|
17
17
|
],
|
18
|
-
"version": "2.
|
18
|
+
"version": "2.23.0",
|
19
19
|
"publishConfig": {
|
20
20
|
"registry": "https://registry.npmjs.org/",
|
21
|
-
"access": "public"
|
21
|
+
"access": "public",
|
22
|
+
"provenance": true
|
22
23
|
},
|
23
24
|
"peerDependencies": {
|
24
|
-
"@modern-js/builder-doc": "^2.
|
25
|
+
"@modern-js/builder-doc": "^2.23.0"
|
25
26
|
},
|
26
27
|
"devDependencies": {
|
27
28
|
"classnames": "^2",
|
@@ -33,9 +34,9 @@
|
|
33
34
|
"fs-extra": "^10",
|
34
35
|
"@types/node": "^16",
|
35
36
|
"@types/fs-extra": "^9",
|
36
|
-
"@modern-js/builder-doc": "2.
|
37
|
-
"@modern-js/doc-tools": "2.
|
38
|
-
"@modern-js/doc-plugin-auto-sidebar": "2.
|
37
|
+
"@modern-js/builder-doc": "2.23.0",
|
38
|
+
"@modern-js/doc-tools": "2.23.0",
|
39
|
+
"@modern-js/doc-plugin-auto-sidebar": "2.23.0"
|
39
40
|
},
|
40
41
|
"scripts": {
|
41
42
|
"dev": "modern dev",
|