@modern-js/main-doc 2.0.0-beta.4 → 2.0.0-beta.5
Sign up to get free protection for your applications and to get access to all the features.
- package/.turbo/turbo-build.log +1 -1
- package/en/docusaurus-plugin-content-docs/current/apis/app/commands/dev.md +8 -3
- package/en/docusaurus-plugin-content-docs/current/apis/app/commands/inspect.md +33 -8
- package/en/docusaurus-plugin-content-docs/current/apis/app/commands/serve.md +32 -0
- package/en/docusaurus-plugin-content-docs/current/apis/app/hooks/src/server.md +31 -0
- package/en/docusaurus-plugin-content-docs/current/apis/app/runtime/core/bootstrap.md +4 -3
- package/en/docusaurus-plugin-content-docs/current/apis/app/runtime/core/create-app.md +2 -3
- package/en/docusaurus-plugin-content-docs/current/apis/app/runtime/core/use-module-apps.md +1 -1
- package/en/docusaurus-plugin-content-docs/current/components/init-app.md +1 -1
- package/en/docusaurus-plugin-content-docs/current/configure/app/builder-plugins.md +70 -0
- package/en/docusaurus-plugin-content-docs/current/configure/app/dev/with-master-app.md +0 -1
- package/en/docusaurus-plugin-content-docs/current/configure/app/plugins.md +11 -5
- package/en/docusaurus-plugin-content-docs/current/configure/app/source/disable-entry-dirs.md +38 -0
- package/en/docusaurus-plugin-content-docs/current/configure/app/source/entries.md +66 -2
- package/en/docusaurus-plugin-content-docs/current/configure/app/tools/esbuild.md +1 -1
- package/en/docusaurus-plugin-content-docs/current/guides/concept/entries.md +1 -1
- package/en/docusaurus-plugin-content-docs/current/guides/get-started/quick-start.md +3 -3
- package/en/docusaurus-plugin-content-docs/current/guides/topic-detail/framework-plugin/_category_.json +4 -0
- package/en/docusaurus-plugin-content-docs/current/guides/{concept → topic-detail/framework-plugin}/lifecycle.md +0 -0
- package/package.json +3 -3
- package/zh/apis/app/commands/dev.md +9 -4
- package/zh/apis/app/commands/inspect.md +34 -9
- package/zh/apis/app/commands/{start.md → serve.md} +3 -3
- package/zh/apis/app/hooks/src/index_.md +1 -1
- package/zh/apis/app/hooks/src/server.md +31 -0
- package/zh/apis/app/runtime/core/bootstrap.md +3 -4
- package/zh/apis/app/runtime/core/create-app.md +1 -18
- package/zh/apis/app/runtime/core/use-module-apps.md +64 -33
- package/zh/apis/app/runtime/web-server/hook.md +1 -1
- package/zh/apis/app/runtime/web-server/middleware.md +1 -0
- package/zh/components/default-mwa-generate.md +5 -0
- package/zh/components/deploy.md +1 -0
- package/zh/components/enable-micro-frontend.md +13 -0
- package/zh/components/init-app.md +2 -2
- package/zh/components/micro-runtime-config.md +18 -0
- package/zh/components/prerequisites.md +2 -2
- package/zh/components/release-note.md +1 -0
- package/zh/configure/app/builder-plugins.md +72 -0
- package/zh/configure/app/deploy/_category_.json +4 -0
- package/zh/configure/app/deploy/microFrontend.md +64 -0
- package/zh/configure/app/dev/with-master-app.md +0 -2
- package/zh/configure/app/plugins.md +10 -4
- package/zh/configure/app/runtime/master-app.md +33 -36
- package/zh/configure/app/source/disable-entry-dirs.md +37 -0
- package/zh/configure/app/source/entries-dir.md +0 -3
- package/zh/configure/app/source/entries.md +66 -3
- package/zh/guides/advanced-features/compatibility.md +12 -1
- package/zh/guides/advanced-features/eslint.md +21 -21
- package/zh/guides/advanced-features/ssg.md +14 -3
- package/zh/guides/advanced-features/ssr.md +1 -1
- package/zh/guides/advanced-features/testing.md +11 -0
- package/zh/guides/advanced-features/web-server.md +12 -1
- package/zh/guides/basic-features/css/tailwindcss.md +11 -0
- package/zh/guides/basic-features/data-fetch.md +398 -5
- package/zh/guides/basic-features/routes.md +35 -3
- package/zh/guides/concept/entries.md +104 -14
- package/zh/guides/get-started/quick-start.md +8 -5
- package/zh/guides/get-started/upgrade.md +3 -1
- package/zh/guides/{concept → topic-detail/framework-plugin}/lifecycle.md +0 -0
- package/zh/guides/topic-detail/micro-frontend/c01-introduction.md +29 -0
- package/zh/guides/topic-detail/micro-frontend/c02-development.md +191 -0
- package/zh/guides/topic-detail/micro-frontend/c03-main-app.md +246 -0
- package/zh/guides/topic-detail/micro-frontend/c04-communicate.md +54 -0
- package/zh/guides/topic-detail/micro-frontend/{mixed-stack.md → c05-mixed-stack.md} +3 -3
- package/zh/guides/topic-detail/monorepo/create-sub-project.md +2 -2
- package/zh/tutorials/first-app/c01-start.md +9 -4
- package/zh/tutorials/first-app/c03-css.md +19 -0
- package/zh/tutorials/first-app/c04-routes.md +4 -4
- package/zh/tutorials/first-app/c05-loader.md +3 -3
- package/zh/tutorials/first-app/c06-model.md +19 -19
- package/zh/tutorials/first-app/c07-container.md +38 -23
- package/zh/tutorials/first-app/c08-entries.md +4 -1
- package/en/docusaurus-plugin-content-docs/current/apis/app/commands/start.md +0 -32
- package/zh/guides/advanced-features/custom-app.md +0 -70
- package/zh/guides/topic-detail/micro-frontend/communicate.md +0 -39
- package/zh/guides/topic-detail/micro-frontend/debugging.md +0 -168
- package/zh/guides/topic-detail/micro-frontend/introduction.md +0 -13
- package/zh/guides/topic-detail/micro-frontend/route-mode.md +0 -110
@@ -10,7 +10,6 @@ sidebar_label: entries
|
|
10
10
|
|
11
11
|
如需自定义构建入口时,可以通过该选项指定。
|
12
12
|
|
13
|
-
|
14
13
|
## String 类型
|
15
14
|
|
16
15
|
当值为 `string` 类型时,为入口的文件路径:
|
@@ -28,9 +27,33 @@ export default defineConfig({
|
|
28
27
|
});
|
29
28
|
```
|
30
29
|
|
31
|
-
|
30
|
+
默认情况下,配置的入口等价于 `App.[jt]sx`,即指定的入口文件只需要导出应用的根组件。
|
31
|
+
|
32
|
+
例如以下目录结构:
|
33
|
+
|
34
|
+
```bash
|
35
|
+
.
|
36
|
+
├── src
|
37
|
+
│ └── entry
|
38
|
+
│ ├── chat.tsx
|
39
|
+
│ └── home.tsx
|
40
|
+
└── package.json
|
41
|
+
```
|
42
|
+
|
43
|
+
结合上面默认入口机制的内容,Modern.js 在分析上述目录结构时,不会得到任何默认入口。
|
32
44
|
|
33
|
-
|
45
|
+
在不想改变目录结构的情况下(如项目迁移),可以通过 `source.entries` 自定义入口:
|
46
|
+
|
47
|
+
```ts title="modern.config.js"
|
48
|
+
export default defineConfig({
|
49
|
+
source: {
|
50
|
+
entries: {
|
51
|
+
home: './src/entry/home.tsx',
|
52
|
+
chat: './src/entry/chat.tsx',
|
53
|
+
},
|
54
|
+
},
|
55
|
+
});
|
56
|
+
```
|
34
57
|
|
35
58
|
## Object 类型
|
36
59
|
|
@@ -60,3 +83,43 @@ export default defineConfig({
|
|
60
83
|
},
|
61
84
|
});
|
62
85
|
```
|
86
|
+
|
87
|
+
默认情况下,配置的入口等价于 `App.[jt]sx`,如果希望该入口等价于构建模式下的入口,可以将属性 `disableMount` 设置为 `true`。
|
88
|
+
|
89
|
+
|
90
|
+
## 自定义入口和默认入口合并
|
91
|
+
|
92
|
+
在指定 `source.entries` 后,Modern.js 会将用户自定义的入口与分析目录结构得到的默认入口合并。合并规则为:
|
93
|
+
|
94
|
+
比较自定义入口设置的入口路径和默认入口路径,当入口路径一致时,自定义入口会覆盖默认入口。
|
95
|
+
|
96
|
+
例如以下目录结构:
|
97
|
+
|
98
|
+
```
|
99
|
+
.
|
100
|
+
├── src
|
101
|
+
│ ├── chat
|
102
|
+
│ │ └── App.jsx
|
103
|
+
│ └── home
|
104
|
+
│ └── index.js
|
105
|
+
└── package.json
|
106
|
+
```
|
107
|
+
|
108
|
+
Modern.js 分析 `src/` 目录,得到默认入口 `chat` 和 `home`。当用户在 `modern.config.js` 文件中配置如下时:
|
109
|
+
|
110
|
+
```ts title="modern.config.ts"
|
111
|
+
import { defineConfig } from '@modern-js/app-tools';
|
112
|
+
|
113
|
+
export default defineConfig({
|
114
|
+
source: {
|
115
|
+
entries: {
|
116
|
+
index: './src/home/index.js',
|
117
|
+
},
|
118
|
+
},
|
119
|
+
};
|
120
|
+
```
|
121
|
+
|
122
|
+
可以看到自定义入口 `index` 的路径和默认入口 `home` 的路径一致,在合并的过程中,`index` 会覆盖掉 `home`,最终入口如下:
|
123
|
+
|
124
|
+
- `chat -> ./src/chat/App.jsx`
|
125
|
+
- `index -> ./src/home/index.js`
|
@@ -29,7 +29,18 @@ Modern.js 中还提供了基于浏览器 [UA](https://developer.mozilla.org/zh-C
|
|
29
29
|
? 启用可选功能 启用「基于 UA 的 Polyfill」功能
|
30
30
|
```
|
31
31
|
|
32
|
-
|
32
|
+
执行命令后,在 `modern.config.ts` 中注册 Polyfill 插件:
|
33
|
+
|
34
|
+
```ts title="modern.config.ts"
|
35
|
+
import PolyfillPlugin from '@modern-js/plugin-polyfill';
|
36
|
+
// https://modernjs.dev/docs/apis/app/config
|
37
|
+
export default defineConfig({
|
38
|
+
...,
|
39
|
+
plugins: [..., PolyfillPlugin()],
|
40
|
+
});
|
41
|
+
```
|
42
|
+
|
43
|
+
配置 `output.polyfill` 为 `ua` 并且执行 `pnpm run build && pnpm run serve` 启动服务器后,访问页面可以看到 HTML 产物中包含如下脚本:
|
33
44
|
|
34
45
|
```js
|
35
46
|
<script src="/__polyfill__" crossorigin></script>
|
@@ -49,10 +49,6 @@ pnpm run lint:error
|
|
49
49
|
|
50
50
|
【Modern.js ESLint 规则集】要求 [eslint-disable](https://eslint.org/docs/user-guide/configuring/rules#disabling-rules) 必须成对使用,必须明确表达要影响的范围,以及在这个范围内明确表达要禁用什么规则,目的是让**例外**有明确的、最小化的范围,避免 [eslint-disable](https://eslint.org/docs/user-guide/configuring/rules#disabling-rules) 被滥用,导致不属于例外的代码也被禁用了规则。
|
51
51
|
|
52
|
-
### 添加自定义配置
|
53
|
-
|
54
|
-
<!-- 见 [如何自定义 Lint 规则](/guide/more-guides/more-about-lint#q-如何自定义-lint-规则) -->
|
55
|
-
|
56
52
|
## Q: 如何自定义 ESLint 规则
|
57
53
|
|
58
54
|
### 仓库根目录下 `package.json` 里的 "eslintConfig" 字段
|
@@ -73,7 +69,7 @@ pnpm run lint:error
|
|
73
69
|
|
74
70
|
```
|
75
71
|
|
76
|
-
### `src/.eslintrc.
|
72
|
+
### `src/.eslintrc.js` 文件
|
77
73
|
|
78
74
|
Modern.js 的应用工程、模块工程,源代码目录里都会默认有这个配置文件,是针对 Universal JS 代码设计的。
|
79
75
|
|
@@ -83,25 +79,29 @@ Universal JS 代码是既能浏览器端也能在服务器端运行的代码。
|
|
83
79
|
|
84
80
|
如果项目在某些规则上确实有特殊要求或不可避免的兼容问题(不是例外),可以在这里增加规则配置,该配置会优先于默认的【Modern.js ESLint 规则集】,比如:
|
85
81
|
|
86
|
-
```
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
],
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
}
|
82
|
+
```js
|
83
|
+
// eslint-disable-next-line import/no-commonjs
|
84
|
+
module.exports = {
|
85
|
+
root: true,
|
86
|
+
extends: ['@modern-js-app'],
|
87
|
+
parserOptions: {
|
88
|
+
tsconfigRootDir: __dirname,
|
89
|
+
project: ['../tsconfig.json'],
|
90
|
+
},
|
91
|
+
rules: {
|
92
|
+
'filenames/match-exported': 'off',
|
93
|
+
},
|
94
|
+
};
|
95
95
|
```
|
96
96
|
|
97
|
-
如果有需要,还可以继续在不同的子目录里增加 `.eslintrc.
|
97
|
+
如果有需要,还可以继续在不同的子目录里增加 `.eslintrc.js` 文件,针对这个子目录里的代码做特殊配置:
|
98
98
|
|
99
|
-
```
|
100
|
-
{
|
101
|
-
|
102
|
-
|
103
|
-
}
|
104
|
-
}
|
99
|
+
```js
|
100
|
+
module.exports = {
|
101
|
+
rules: {
|
102
|
+
'filenames/match-exported': 'off',
|
103
|
+
},
|
104
|
+
};
|
105
105
|
```
|
106
106
|
|
107
107
|
:::tip 提示
|
@@ -16,6 +16,17 @@ SSG 是构建阶段的解决方案,因此仅对生产环境有效。通过 `de
|
|
16
16
|
? 启用可选功能 启用「SSG」功能
|
17
17
|
```
|
18
18
|
|
19
|
+
执行命令后,在 `modern.config.ts` 中注册 SSG 插件:
|
20
|
+
|
21
|
+
```ts title="modern.config.ts"
|
22
|
+
import SSGPlugin from '@modern-js/plugin-ssg';
|
23
|
+
// https://modernjs.dev/docs/apis/app/config
|
24
|
+
export default defineConfig({
|
25
|
+
...,
|
26
|
+
plugins: [..., SSGPlugin()],
|
27
|
+
});
|
28
|
+
```
|
29
|
+
|
19
30
|
SSG 在**约定式路由**和**自控式路由**下的使用方式不同。
|
20
31
|
|
21
32
|
### 在约定式路由中使用
|
@@ -71,7 +82,7 @@ export default defineConfig({
|
|
71
82
|
|
72
83
|
**约定式路由**中的每一条路由,都会生成一个单独的 HTML 文件。查看 `main/index.html`,可以发现包含 `Index Page` 的文本内容,这正是 SSG 的效果。
|
73
84
|
|
74
|
-
执行 `pnpm run
|
85
|
+
执行 `pnpm run serve` 启动项目后,访问页面,在浏览器我们工具的 Network 窗口,查看请求返回的文档,文档包含组件渲染后的完整页面内容。
|
75
86
|
|
76
87
|
### 在自控式路由中使用
|
77
88
|
|
@@ -111,7 +122,7 @@ export default defineConfig({
|
|
111
122
|
})
|
112
123
|
```
|
113
124
|
|
114
|
-
执行 `pnpm run build` 与 `pnpm run
|
125
|
+
执行 `pnpm run build` 与 `pnpm run serve` 后,访问 `http://localhost:8080/about`,在 Preview 视图中可以看到页面已经完成渲染。
|
115
126
|
|
116
127
|
查看构建产物文件,可以看到 `dist/` 目录中,新增了一个 `main/about/index.html` 文件。
|
117
128
|
|
@@ -159,4 +170,4 @@ export default () => {
|
|
159
170
|
|
160
171
|
执行 `pnpm run dev`,重复刷新页面,可以看到 `/foo` 页面的渲染结果不断发生变化,说明数据是在请求时获取的。
|
161
172
|
|
162
|
-
重新执行 `pnpm run build` 后,执行 `pnpm run
|
173
|
+
重新执行 `pnpm run build` 后,执行 `pnpm run serve`,重复刷新页面,发现页面渲染结果始终保持同样的内容,数据在请求时不会再次获取,说明页面在编译时已经完成渲染。
|
@@ -177,7 +177,7 @@ import { PreRender } from '@modern-js/runtime/ssr';
|
|
177
177
|
<PreRender interval={5} />
|
178
178
|
```
|
179
179
|
|
180
|
-
修改后,执行 `pnpm run build && pnpm run
|
180
|
+
修改后,执行 `pnpm run build && pnpm run serve` 启动应用,并打开页面。
|
181
181
|
|
182
182
|
首次打开时,和之前的渲染并没有什么不同,同样存在 2s 延迟。点击刷新,页面瞬间打开,但此时,页面数据并没有因为刷新发生变化,这是因为缓存还没有过期。
|
183
183
|
|
@@ -15,6 +15,17 @@ Modern.js 默认继承了 [Jest](https://jestjs.io/) 的测试能力。
|
|
15
15
|
|
16
16
|
执行上述命令后,`package.json` 中将会自动生成 `"test": "modern test"` 命令。
|
17
17
|
|
18
|
+
在 `modern.config.ts` 中注册 Test 插件:
|
19
|
+
|
20
|
+
```ts title="modern.config.ts"
|
21
|
+
import TestPlugin from '@modern-js/plugin-testing';
|
22
|
+
// https://modernjs.dev/docs/apis/app/config
|
23
|
+
export default defineConfig({
|
24
|
+
...,
|
25
|
+
plugins: [..., TestPlugin()],
|
26
|
+
});
|
27
|
+
```
|
28
|
+
|
18
29
|
## 测试文件
|
19
30
|
|
20
31
|
Modern.js 默认识别的测试文件路径为: `<rootDir>/src/**/*.test.[jt]s?(x)` 和 `<rootDir>/tests/**/*.test.[jt]s?(x)`。
|
@@ -16,7 +16,18 @@ Modern.js 作为以客户端为中心的开发框架,对服务端的定制能
|
|
16
16
|
? 创建工程元素 新建「自定义 Web Server」源码目录
|
17
17
|
```
|
18
18
|
|
19
|
-
|
19
|
+
执行命令后,在 `modern.config.ts` 中注册 Server 插件:
|
20
|
+
|
21
|
+
```ts title="modern.config.ts"
|
22
|
+
import ServerPlugin from '@modern-js/plugin-server';
|
23
|
+
// https://modernjs.dev/docs/apis/app/config
|
24
|
+
export default defineConfig({
|
25
|
+
...,
|
26
|
+
plugins: [..., ServerPlugin()],
|
27
|
+
});
|
28
|
+
```
|
29
|
+
|
30
|
+
项目目录下会新建 `server/index.ts` 文件,自定义逻辑在这个文件中编写。
|
20
31
|
|
21
32
|
## 使用 API 扩展 Web Server
|
22
33
|
|
@@ -13,6 +13,17 @@ sidebar_position: 2
|
|
13
13
|
? 启用可选功能 启用 Tailwind CSS 支持
|
14
14
|
```
|
15
15
|
|
16
|
+
在 `modern.config.ts` 中注册 Tailwind 插件:
|
17
|
+
|
18
|
+
```ts title="modern.config.ts"
|
19
|
+
import TailwindCSSPlugin from '@modern-js/plugin-tailwindcss';
|
20
|
+
// https://modernjs.dev/docs/apis/app/config
|
21
|
+
export default defineConfig({
|
22
|
+
...,
|
23
|
+
plugins: [..., TailwindCSSPlugin()],
|
24
|
+
});
|
25
|
+
```
|
26
|
+
|
16
27
|
使用时在入口的根组件(如 `src/App.jsx`)添加如下代码:
|
17
28
|
|
18
29
|
```js
|