@modern-js/main-doc 2.51.0 → 2.53.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -1,274 +0,0 @@
|
|
1
|
-
---
|
2
|
-
sidebar_position: 8
|
3
|
-
---
|
4
|
-
|
5
|
-
# 自定义 Release Note 格式
|
6
|
-
|
7
|
-
Modern.js 提供了 `modern gen-release-note` 命令,支持通过当前存在的 changeset 和 git commit 信息自动生成 Release Note 信息,在发布命令执行之前,可以通过执行该命令生成本次发布的 Release Note。
|
8
|
-
|
9
|
-
默认生成的 Release Note 格式为:
|
10
|
-
|
11
|
-
```markdown
|
12
|
-
- fix: add missing type definitions by @zllkjc in https://github.com/web-infra-dev/modern.js/pull/3835
|
13
|
-
```
|
14
|
-
|
15
|
-
根据 commit 信息获取 changeset 的 Pull Request ID,并生成 Github 的链接,内容为 changeset 的 changelog 信息和作者信息。
|
16
|
-
|
17
|
-
:::info
|
18
|
-
获取作者信息,需要提供 Github Token 环境变量,通过 GITHUB_AUTH_TOKEN 传入。
|
19
|
-
:::
|
20
|
-
|
21
|
-
当默认生成 Release Note 逻辑不能满足需求时,支持自定义 Release Note 格式。
|
22
|
-
|
23
|
-
## 信息
|
24
|
-
|
25
|
-
### getReleaseInfo
|
26
|
-
|
27
|
-
生成 Release Note 信息需要先收集一些信息,比如 commit ID、Pull Request ID、commit message 等等。
|
28
|
-
|
29
|
-
该逻辑可通过 `getReleaseInfo` 函数实现。
|
30
|
-
|
31
|
-
#### Params
|
32
|
-
|
33
|
-
- commit
|
34
|
-
|
35
|
-
类型: string;
|
36
|
-
|
37
|
-
当前 changeset 对应的 commit message 信息。
|
38
|
-
|
39
|
-
执行 `git log --pretty=format:%h--%s--%ae .changeset/${changeset.id}.md` 的结果。
|
40
|
-
|
41
|
-
- commitObj
|
42
|
-
|
43
|
-
初步解析 commit 获取基本信息。
|
44
|
-
|
45
|
-
```ts
|
46
|
-
export enum CommitType {
|
47
|
-
Performance = 'performance',
|
48
|
-
Features = 'features',
|
49
|
-
BugFix = 'bugFix',
|
50
|
-
Doc = 'doc',
|
51
|
-
Other = 'other',
|
52
|
-
}
|
53
|
-
|
54
|
-
interface Commit {
|
55
|
-
id: string; // commit id
|
56
|
-
type: CommitType;
|
57
|
-
repository?: string; // 参数传入的 repo 信息或者 package.json 中定义的 repository 信息
|
58
|
-
pullRequestId?: string;
|
59
|
-
author?: string;
|
60
|
-
message: string; // commit message
|
61
|
-
summary: string; // changeset summary
|
62
|
-
summary_zh: string; // changeset zh summary
|
63
|
-
[key: string]: string | undefined;
|
64
|
-
}
|
65
|
-
```
|
66
|
-
|
67
|
-
#### 返回值
|
68
|
-
|
69
|
-
commitObj, 补充后完整的 commit 对象。
|
70
|
-
|
71
|
-
#### 默认实现
|
72
|
-
|
73
|
-
Modern.js 的默认实现为:根据 commit 信息拆分出 Pull Request ID,并根据 commit id 获取到用户信息,加入到 commitObj 中。
|
74
|
-
|
75
|
-
```ts
|
76
|
-
function getReleaseInfo(commit: string, commitObj: Commit) {
|
77
|
-
const commitRegex = /(.*)\(#(\d*)\)/;
|
78
|
-
|
79
|
-
const [commitId, message, email] = commit.split('--');
|
80
|
-
|
81
|
-
const author = AuthorMap.get(email);
|
82
|
-
const token = authToken || process.env.GITHUB_AUTH_TOKEN;
|
83
|
-
if (author) {
|
84
|
-
commitObj.author = author;
|
85
|
-
} else if (repo && token) {
|
86
|
-
try {
|
87
|
-
const res = await axios.get(
|
88
|
-
`https://api.github.com/repos/${repo}/commits/${commitId}`,
|
89
|
-
{
|
90
|
-
method: 'GET',
|
91
|
-
headers: {
|
92
|
-
'Content-Type': 'application/json',
|
93
|
-
Authorization: token,
|
94
|
-
},
|
95
|
-
},
|
96
|
-
);
|
97
|
-
const author = res.data.author.login;
|
98
|
-
commitObj.author = author;
|
99
|
-
AuthorMap.set(email, author);
|
100
|
-
} catch (e) {
|
101
|
-
console.warn(e);
|
102
|
-
}
|
103
|
-
}
|
104
|
-
|
105
|
-
if ((message || commitObj.summary).match(commitRegex)) {
|
106
|
-
const [, messageShort, pullRequestId] = (
|
107
|
-
message || commitObj.summary
|
108
|
-
).match(commitRegex)!;
|
109
|
-
commitObj.pullRequestId = pullRequestId;
|
110
|
-
commitObj.message = messageShort.trim();
|
111
|
-
}
|
112
|
-
|
113
|
-
return commitObj;
|
114
|
-
}
|
115
|
-
```
|
116
|
-
|
117
|
-
#### getReleaseNoteLine
|
118
|
-
|
119
|
-
根据 `getReleaseInfo` 中获取的 commit 对象信息,生成对应的 Release Note。
|
120
|
-
|
121
|
-
该逻辑可通过 `getReleaseNoteLine` 函数实现。
|
122
|
-
|
123
|
-
#### Params
|
124
|
-
|
125
|
-
- commit
|
126
|
-
|
127
|
-
类型和上述 commitObj 类型一致。
|
128
|
-
|
129
|
-
- lang
|
130
|
-
|
131
|
-
类型: string;
|
132
|
-
|
133
|
-
获取对应语言的 Release Note 信息,支持 `en` 和 `zh`,默认为 `en`。
|
134
|
-
|
135
|
-
#### 返回值
|
136
|
-
|
137
|
-
生成的 Release Note。
|
138
|
-
|
139
|
-
#### 默认实现
|
140
|
-
|
141
|
-
Modern.js 的默认实现为:
|
142
|
-
|
143
|
-
```ts
|
144
|
-
export function getReleaseNoteLine(
|
145
|
-
commit: Commit,
|
146
|
-
lang: 'en' | 'zh' = 'en',
|
147
|
-
) {
|
148
|
-
const { repository, pullRequestId, summary, summary_zh, author } = commit;
|
149
|
-
const pullRequest =
|
150
|
-
pullRequestId && repository
|
151
|
-
? `https://github.com/${repository}/pull/${pullRequestId}`
|
152
|
-
: '';
|
153
|
-
if (lang === 'en') {
|
154
|
-
return `- ${summary}${author ? ` by @${author}` : ''}${
|
155
|
-
pullRequest ? ` in ${pullRequest}` : ''
|
156
|
-
}\n`;
|
157
|
-
}
|
158
|
-
return `- ${summary_zh}${author ? ` 由 @${author} 实现` : ''}${
|
159
|
-
pullRequest ? `, 详情可查看 ${pullRequest}` : ''
|
160
|
-
}\n`;
|
161
|
-
}
|
162
|
-
```
|
163
|
-
|
164
|
-
## 使用自定义模块
|
165
|
-
|
166
|
-
`gen-release-note` 命令支持 `--custom` 参数,该参数可传入自定义 Release Note 模块的模块名称或者路径。
|
167
|
-
|
168
|
-
### 配置相对路径
|
169
|
-
|
170
|
-
custom 参数值如果为相对路径为**项目跟目录**。
|
171
|
-
|
172
|
-
例如创建 `scripts/my-release-note-config.js` 文件,定义如下内容:
|
173
|
-
|
174
|
-
```ts title="scripts/my-release-note-config.js"
|
175
|
-
function getReleaseInfo(commit, commitObj) {
|
176
|
-
return commitObj;
|
177
|
-
}
|
178
|
-
|
179
|
-
function getReleaseNoteLine(commit) {}
|
180
|
-
|
181
|
-
module.exports = {
|
182
|
-
getReleaseInfo,
|
183
|
-
getReleaseNoteLine,
|
184
|
-
};
|
185
|
-
```
|
186
|
-
|
187
|
-
执行下面命令:
|
188
|
-
|
189
|
-
```bash
|
190
|
-
pnpm run gen-release-note --custom ./scripts/my-release-note-config.js
|
191
|
-
```
|
192
|
-
|
193
|
-
也可以把命令参数直接定义到 `package.json` 中:
|
194
|
-
|
195
|
-
```json title="package.json"
|
196
|
-
{
|
197
|
-
"scripts": {
|
198
|
-
...
|
199
|
-
"gen-release-note": "modern gen-release-note --custom ./scripts/my-release-note-config.js"
|
200
|
-
},
|
201
|
-
...
|
202
|
-
}
|
203
|
-
```
|
204
|
-
|
205
|
-
直接执行命令 `pnpm run gen-release-note` 即可。
|
206
|
-
|
207
|
-
### 使用 Modern.js Module
|
208
|
-
|
209
|
-
custom 参数值还可以使用 Modern.js Module 进行管理,提供通用方案。
|
210
|
-
|
211
|
-
#### 使用 `npx @modern-js/create@latest` 创建 Modern.js Module
|
212
|
-
|
213
|
-
```md
|
214
|
-
? 请选择你想创建的工程类型:Npm 模块
|
215
|
-
? 请填写项目名称:custom-release-note
|
216
|
-
? 请选择开发语言:TS
|
217
|
-
? 请选择包管理工具:pnpm
|
218
|
-
```
|
219
|
-
|
220
|
-
#### 实现自定义内容
|
221
|
-
|
222
|
-
```ts title="src/index.ts"
|
223
|
-
export function getReleaseInfo() {}
|
224
|
-
|
225
|
-
export function getReleaseNoteLine() {}
|
226
|
-
```
|
227
|
-
|
228
|
-
#### 将模块发布到 NPM
|
229
|
-
#### 在目标仓库根目录安装对应模块,例如 `custom-release-note`
|
230
|
-
#### 执行 gen-release-note 命令添加 custom 参数
|
231
|
-
|
232
|
-
```bash
|
233
|
-
pnpm run gen-release-note --custom custom-release-note
|
234
|
-
```
|
235
|
-
|
236
|
-
### 使用 Monorepo 工程方案
|
237
|
-
|
238
|
-
如果你当前仓库为 Monorepo 工程方案,可以直接使用模块子项目进行管理。
|
239
|
-
|
240
|
-
#### 执行 `pnpm run new` 创建模块子项目
|
241
|
-
|
242
|
-
```md
|
243
|
-
? 请选择你想创建的工程类型:Npm 模块
|
244
|
-
? 请填写子项目名称:custom-release-note
|
245
|
-
? 请填写子项目目录名称:custom-release-note
|
246
|
-
? 请选择开发语言:TS
|
247
|
-
```
|
248
|
-
|
249
|
-
#### 实现自定义内容
|
250
|
-
|
251
|
-
```ts title="src/index.ts"
|
252
|
-
export function getReleaseInfo() {}
|
253
|
-
|
254
|
-
export function getReleaseNoteLine() {}
|
255
|
-
```
|
256
|
-
|
257
|
-
#### 在 Monorepo 根目录添加子项目模块依赖,例如 `custom-release-note`。
|
258
|
-
|
259
|
-
```json title="package.json"
|
260
|
-
{
|
261
|
-
"devDependencies": {
|
262
|
-
"custom-release-note": "workspace:*",
|
263
|
-
...
|
264
|
-
}
|
265
|
-
}
|
266
|
-
```
|
267
|
-
|
268
|
-
#### 执行 `gen-release-note` 命令添加 `--custom` 参数
|
269
|
-
|
270
|
-
```bash
|
271
|
-
pnpm run gen-release-note --custom custom-release-note
|
272
|
-
```
|
273
|
-
|
274
|
-
该模块发布到 NPM 后,依然可以和模块类型一样供其他仓库使用。
|
@@ -1,50 +0,0 @@
|
|
1
|
-
---
|
2
|
-
sidebar_position: 4
|
3
|
-
---
|
4
|
-
|
5
|
-
# 发布预发布版本
|
6
|
-
|
7
|
-
在发布正式版本之前,我们也需要发布预发布版本供内部测试和用户使用,changesets 也支持发布预发布版本。
|
8
|
-
|
9
|
-
## 步骤
|
10
|
-
|
11
|
-
:::info
|
12
|
-
以下示例命令都以 pnpm 作为包管理工具进行,如果需要使用其他包管理工具,请按需求进行替换。
|
13
|
-
|
14
|
-
:::
|
15
|
-
|
16
|
-
#### 执行 bump 命令升级预发布版本版本号
|
17
|
-
|
18
|
-
```bash
|
19
|
-
pnpm run bump --canary --preid <preid>
|
20
|
-
```
|
21
|
-
|
22
|
-
`preid` 为预发布版本标记,例如 `alpha`、`beta` 等,默认值为 `next`。
|
23
|
-
|
24
|
-
使用 `--canary` 参数后,`bump` 命令由以下三个步骤完成:
|
25
|
-
|
26
|
-
- `changeset pre enter <preid>` 进入预发布模式。
|
27
|
-
|
28
|
-
- `changeset version` 升级版本号。
|
29
|
-
|
30
|
-
- `changeset pre exit` 退出预发布模式。
|
31
|
-
|
32
|
-
#### 检查相关变更并提交
|
33
|
-
|
34
|
-
检查相关版本号变更是否正确,并提交变更。
|
35
|
-
|
36
|
-
建议预发布操作不在主分支上进行,不合入主分支,当预发布验证完成后,直接基于主分支发布正式版本。
|
37
|
-
|
38
|
-
#### 执行 release 命令发布预发布版本
|
39
|
-
|
40
|
-
```bash
|
41
|
-
pnpm run release --tag <tag>
|
42
|
-
```
|
43
|
-
|
44
|
-
发布预发布版本一定要使用 `--tag` 参数,参数值最好和 `preid` 值相同,方便用户使用。
|
45
|
-
|
46
|
-
## 注意事项
|
47
|
-
|
48
|
-
### 退出预发布模式
|
49
|
-
|
50
|
-
在进入预发布模式后,changesets 会自动在 `.changeset` 目录创建 `pre.json` 文件用于记录当时进入预发布模式的一些状态信息,当出现状态信息和当前仓库状态不一致时,可直接删除该文件退出预发布模式。
|
@@ -1,231 +0,0 @@
|
|
1
|
-
---
|
2
|
-
sidebar_position: 3
|
3
|
-
---
|
4
|
-
|
5
|
-
# 发布正式版本
|
6
|
-
|
7
|
-
发版正式版本时,我们需要根据开发过程中生成的 changesets 进行相关包版本号升级,并执行 publish 命令发布到 NPM 上。
|
8
|
-
|
9
|
-
## 步骤
|
10
|
-
|
11
|
-
:::info
|
12
|
-
以下示例命令都以 pnpm 作为包管理工具进行,如果需要使用其他包管理工具,请按需求进行替换。
|
13
|
-
|
14
|
-
:::
|
15
|
-
|
16
|
-
### Modern.js Module
|
17
|
-
|
18
|
-
#### 在根目录执行 bump 命令
|
19
|
-
|
20
|
-
```bash
|
21
|
-
pnpm run bump
|
22
|
-
```
|
23
|
-
|
24
|
-

|
25
|
-
|
26
|
-
执行该命令时,changeset 会自动进行以下操作:
|
27
|
-
|
28
|
-
- 删除 `.changesets` 目录下的所有 changeset 文件。
|
29
|
-
|
30
|
-
- 根据 changeset 信息升级该包版本号。
|
31
|
-
|
32
|
-
- 在根目录的 `CHANGELOG.md` 文件中写入 changelog 信息,文件不存在时会自动创建。
|
33
|
-
|
34
|
-
#### 确认并提交当前变更
|
35
|
-
|
36
|
-
```bash
|
37
|
-
git add .
|
38
|
-
git commit -m "release: bump package"
|
39
|
-
```
|
40
|
-
|
41
|
-
#### 在根目录执行以下命令发布包至 NPM
|
42
|
-
|
43
|
-
```bash
|
44
|
-
pnpm run release
|
45
|
-
```
|
46
|
-
|
47
|
-

|
48
|
-
|
49
|
-
#### push 对应的 tag 信息至远程仓库
|
50
|
-
|
51
|
-
```bash
|
52
|
-
git push --follow-tags
|
53
|
-
```
|
54
|
-
|
55
|
-
### Monorepo 工程方案
|
56
|
-
|
57
|
-
#### 在根目录执行 bump 命令
|
58
|
-
|
59
|
-
```bash
|
60
|
-
pnpm run bump
|
61
|
-
```
|
62
|
-
|
63
|
-

|
64
|
-
|
65
|
-
执行该命令时,changesets 会自动进行以下操作:
|
66
|
-
|
67
|
-
- 删除 `.changesets` 目录下的所有 changeset 文件。
|
68
|
-
|
69
|
-
- 根据 changeset 信息升级相关包的版本号,除了显示写入 changeset 的包,执行命令时还会将 Monorepo 中所有的包进行依赖关系分析,如果需要升级,也会对应的自动升级版本号。
|
70
|
-
|
71
|
-
- 在需要升级的包目录的 `CHANGELOG.md` 文件中写入 Changelog 信息,文件不存在时会自动创建。
|
72
|
-
|
73
|
-
#### 确认并提交当前变更
|
74
|
-
|
75
|
-
:::info
|
76
|
-
需确认自动升级的版本号是否符合预期,如果需要了解版本升级策略,请查看[升级版本策略](/guides/topic-detail/changesets/release#升级版本策略)。
|
77
|
-
|
78
|
-
:::
|
79
|
-
|
80
|
-
```bash
|
81
|
-
git add .
|
82
|
-
git commit -m "release: bump package"
|
83
|
-
```
|
84
|
-
|
85
|
-
#### 在根目录执行以下命令发布包至 NPM
|
86
|
-
|
87
|
-
```bash
|
88
|
-
pnpm run release
|
89
|
-
```
|
90
|
-
|
91
|
-
执行该命令时,将会依次判断 Monorepo 中所有的 packages 的版本是否在 NPM 中存在,如果不存在将会执行 `publish` 命令发布。
|
92
|
-
|
93
|
-
:::warning
|
94
|
-
当 Monorepo 中包之间依赖关系使用 workspace 声明时,注意不要直接在 package 对应的子目录直接执行 `npm publish` 发布 package,使用 `release` 命令在发布时将会自动去除 workspace 声明,确保 NPM 包发布之后可用。
|
95
|
-
|
96
|
-
:::
|
97
|
-
|
98
|
-
#### push 对应的 tag 信息至远程仓库
|
99
|
-
|
100
|
-
```bash
|
101
|
-
git push --follow-tags
|
102
|
-
```
|
103
|
-
|
104
|
-
## 参数
|
105
|
-
|
106
|
-
### bump 命令参数
|
107
|
-
|
108
|
-
- `--snapshot`:生成基于时间戳的版本号。
|
109
|
-
|
110
|
-
```bash
|
111
|
-
pnpm run bump --snapshot canary
|
112
|
-
```
|
113
|
-
|
114
|
-
执行完成后,对应的升级版本号将会变成 `0.0.0-canary-20220622092823` 的形式,其中 canary 为 snapshot 配置的标记,如果不配置,将直接生成 `0.0.0-20220622092823` 的形式。
|
115
|
-
|
116
|
-
该参数主要用于发布临时测试版本进行测试,不需要进行代码提交。
|
117
|
-
|
118
|
-
- `--ignore`:发布时手动忽略部分包。
|
119
|
-
|
120
|
-
例如本次发布你需要忽略 `module-2` 包:
|
121
|
-
|
122
|
-
```bash
|
123
|
-
pnpm run bump --ignore module-2
|
124
|
-
```
|
125
|
-
|
126
|
-
命令执行完成后,将会忽略 `module-2` 包的更新。注意如果存在包依赖 `module-2`,需要将对应包也加入到 `ignore` 参数中,否则 `bump` 命令将执行失败。
|
127
|
-
|
128
|
-
加入多个包的使用姿势为:
|
129
|
-
|
130
|
-
```bash
|
131
|
-
pnpm run bump --ignore module-2 --ignore module-3
|
132
|
-
```
|
133
|
-
|
134
|
-
### release 命令参数
|
135
|
-
|
136
|
-
- `--otp`:使用 `npm token` 发布包。
|
137
|
-
|
138
|
-
```bash
|
139
|
-
pnpm run relese --otp <token>
|
140
|
-
```
|
141
|
-
|
142
|
-
- `--tag`:发布使用特定的 tag,默认使用 `latest`
|
143
|
-
|
144
|
-
```bash
|
145
|
-
pnpm run release --tag <tag>
|
146
|
-
```
|
147
|
-
|
148
|
-
- `--ignore-scripts`:发布时忽略 npm scripts。
|
149
|
-
|
150
|
-
执行 `publish` 命令时,npm 会自动触发很多命令,比如 `prepare`、`prepublish`,使用该参数可以忽略这些命令执行。该参数仅支持在使用 pnpm 的 Monorepo 中使用。
|
151
|
-
|
152
|
-
```bash
|
153
|
-
pnpm run release --ignore-scripts
|
154
|
-
```
|
155
|
-
|
156
|
-
- `--no-git-checks`:发布时忽略检查当前分支。
|
157
|
-
|
158
|
-
执行发布命令时,默认会自动检查当前分支是否为发布分支,是否存在未提交变更等等,使用该参数可以忽略 git 相关检查。
|
159
|
-
|
160
|
-
```bash
|
161
|
-
pnpm run release --no-git-checks
|
162
|
-
```
|
163
|
-
|
164
|
-
## 升级版本策略
|
165
|
-
|
166
|
-
### dependencies 或者 devDependencies 依赖
|
167
|
-
|
168
|
-
- patch 版本依赖只升级自身
|
169
|
-
|
170
|
-
例如存在如下场景:
|
171
|
-
|
172
|
-
Monorepo 中存在两个包,`module-1` 和 `module-2`,`module-2` 的 `dependencies` 中存在 `module-1`。
|
173
|
-
|
174
|
-
当前存在的 changeset 为 `module-1` 的 `patch` 版本升级。
|
175
|
-
|
176
|
-
执行 bump 命令后将只会升级 `module-1` 的 patch 版本号。
|
177
|
-
|
178
|
-
- major / minor 版本自身升级 major 或者 minor 版本号,依赖包升级 patch 版本号
|
179
|
-
|
180
|
-
例如存在如下场景:
|
181
|
-
|
182
|
-
Monorepo 中存在两个包,`module-1` 和 `module-2`,`module-2` 的 dependencies 中存在`module-1`。
|
183
|
-
|
184
|
-
当前存在的 changeset 为 `module-1` 的 minor 版本升级。
|
185
|
-
|
186
|
-
执行 bump 命令后 `module-1` 会升级 `minor` 版本号,`module -2` 会升级 `patch` 版本号。
|
187
|
-
|
188
|
-
### peerDependencies 依赖
|
189
|
-
|
190
|
-
- patch 版本依赖自身和依赖包都升级 patch 版本号
|
191
|
-
|
192
|
-
例如存在如下场景:
|
193
|
-
|
194
|
-
Monorepo 中存在两个包,`module-1` 和 `module-2`,`module-2` 的 `peerDependencies` 中存在 `module-1`。
|
195
|
-
|
196
|
-
当前存在的 changeset 为 `module-1` 的 patch 版本升级。
|
197
|
-
|
198
|
-
执行 bump 命令后将 `module-1` 和 `module-2` 都升级 patch 版本号。
|
199
|
-
|
200
|
-
- major / minor 版本自身升级 major 或者 minor 版本号,依赖包升级 major 版本号
|
201
|
-
|
202
|
-
例如存在如下场景:
|
203
|
-
|
204
|
-
Monorepo 中存在两个包,`module-1` 和 `module-2`,`module-2` 的 `peerDependencies` 中存在 `module-1`。
|
205
|
-
|
206
|
-
当前存在的 changeset 为 `module-1` 的 `minor` 版本升级。
|
207
|
-
|
208
|
-
执行 bump 命令后将 module-1 将升级 `minor` 版本号, `module-2` 升级 `major` 版本号。
|
209
|
-
|
210
|
-
- 修改 peerDependencies 的升级策略
|
211
|
-
|
212
|
-
`peerDependencies` 的升级策略支持通过配置 `onlyUpdatePeerDependentsWhenOutOfRange` 来修改依赖升级策略,当只有超出声明的版本类型范围时,才对应升级 `peerDependencies`。
|
213
|
-
|
214
|
-
```json
|
215
|
-
{
|
216
|
-
"___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": {
|
217
|
-
"onlyUpdatePeerDependentsWhenOutOfRange": true
|
218
|
-
},
|
219
|
-
...
|
220
|
-
}
|
221
|
-
```
|
222
|
-
|
223
|
-
例如存在如下场景:
|
224
|
-
|
225
|
-
Monorepo 中存在两个包,`module-1` 和 `module-2`,`module-2` 的 `peerDependencies` 中存在 `module-1`,声明 `module-1` 的版本号使用 `^`。
|
226
|
-
|
227
|
-
当前存在的 changeset 为 `module-1` 的 `patch` 或者 `minor` 版本升级。
|
228
|
-
|
229
|
-
执行 `bump` 命令后只升级 `module-1` 版本号。
|
230
|
-
|
231
|
-
需注意,如果包版本号在 `0.x.x` 的范围时,`minor` 版本号升级也是超出声明的版本类型范围的。
|
@@ -1,45 +0,0 @@
|
|
1
|
-
---
|
2
|
-
sidebar_position: 9
|
3
|
-
title: 测试 Model
|
4
|
-
---
|
5
|
-
# 测试 Model
|
6
|
-
|
7
|
-
好的测试对代码的稳健性至关重要。下面以 [快速上手](/guides/topic-detail/model/quick-start) 的 `countModel` 为例,演示在 Modern.js 中,如何对 Model 进行单元测试。
|
8
|
-
|
9
|
-
使用测试功能,需要先开启该功能。在项目根目录下,执行 `pnpm run new`,进行如下选择:
|
10
|
-
|
11
|
-
```bash
|
12
|
-
? 请选择你想要的操作 启用可选功能
|
13
|
-
? 请选择功能名称 启用「单元测试 / 集成测试」功能
|
14
|
-
```
|
15
|
-
|
16
|
-
即可开启测试功能支持。
|
17
|
-
|
18
|
-
新增 `count.test.ts` 文件,代码如下:
|
19
|
-
|
20
|
-
```ts
|
21
|
-
import { createStore } from '@modern-js/runtime/testing';
|
22
|
-
import countModel from './count';
|
23
|
-
|
24
|
-
describe('test model', () => {
|
25
|
-
it('count value should plus one after add', () => {
|
26
|
-
const store = createStore();
|
27
|
-
const [state, { add }] = store.use(countModel);
|
28
|
-
|
29
|
-
expect(state).toEqual({ value: 1 });
|
30
|
-
|
31
|
-
add();
|
32
|
-
|
33
|
-
expect(store.use(countModel)[0]).toEqual({ value: 2 });
|
34
|
-
});
|
35
|
-
});
|
36
|
-
```
|
37
|
-
|
38
|
-
:::info
|
39
|
-
这里使用的 [`createStore`](/apis/app/runtime/model/create-store) 是从 `@modern-js/runtime/testing` 导入的,内部会使用 [`runtime.state`](/configure/app/runtime/state) 的配置去创建 `store`。
|
40
|
-
|
41
|
-
:::
|
42
|
-
|
43
|
-
在测试用例里,我们新建一个 `store` 来挂载 `countModel`,通过 `store.use` 获取 `countModel` 的 State 和 Actions。然后调用 `add` Action 更新状态,并断言更新后的状态值。
|
44
|
-
|
45
|
-
执行 `pnpm run test` 命令,触发测试用例的执行。
|
@@ -1,53 +0,0 @@
|
|
1
|
-
---
|
2
|
-
sidebar_position: 2
|
3
|
-
---
|
4
|
-
|
5
|
-
# 创建子项目
|
6
|
-
|
7
|
-
本章将要介绍如何在 Monorepo 工程下创建子项目。
|
8
|
-
|
9
|
-
> Modern.js 支持使用 pnpm 和 Yarn 的 Monorepo,这里以使用 pnpm 为例。以下命令可以以同样方式使用 Yarn 来执行。
|
10
|
-
|
11
|
-
Modern.js 针对 Monorepo 工程提供了生成器功能,它用于在 Monorepo 工程下创建不同类型的 Monorepo 子项目。在生成器中提供以下类型子项目的创建:
|
12
|
-
|
13
|
-
- 「应用」类型
|
14
|
-
- 「模块」类型
|
15
|
-
|
16
|
-
要启动 Monorepo 的生成器功能,可以在 Monorepo 工程根目录下执行命令:
|
17
|
-
|
18
|
-
```
|
19
|
-
pnpm run new
|
20
|
-
```
|
21
|
-
|
22
|
-
:::info 补充信息
|
23
|
-
使用 Yarn 的方式:`yarn new`
|
24
|
-
|
25
|
-
:::
|
26
|
-
|
27
|
-
执行成功后,可以看到如下内容:
|
28
|
-
|
29
|
-
```
|
30
|
-
? 请选择你想创建的工程类型 (Use arrow keys)
|
31
|
-
❯ Web 应用
|
32
|
-
Npm 模块
|
33
|
-
```
|
34
|
-
|
35
|
-
然后根据不同的需求选择对应的类型项目选项,选择之后便开始出现对应子项目类型的问题和选项。例如选择「应用」后会出现:
|
36
|
-
|
37
|
-
```
|
38
|
-
? 请选择你想创建的工程类型:Web应用
|
39
|
-
? 请填写子项目名称
|
40
|
-
```
|
41
|
-
|
42
|
-
当完成所有生成器问题之后,便开始进行项目的创建和项目依赖的下载。当创建成功之后,可以看到类似以下内容:
|
43
|
-
|
44
|
-
```
|
45
|
-
[INFO] 依赖自动安装成功
|
46
|
-
[INFO] 创建成功!
|
47
|
-
可在新项目的目录下运行以下命令:
|
48
|
-
pnpm run dev # 启动开发服务器
|
49
|
-
pnpm run build # 构建生产环境产物
|
50
|
-
pnpm run serve # 启动生产环境服务
|
51
|
-
pnpm run lint # 运行 ESLint 并自动修复问题
|
52
|
-
pnpm run new # 启用可选功能或创建项目要素
|
53
|
-
```
|
@@ -1,14 +0,0 @@
|
|
1
|
-
---
|
2
|
-
sidebar_position: 1
|
3
|
-
---
|
4
|
-
|
5
|
-
# Monorepo 工程介绍
|
6
|
-
|
7
|
-
Modern.js 提供了对于 Monorepo 工程方案的支持,其主要通过 `@modern-js/monorepo-tools` 来提供功能。
|
8
|
-
|
9
|
-
该专题将从以下方面来讲解如何使用 Modern.js 对 Monorepo 进行管理:
|
10
|
-
|
11
|
-
- 在 Monorepo 中创建子项目
|
12
|
-
- Monorepo 下子项目之间的联调开发
|
13
|
-
- 发布 Monorepo 的子项目
|
14
|
-
- 部署 Monorepo 子项目
|