@modern-js/main-doc 2.0.0-beta.4 → 2.0.0-beta.6
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/.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
|