@modern-js/main-doc 2.51.0 → 2.53.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.
- package/docs/en/apis/app/runtime/web-server/unstable_middleware.mdx +30 -4
- package/docs/en/guides/advanced-features/web-server.mdx +4 -2
- package/docs/en/guides/basic-features/data/data-fetch.mdx +28 -0
- package/docs/en/guides/basic-features/deploy.mdx +143 -33
- package/docs/en/guides/basic-features/routes.mdx +2 -2
- package/docs/en/guides/get-started/tech-stack.mdx +0 -6
- package/docs/en/guides/topic-detail/framework-plugin/plugin-api.mdx +1 -1
- package/docs/en/guides/topic-detail/generator/create/option.md +0 -5
- package/docs/en/guides/topic-detail/generator/create/use.mdx +1 -10
- package/docs/en/guides/topic-detail/generator/new/config.md +0 -29
- package/docs/en/guides/topic-detail/generator/new/use.md +0 -20
- package/docs/zh/apis/app/runtime/web-server/unstable_middleware.mdx +30 -4
- package/docs/zh/guides/advanced-features/web-server.mdx +1 -1
- package/docs/zh/guides/basic-features/data/data-fetch.mdx +27 -2
- package/docs/zh/guides/basic-features/deploy.mdx +140 -36
- package/docs/zh/guides/basic-features/routes.mdx +2 -2
- package/docs/zh/guides/get-started/tech-stack.mdx +0 -6
- package/docs/zh/guides/topic-detail/framework-plugin/plugin-api.mdx +1 -1
- package/docs/zh/guides/topic-detail/generator/create/option.md +0 -5
- package/docs/zh/guides/topic-detail/generator/create/use.mdx +1 -10
- package/docs/zh/guides/topic-detail/generator/new/config.md +0 -31
- package/docs/zh/guides/topic-detail/generator/new/use.md +0 -20
- package/package.json +5 -5
- package/docs/en/apis/app/runtime/testing/_category_.json +0 -4
- package/docs/en/apis/app/runtime/testing/act.mdx +0 -35
- package/docs/en/apis/app/runtime/testing/cleanup.mdx +0 -40
- package/docs/en/apis/app/runtime/testing/render.mdx +0 -71
- package/docs/en/apis/app/runtime/testing/renderApp.mdx +0 -34
- package/docs/en/configure/app/testing/_category_.json +0 -4
- package/docs/en/configure/app/testing/transformer.mdx +0 -17
- package/docs/en/configure/app/tools/jest.mdx +0 -40
- package/docs/en/guides/advanced-features/testing.mdx +0 -47
- package/docs/en/guides/topic-detail/changesets/_category_.json +0 -4
- package/docs/en/guides/topic-detail/changesets/add.mdx +0 -125
- package/docs/en/guides/topic-detail/changesets/changelog.mdx +0 -238
- package/docs/en/guides/topic-detail/changesets/commit.mdx +0 -269
- package/docs/en/guides/topic-detail/changesets/config.mdx +0 -147
- package/docs/en/guides/topic-detail/changesets/github.mdx +0 -175
- package/docs/en/guides/topic-detail/changesets/introduce.mdx +0 -56
- package/docs/en/guides/topic-detail/changesets/release-note.mdx +0 -274
- package/docs/en/guides/topic-detail/changesets/release-pre.mdx +0 -49
- package/docs/en/guides/topic-detail/changesets/release.mdx +0 -229
- package/docs/en/guides/topic-detail/model/test-model.mdx +0 -45
- package/docs/zh/apis/app/runtime/testing/_category_.json +0 -4
- package/docs/zh/apis/app/runtime/testing/act.mdx +0 -35
- package/docs/zh/apis/app/runtime/testing/cleanup.mdx +0 -40
- package/docs/zh/apis/app/runtime/testing/render.mdx +0 -71
- package/docs/zh/apis/app/runtime/testing/renderApp.mdx +0 -32
- package/docs/zh/configure/app/testing/_category_.json +0 -4
- package/docs/zh/configure/app/testing/transformer.mdx +0 -19
- package/docs/zh/configure/app/tools/jest.mdx +0 -40
- package/docs/zh/guides/advanced-features/testing.mdx +0 -47
- package/docs/zh/guides/topic-detail/changesets/_category_.json +0 -4
- package/docs/zh/guides/topic-detail/changesets/add.mdx +0 -126
- package/docs/zh/guides/topic-detail/changesets/changelog.mdx +0 -238
- package/docs/zh/guides/topic-detail/changesets/commit.mdx +0 -269
- package/docs/zh/guides/topic-detail/changesets/config.mdx +0 -147
- package/docs/zh/guides/topic-detail/changesets/github.mdx +0 -175
- package/docs/zh/guides/topic-detail/changesets/introduce.mdx +0 -56
- package/docs/zh/guides/topic-detail/changesets/release-note.mdx +0 -274
- package/docs/zh/guides/topic-detail/changesets/release-pre.mdx +0 -50
- package/docs/zh/guides/topic-detail/changesets/release.mdx +0 -231
- package/docs/zh/guides/topic-detail/model/test-model.mdx +0 -45
- package/docs/zh/guides/topic-detail/monorepo/_category_.json +0 -4
- package/docs/zh/guides/topic-detail/monorepo/create-sub-project.mdx +0 -53
- package/docs/zh/guides/topic-detail/monorepo/intro.mdx +0 -14
- package/docs/zh/guides/topic-detail/monorepo/publish.mdx +0 -69
- package/docs/zh/guides/topic-detail/monorepo/sub-project-interface.mdx +0 -143
@@ -2,18 +2,21 @@
|
|
2
2
|
sidebar_position: 15
|
3
3
|
---
|
4
4
|
|
5
|
-
#
|
5
|
+
# 部署应用
|
6
6
|
|
7
|
-
|
7
|
+
目前,Modern.js 提供了两种部署方式:
|
8
|
+
|
9
|
+
- 你可以将应用自行托管在包含 Node.js 环境的容器中,这为应用提供了部署的灵活性。
|
10
|
+
- 你也可以通过平台部署应用,目前 Modern.js 官方支持了 [Netlify](https://www.netlify.com/) 和 [Vercel](https://vercel.com/) 平台。
|
8
11
|
|
9
12
|
:::info
|
10
|
-
|
13
|
+
目前 Modern.js 仅支持在 Node.js 环境中运行,未来将提供更多运行时环境的支持。
|
11
14
|
:::
|
12
15
|
|
13
16
|
|
14
|
-
##
|
17
|
+
## 构建部署产物
|
15
18
|
|
16
|
-
执行 `modern deploy`
|
19
|
+
执行 `modern deploy` 命令将自动输出部署产物。此过程包括优化 Bundler 构建产物及产物依赖,检测当前部署平台,并自动生成可以在该平台运行的产物。
|
17
20
|
如果你希望在本地生成并测试特定部署平台的产物,可以通过设置环境变量来指定平台:
|
18
21
|
|
19
22
|
```bash
|
@@ -29,24 +32,26 @@ MODERNJS_DEPLOY=netlify npx modern deploy
|
|
29
32
|
|
30
33
|
### 单仓库项目
|
31
34
|
|
32
|
-
|
35
|
+
默认情况下,如果未检测到 Modern.js 支持的部署平台,Modern.js 将生成可以在 Node.js 环境下运行的部署产物。
|
36
|
+
|
37
|
+
你可以使用以下命令构建项目:
|
33
38
|
|
34
|
-
使用以下命令构建项目:
|
35
39
|
```bash
|
36
40
|
npx modern deploy
|
37
41
|
```
|
38
42
|
|
39
|
-
当执行 `modern deploy` 命令时,Modern.js
|
43
|
+
当执行 `modern deploy` 命令时,Modern.js 将生成可执行的部署产物,并在控制台输出以下内容:
|
40
44
|
|
41
45
|
```bash
|
42
46
|
Static directory: `.output/static`
|
43
47
|
You can preview this build by `node .output/index`
|
44
48
|
```
|
45
49
|
|
46
|
-
|
50
|
+
现在,你可以通过执行 `node .output/index` 命令来运行服务器。在 `.output/static` 目录中,存放了页面运行所需的静态资源,你可以选择将这些资源上传到 CDN 以提高访问速度。
|
47
51
|
|
48
52
|
:::info
|
49
|
-
默认情况下,运行 Modern.js
|
53
|
+
默认情况下,运行 Modern.js 服务器时会监听 8080 端口,如果你想修改监听的端口,可以指定 `PORT` 环境变量:
|
54
|
+
|
50
55
|
```
|
51
56
|
PORT=3000 node .output/index
|
52
57
|
```
|
@@ -55,36 +60,35 @@ PORT=3000 node .output/index
|
|
55
60
|
|
56
61
|
### Monorepo
|
57
62
|
|
58
|
-
对于 Monorepo
|
63
|
+
对于 Monorepo 项目,除了需要构建当前的项目外,还需要构建当前项目依赖的仓库中其他子项目。
|
59
64
|
|
60
|
-
假设当前项目的 `package.json` 中的 name 为 `app`,以 pnpm 作为
|
65
|
+
假设当前项目的 `package.json` 中的 name 为 `app`,以 pnpm 作为 Monorepo 管理工具为例,你可以在项目 `package.json` 中添加以下命令用于构建:
|
61
66
|
|
62
67
|
```json title="app/package.json"
|
63
68
|
{
|
64
69
|
"scripts": {
|
65
|
-
"
|
66
|
-
"deploy
|
70
|
+
"build:packages": "pnpm --filter 'app^...' run build",
|
71
|
+
"deploy": "pnpm run build:packages && modern deploy",
|
67
72
|
}
|
68
73
|
}
|
69
74
|
```
|
70
75
|
|
71
|
-
如果你使用 rush
|
76
|
+
如果你使用 rush 作为 Monorepo 管理工具,可以在 `package.json` 中添加以下命令:
|
72
77
|
|
73
78
|
```json
|
74
79
|
{
|
75
80
|
"scripts": {
|
76
|
-
"
|
77
|
-
"deploy
|
81
|
+
"build:packages": "rush rebuild --to-except app",
|
82
|
+
"deploy": "rushx build:packages && modern deploy",
|
78
83
|
}
|
79
84
|
}
|
80
85
|
```
|
81
86
|
|
82
|
-
|
87
|
+
构建完成后,框架会将项目中所有的依赖生成在 `.output/node_modules` 目录下。你同样可以使用 `node .output/index` 运行 Modern.js 服务器。
|
83
88
|
|
84
89
|
## Netlify
|
85
90
|
|
86
|
-
Netlify 是一个流行的
|
87
|
-
根据你的项目复杂度,可以渐进配置。
|
91
|
+
Netlify 是一个流行的 Web 开发平台,专为构建、发布和维护现代 Web 项目而设计。在 Netlify 上部署,通常需要配置 `netlify.toml` 文件,你可以根据项目复杂度,渐进地配置该文件。
|
88
92
|
|
89
93
|
### 纯前端项目
|
90
94
|
|
@@ -92,30 +96,29 @@ Netlify 是一个流行的 web 开发平台,专为构建、发布和维护现
|
|
92
96
|
|
93
97
|
```bash
|
94
98
|
./
|
95
|
-
├── src
|
99
|
+
├── src
|
96
100
|
├── modern.config.ts
|
97
101
|
├── netlify.toml
|
98
|
-
|
102
|
+
└── package.json
|
99
103
|
```
|
100
104
|
|
101
105
|
在 `netlify.toml` 中添加以下内容:
|
102
106
|
```toml
|
103
107
|
[build]
|
104
108
|
publish = "dist"
|
105
|
-
command = "
|
109
|
+
command = "modern deploy"
|
106
110
|
```
|
107
111
|
|
108
112
|
在 Netlify 平台上添加项目,部署即可。
|
109
113
|
|
110
114
|
### 全栈项目
|
111
115
|
|
112
|
-
|
113
|
-
添加以下配置:
|
116
|
+
全栈项目是指使用了自定义 Web Server、SSR、BFF 的项目,这些项目需要部署在 **Netlify Functions** 上。你需要基于上述的 `netlify.toml` 文件,添加以下配置:
|
114
117
|
|
115
118
|
```toml title="netlify.toml"
|
116
119
|
[build]
|
117
120
|
publish = "dist"
|
118
|
-
command = "
|
121
|
+
command = "modern deploy"
|
119
122
|
|
120
123
|
[functions]
|
121
124
|
directory = ".netlify/functions"
|
@@ -131,30 +134,36 @@ Netlify 是一个流行的 web 开发平台,专为构建、发布和维护现
|
|
131
134
|
|
132
135
|
### Monorepo 项目
|
133
136
|
|
134
|
-
|
135
|
-
|
137
|
+
:::info
|
138
|
+
以下指南主要针对于全栈项目,对于纯 CSR 的项目,只需要按照[纯前端项目](#纯前端项目)部署即可。
|
139
|
+
:::
|
140
|
+
|
141
|
+
对于 Monorepo 项目,除了需要构建当前的项目外,还需要构建当前项目依赖的仓库中其他子项目。这里以一个 pnpm Monorepo 仓库为例,在 Netlify 上对 Monorepo 项目进行部署。
|
136
142
|
|
137
|
-
|
143
|
+
假设 Monorepo 仓库目录结构如下:
|
138
144
|
|
139
145
|
```
|
140
|
-
|
141
|
-
├── packages
|
142
|
-
│ ├── app
|
146
|
+
.
|
147
|
+
├── packages
|
148
|
+
│ ├── app
|
143
149
|
│ └── app-dep1
|
144
150
|
├── package.json
|
145
151
|
├── pnpm-lock.yaml
|
146
152
|
└── pnpm-workspace.yaml
|
147
153
|
```
|
148
154
|
|
149
|
-
|
155
|
+
你需要在 Netlify 平台上配置 **Base directory** 为 `packages/app`:
|
150
156
|
|
151
157
|
<img src="https://sf16-sg.tiktokcdn.com/obj/eden-sg/lmeh7nuptpfnuhd/netlify-monorepo-basedir.png?x-resource-account=public" />
|
152
158
|
|
153
159
|
在 `packages/app/package.json` 中添加以下 script,在执行 `app` 仓库的部署命令之前,先执行 workspace 中其他仓库的构建:
|
154
160
|
|
155
161
|
```json
|
156
|
-
|
157
|
-
"
|
162
|
+
{
|
163
|
+
"scripts": {
|
164
|
+
"build:packages": "pnpm --filter 'app^...' run build",
|
165
|
+
"deploy": "pnpm run build:packages && modern deploy",
|
166
|
+
}
|
158
167
|
}
|
159
168
|
```
|
160
169
|
|
@@ -163,7 +172,7 @@ Netlify 是一个流行的 web 开发平台,专为构建、发布和维护现
|
|
163
172
|
```toml
|
164
173
|
[build]
|
165
174
|
publish = "dist"
|
166
|
-
command = "npm run deploy
|
175
|
+
command = "npm run deploy"
|
167
176
|
|
168
177
|
[functions]
|
169
178
|
directory = ".netlify/functions"
|
@@ -173,5 +182,100 @@ Netlify 是一个流行的 web 开发平台,专为构建、发布和维护现
|
|
173
182
|
|
174
183
|
提交你的代码,使用 Netlify 平台部署即可。
|
175
184
|
|
185
|
+
## Vercel
|
186
|
+
|
187
|
+
Vercel 是一个面向现代 Web 应用的部署平台,它提供了丰富的功能,支持部署静态网站,服务端渲染应用等。在 Vercel 上部署,通常需要配置 `vercel.json` 文件,你可以根据项目复杂度,渐进地配置该文件。
|
188
|
+
|
189
|
+
### 纯前端项目
|
190
|
+
|
191
|
+
在当前项目的根目录添加 `vercel.json` 文件:
|
192
|
+
```bash
|
193
|
+
./
|
194
|
+
├── src
|
195
|
+
├── modern.config.ts
|
196
|
+
├── vercel.json
|
197
|
+
└── package.json
|
198
|
+
```
|
199
|
+
|
200
|
+
在 `vercel.json` 中添加以下内容:
|
201
|
+
```json title="vercel.json"
|
202
|
+
{
|
203
|
+
"buildCommand": "modern deploy",
|
204
|
+
"outputDirectory": ".vercel/output"
|
205
|
+
}
|
206
|
+
```
|
207
|
+
|
208
|
+
提交你的项目到 git,在 Vercel 平台上选择 Frmeworkwork Preset 为 `Other`,部署即可。
|
209
|
+
|
210
|
+
<img src="https://sf16-sg.tiktokcdn.com/obj/eden-sg/lmeh7nuptpfnuhd/vercel-framework-preset.png" />
|
211
|
+
|
212
|
+
### 全栈项目
|
213
|
+
|
214
|
+
全栈项目是指使用了自定义 Web Server、SSR、BFF 的项目,这些项目需要部署在 **Vercel Functions** 上。
|
215
|
+
|
216
|
+
全栈项目除了按照[纯前端项目](#纯前端项目)的方式配置 `vercel.json` 外,有两点需要注意:
|
217
|
+
|
218
|
+
1. 当前,Modern.js 还不支持在 Vercel 平台上部署 BFF 项目,我们将在后续的版本中支持。
|
219
|
+
2. Vercel 平台部署时,默认 node 运行时为 `20.x`,部署全栈项目时建议选择 `18.x`,具体原因详见[Serverless Function contains invalid runtime error](https://vercel.com/guides/serverless-function-contains-invalid-runtime-error),你可以修改 `package.json` 指定版本:
|
220
|
+
```json title="package.json"
|
221
|
+
"engines": {
|
222
|
+
"node": "18.x"
|
223
|
+
}
|
224
|
+
```
|
225
|
+
|
226
|
+
|
227
|
+
### Monorepo 项目
|
228
|
+
|
229
|
+
:::info
|
230
|
+
以下指南主要针对于全栈项目,对于纯 CSR 的项目,只需要按照[纯前端项目](#纯前端项目-1)部署即可。
|
231
|
+
:::
|
232
|
+
|
233
|
+
对于 Monorepo 项目,除了需要构建当前的项目外,还需要构建当前项目依赖的仓库中其他子项目。这里以一个 pnpm Monorepo 仓库为例,在 Vercel 上对 Monorepo 项目进行部署。
|
234
|
+
|
235
|
+
假设 Monorepo 仓库目录结构如下:
|
236
|
+
|
237
|
+
```
|
238
|
+
.
|
239
|
+
├── packages
|
240
|
+
│ ├── app
|
241
|
+
│ └── app-dep1
|
242
|
+
├── package.json
|
243
|
+
├── pnpm-lock.yaml
|
244
|
+
└── pnpm-workspace.yaml
|
245
|
+
```
|
246
|
+
|
247
|
+
首先,你需要在 Vercel 平台上配置 **Root Directory** 为 `packages/app`:
|
248
|
+
|
249
|
+
<img src="https://sf16-sg.tiktokcdn.com/obj/eden-sg/lmeh7nuptpfnuhd/vercel-root-directory.png" />
|
250
|
+
|
251
|
+
将 Node.js 运行时设置为 `18.x`:
|
252
|
+
```json title="package.json"
|
253
|
+
"engines": {
|
254
|
+
"node": "18.x"
|
255
|
+
},
|
256
|
+
```
|
257
|
+
|
258
|
+
在 `packages/app/package.json` 中添加以下 script,在执行 `app` 仓库的部署命令之前,先执行 workspace 中其他仓库的构建:
|
259
|
+
|
260
|
+
```json
|
261
|
+
{
|
262
|
+
"scripts": {
|
263
|
+
"build:packages": "pnpm --filter 'app^...' run build",
|
264
|
+
"deploy": "pnpm run build:packages && modern deploy",
|
265
|
+
}
|
266
|
+
}
|
267
|
+
```
|
268
|
+
|
269
|
+
在 `packages/app/vercel.json` 文件中添加以下内容:
|
270
|
+
```json title="vercel.json"
|
271
|
+
{
|
272
|
+
"buildCommand": "npm run deploy",
|
273
|
+
"outputDirectory": ".vercel/output"
|
274
|
+
}
|
275
|
+
```
|
276
|
+
|
277
|
+
提交你的代码,使用 Vercel 平台部署即可。
|
278
|
+
|
279
|
+
|
176
280
|
|
177
281
|
|
@@ -460,8 +460,8 @@ export const init = (context: RuntimeContext) => {
|
|
460
460
|
import { useRuntimeContext } from '@modern-js/runtime';
|
461
461
|
|
462
462
|
export default () => {
|
463
|
-
const
|
464
|
-
const { message } = context.
|
463
|
+
const context = useRuntimeContext();
|
464
|
+
const { message } = context.initialData;
|
465
465
|
|
466
466
|
return <div>{message}</div>;
|
467
467
|
};
|
@@ -83,12 +83,6 @@ Modern.js 支持使用 [styled-components](https://styled-components.com/),请
|
|
83
83
|
|
84
84
|
如果你需要使用其他 CSS-in-JS 方案,可以自行集成到你的项目中。
|
85
85
|
|
86
|
-
## 测试框架
|
87
|
-
|
88
|
-
Modern.js 支持使用 [Jest](https://jestjs.io/) 进行单元测试或集成测试。该功能为可选功能,请参考[「使用 Jest 测试」](/guides/advanced-features/testing) 启用。
|
89
|
-
|
90
|
-
如果你需要使用 [Vitest](https://vitest.dev/) 或其他测试框架,可以自行集成到你的项目中。
|
91
|
-
|
92
86
|
## 组件库
|
93
87
|
|
94
88
|
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/) 等。
|
@@ -105,7 +105,7 @@ interface IAppContext {
|
|
105
105
|
/** 服务端路由信息 */
|
106
106
|
serverRoutes: ServerRoute[];
|
107
107
|
/** 当前项目类型 */
|
108
|
-
toolsType?: 'app-tools' | 'module-tools'
|
108
|
+
toolsType?: 'app-tools' | 'module-tools';
|
109
109
|
/** 当前使用的打包工具类型 */
|
110
110
|
bundlerType?: 'webpack' | 'rspack' | 'esbuild';
|
111
111
|
}
|
@@ -20,7 +20,6 @@ Options:
|
|
20
20
|
-d,--debug 开启 Debug 模式,打印调试日志信息 (default: false)
|
21
21
|
--mwa 一键创建 Web 应用(使用默认配置) (default: false)
|
22
22
|
--module 一键创建 Module 应用(使用默认配置) (default: false)
|
23
|
-
--monorepo 一键创建 Monorepo 应用(使用默认配置) (default: false)
|
24
23
|
--generator <generator> 使用自定义生成器
|
25
24
|
-p, --plugin <plugin> 使用生成器插件创建新的工程方案类型或定制化 Modern.js 工程方案 (default: [])
|
26
25
|
--dist-tag <distTag> 生成项目时生成器使用特殊的 npm Tag (default: "")
|
@@ -89,10 +88,6 @@ npx @modern-js/create@latest --config '{"packageManager": "pnpm"}'
|
|
89
88
|
|
90
89
|
快速创建 Npm 模块项目。
|
91
90
|
|
92
|
-
## --monorepo
|
93
|
-
|
94
|
-
快速创建 Monorepo 项目。
|
95
|
-
|
96
91
|
## -p, --plugin \<plugin>
|
97
92
|
|
98
93
|
指定生成器插件。
|
@@ -4,7 +4,7 @@ sidebar_position: 1
|
|
4
4
|
|
5
5
|
# 使用
|
6
6
|
|
7
|
-
Modern.js 提供了 `@modern-js/create` 工具用于创建 Modern.js 提供的工程方案项目,例如 [Web 应用](https://modernjs.dev/)、[Npm 模块](https://modernjs.dev/module-tools)
|
7
|
+
Modern.js 提供了 `@modern-js/create` 工具用于创建 Modern.js 提供的工程方案项目,例如 [Web 应用](https://modernjs.dev/)、[Npm 模块](https://modernjs.dev/module-tools)。
|
8
8
|
|
9
9
|
下面将介绍 `@modern-js/create` 的使用姿势。
|
10
10
|
|
@@ -47,12 +47,3 @@ npx @modern-js/create@latest npm-module
|
|
47
47
|
? 请选择开发语言 TS
|
48
48
|
? 请选择包管理工具 pnpm
|
49
49
|
```
|
50
|
-
|
51
|
-
### 创建 Monorepo
|
52
|
-
|
53
|
-
```bash
|
54
|
-
npx @modern-js/create@latest monorepo
|
55
|
-
? 请选择你想创建的工程类型 Monorepo
|
56
|
-
? 请选择包管理工具 pnpm
|
57
|
-
```
|
58
|
-
|
@@ -60,8 +60,6 @@ sidebar_position: 3
|
|
60
60
|
|
61
61
|
- 启用「微前端」模式 -- micro_frontend
|
62
62
|
|
63
|
-
- 启用「单元测试 / 集成测试」功能 -- test
|
64
|
-
|
65
63
|
- 启用「基于 UA 的 Polyfill」功能 -- polyfill
|
66
64
|
|
67
65
|
- 启用「全局代理」 -- proxy
|
@@ -111,37 +109,8 @@ sidebar_position: 3
|
|
111
109
|
|
112
110
|
选项:
|
113
111
|
|
114
|
-
- 启用「单元测试 / 集成测试」功能 -- test
|
115
|
-
|
116
112
|
- 启用 「Tailwind CSS」 支持 -- tailwindcss
|
117
113
|
|
118
114
|
- 启用「Storybook」 -- storybook
|
119
115
|
|
120
116
|
- 启用「Runtime API」 -- runtime_api
|
121
|
-
|
122
|
-
## Monorepo
|
123
|
-
|
124
|
-
### sub_solution
|
125
|
-
|
126
|
-
问题:请选择你想创建的工程类型
|
127
|
-
|
128
|
-
选项:
|
129
|
-
|
130
|
-
- Web 应用 -- mwa
|
131
|
-
- Npm 模块 -- module
|
132
|
-
|
133
|
-
### packageName
|
134
|
-
|
135
|
-
问题:请填写子项目名称
|
136
|
-
|
137
|
-
:::info
|
138
|
-
子项目的 `package.json` 的 name 字段值,该配置值为字符串类型。
|
139
|
-
:::
|
140
|
-
|
141
|
-
### packagePath
|
142
|
-
|
143
|
-
问题:请填写子项目目录名称
|
144
|
-
|
145
|
-
:::info
|
146
|
-
子项目基于 apps 或者 packages 目录的子目录名称,该字段为字符串类型。
|
147
|
-
:::
|
@@ -72,23 +72,3 @@ npm run new
|
|
72
72
|
```
|
73
73
|
|
74
74
|
执行完成后将会在项目安装 Storybook 插件相关依赖,增加 `storybook` 命令,创建 `stories` 目录用于 Storybook 模块的开发并提供提示信息用于注册 Storybook 插件。
|
75
|
-
|
76
|
-
## Monorepo
|
77
|
-
|
78
|
-
Monorepo 项目通过 `@modern-js/monorepo-tools` 提供 new 命令。
|
79
|
-
|
80
|
-
new 命令提供了创建子项目的能力。
|
81
|
-
|
82
|
-
例如:
|
83
|
-
|
84
|
-
创建 Web 应用子项目:
|
85
|
-
|
86
|
-
```bash
|
87
|
-
? 请选择你想创建的工程类型 Web 应用
|
88
|
-
? 请填写子项目名称 web_app
|
89
|
-
? 请填写子项目目录名称 web_app
|
90
|
-
? 请选择开发语言 TS
|
91
|
-
? 请选择构建工具 webpack
|
92
|
-
```
|
93
|
-
|
94
|
-
执行完成后将会在项目 apps 目录创建 `web_app` 的子项目,在子项目目录中依然可以执行 new 命令创建项目元素和开启功能。
|
package/package.json
CHANGED
@@ -15,17 +15,17 @@
|
|
15
15
|
"modern",
|
16
16
|
"modern.js"
|
17
17
|
],
|
18
|
-
"version": "2.
|
18
|
+
"version": "2.53.0",
|
19
19
|
"publishConfig": {
|
20
20
|
"registry": "https://registry.npmjs.org/",
|
21
21
|
"access": "public",
|
22
22
|
"provenance": true
|
23
23
|
},
|
24
24
|
"dependencies": {
|
25
|
-
"@modern-js/sandpack-react": "2.
|
25
|
+
"@modern-js/sandpack-react": "2.53.0"
|
26
26
|
},
|
27
27
|
"peerDependencies": {
|
28
|
-
"@modern-js/builder-doc": "^2.
|
28
|
+
"@modern-js/builder-doc": "^2.53.0"
|
29
29
|
},
|
30
30
|
"devDependencies": {
|
31
31
|
"classnames": "^2",
|
@@ -39,8 +39,8 @@
|
|
39
39
|
"@rspress/shared": "1.18.2",
|
40
40
|
"@types/node": "^16",
|
41
41
|
"@types/fs-extra": "9.0.13",
|
42
|
-
"@modern-js/builder-doc": "2.
|
43
|
-
"@modern-js/doc-plugin-auto-sidebar": "2.
|
42
|
+
"@modern-js/builder-doc": "2.53.0",
|
43
|
+
"@modern-js/doc-plugin-auto-sidebar": "2.53.0"
|
44
44
|
},
|
45
45
|
"scripts": {
|
46
46
|
"dev": "rspress dev",
|
@@ -1,35 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: act
|
3
|
-
---
|
4
|
-
# act
|
5
|
-
|
6
|
-
Used to ensure that behaviors such as rendering, events, data fetching, etc. have been applied to the DOM.
|
7
|
-
|
8
|
-
## Usage
|
9
|
-
|
10
|
-
```ts
|
11
|
-
import { act } from '@modern-js/runtime/testing';
|
12
|
-
```
|
13
|
-
|
14
|
-
## Function Signature
|
15
|
-
|
16
|
-
`act` is the same as [react-dom/test-utils act function](https://reactjs.org/docs/testing-recipes.html#act).
|
17
|
-
|
18
|
-
## Example
|
19
|
-
|
20
|
-
```tsx
|
21
|
-
import ReactDOM from 'react-dom';
|
22
|
-
import { act } from '@modern-js/runtime/testing';
|
23
|
-
import { Foo } from '@/components/Foo';
|
24
|
-
|
25
|
-
describe('test act', () => {
|
26
|
-
it('it should be foo', () => {
|
27
|
-
const el = document.createElement('div');
|
28
|
-
act(() => {
|
29
|
-
ReactDOM.render(<Foo />, el);
|
30
|
-
});
|
31
|
-
|
32
|
-
expect(el.innerHTML).toBe('<div>Foo</div>');
|
33
|
-
});
|
34
|
-
});
|
35
|
-
```
|
@@ -1,40 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: cleanup
|
3
|
-
sidebar_position: 3
|
4
|
-
---
|
5
|
-
# cleanup
|
6
|
-
|
7
|
-
Used to uninstall all currently rendered components.
|
8
|
-
|
9
|
-
## Usage
|
10
|
-
|
11
|
-
```ts
|
12
|
-
import { cleanup } from '@modenr-js/runtime/testing';
|
13
|
-
```
|
14
|
-
|
15
|
-
## Function Signature
|
16
|
-
|
17
|
-
`function cleanup(): void`
|
18
|
-
|
19
|
-
## Example
|
20
|
-
|
21
|
-
:::info
|
22
|
-
Note that if you are using a testing framework that supports afterEach and it is injected into your testing environment (such as mocha, Jest, and Jasmine), **will execute `cleanup`** in the afterEach hook by default. Otherwise, you will need to do manual cleanup after each test.
|
23
|
-
|
24
|
-
:::
|
25
|
-
|
26
|
-
For example, if you use the [ava](https://github.com/avajs/ava) test framework, then you need to use the `test.after Each` hook like this.
|
27
|
-
|
28
|
-
```tsx
|
29
|
-
import { cleanup, render } from '@modern-js/runtime/testing';
|
30
|
-
import test from 'ava';
|
31
|
-
|
32
|
-
test.afterEach(cleanup);
|
33
|
-
|
34
|
-
test('renders into document', () => {
|
35
|
-
render(<div />);
|
36
|
-
// ...
|
37
|
-
});
|
38
|
-
|
39
|
-
// ... more tests ...
|
40
|
-
```
|
@@ -1,71 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: render
|
3
|
-
---
|
4
|
-
# render
|
5
|
-
|
6
|
-
Used to render the component in the test case.
|
7
|
-
|
8
|
-
## Usage
|
9
|
-
|
10
|
-
```ts
|
11
|
-
import { render } from '@modern-js/runtime/testing';
|
12
|
-
```
|
13
|
-
|
14
|
-
## Function Signature
|
15
|
-
|
16
|
-
```ts
|
17
|
-
type Options = {
|
18
|
-
container: DOMElement;
|
19
|
-
baseElement: DOMElement;
|
20
|
-
hydrate: boolean;
|
21
|
-
warpper: React.ComponentType<{children: ReactNode}>;
|
22
|
-
queries: any;
|
23
|
-
};
|
24
|
-
|
25
|
-
type RenderResult = {
|
26
|
-
{...queries}: any;
|
27
|
-
container: DOMElement;
|
28
|
-
baseElement: DOMElement;
|
29
|
-
debug: function;
|
30
|
-
rerender: function;
|
31
|
-
unmount: function;
|
32
|
-
asFragment: function;
|
33
|
-
}
|
34
|
-
|
35
|
-
function render(ui: React.ReactElement<any>, options: Options): RenderResult;
|
36
|
-
```
|
37
|
-
|
38
|
-
### Input
|
39
|
-
|
40
|
-
- `ui`: the React component that needs to be rendered.
|
41
|
-
- `options`: render options.
|
42
|
-
- `container`: the dom which component mounted. by default create a `div` element, and auto append to `document.body`. the default value is `document.body.append(document.createElement('div'))`.
|
43
|
-
- `baseElement`: Used to specify the `basename` used in `queries`. If `container` is specified, the default value is the value of `container`, otherwise it is `document.body`.
|
44
|
-
- `hydrate`: If set to `true`, the [ReactDOM.hydrate](https://react.dev/reference/react-dom/hydrate) rendering component is used. The default value is `false`.
|
45
|
-
- `wrapper`: a react component that can be used to customize rendering logic.
|
46
|
-
- `queries`: customize some own `queries`.
|
47
|
-
|
48
|
-
### Return Value
|
49
|
-
|
50
|
-
- `{...queries}`: all available [queries](https://testing-library.com/docs/queries/about/).
|
51
|
-
- `container`: the DOM element that React component mounted.
|
52
|
-
- `baseElement`
|
53
|
-
- `debug`
|
54
|
-
- `rerender`: if you want to test some scene when a rendered component is updated, you can use rerender for reality.
|
55
|
-
- `unmount`: unmount rendered components. This API is helpful if you want to test what happens after the component is unmounted.
|
56
|
-
- `asFragment`: return the [DocumentFragment](https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment) of rendered component. used to test the response of the DOM structure after the react event is triggered.
|
57
|
-
|
58
|
-
## Example
|
59
|
-
|
60
|
-
```ts
|
61
|
-
import { render } from '@modern-js/runtime/testing';
|
62
|
-
import App from './App';
|
63
|
-
|
64
|
-
test('renders a message', () => {
|
65
|
-
const { container, getByText } = render(<App />);
|
66
|
-
expect(getByText('Hello, world!')).toBeInTheDocument();
|
67
|
-
expect(container.firstChild).toMatchInlineSnapshot(`
|
68
|
-
<h1>Hello, World!</h1>
|
69
|
-
`);
|
70
|
-
});
|
71
|
-
```
|
@@ -1,34 +0,0 @@
|
|
1
|
-
---
|
2
|
-
title: renderApp
|
3
|
-
---
|
4
|
-
# renderApp
|
5
|
-
|
6
|
-
The `render` function is used to test normal components, and the `renderApp` function is used to test App components.
|
7
|
-
|
8
|
-
## Usage
|
9
|
-
|
10
|
-
```ts
|
11
|
-
import { renderApp } from '@modern-js/runtime/testing';
|
12
|
-
```
|
13
|
-
|
14
|
-
App components refer to components that contain some Modern.js contexts, such as App root components, Containers using Models, etc.
|
15
|
-
|
16
|
-
For the testing of such components, you can use the `renderApp` function, which will automatically wrap the context information according to the current `modern.config.js`.
|
17
|
-
|
18
|
-
## Function Signature
|
19
|
-
|
20
|
-
`renderApp` is the same as [render](./render.mdx).
|
21
|
-
|
22
|
-
## Example
|
23
|
-
|
24
|
-
```ts
|
25
|
-
import { renderApp } from '@modern-js/runtime/testing';
|
26
|
-
import App from './App';
|
27
|
-
|
28
|
-
describe('test', () => {
|
29
|
-
it('test App', () => {
|
30
|
-
const { getByText } = renderApp(<App />);
|
31
|
-
expect(getByText('Hello Modern!')).toBeInTheDocument();
|
32
|
-
});
|
33
|
-
});
|
34
|
-
```
|