@modern-js/main-doc 2.67.5 → 2.67.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/docs/en/apis/app/hooks/server/server.mdx +10 -0
- package/docs/en/apis/app/hooks/src/routes.mdx +3 -3
- package/docs/en/apis/app/runtime/bff/use-hono-context.mdx +30 -0
- package/docs/en/components/enable-bff.mdx +1 -27
- package/docs/en/components/rsbuild-config-tooltip.mdx +2 -2
- package/docs/en/components/tech-stack-node-framework.mdx +1 -1
- package/docs/en/configure/app/dev/asset-prefix.mdx +2 -3
- package/docs/en/configure/app/dev/client.mdx +2 -3
- package/docs/en/configure/app/dev/hmr.mdx +2 -3
- package/docs/en/configure/app/dev/live-reload.mdx +2 -3
- package/docs/en/configure/app/dev/progress-bar.mdx +2 -3
- package/docs/en/configure/app/dev/setup-middlewares.mdx +2 -3
- package/docs/en/configure/app/dev/watch-files.mdx +2 -3
- package/docs/en/configure/app/dev/write-to-disk.mdx +2 -3
- package/docs/en/configure/app/html/app-icon.mdx +2 -3
- package/docs/en/configure/app/html/crossorigin.mdx +2 -3
- package/docs/en/configure/app/html/favicon.mdx +2 -3
- package/docs/en/configure/app/html/inject.mdx +2 -3
- package/docs/en/configure/app/html/meta.mdx +2 -3
- package/docs/en/configure/app/html/mount-id.mdx +2 -3
- package/docs/en/configure/app/html/output-structure.mdx +2 -3
- package/docs/en/configure/app/html/script-loading.mdx +2 -3
- package/docs/en/configure/app/html/tags.mdx +2 -3
- package/docs/en/configure/app/html/template-parameters.mdx +2 -3
- package/docs/en/configure/app/html/template.mdx +2 -3
- package/docs/en/configure/app/html/title.mdx +2 -3
- package/docs/en/configure/app/output/asset-prefix.mdx +2 -3
- package/docs/en/configure/app/output/charset.mdx +2 -3
- package/docs/en/configure/app/output/copy.mdx +2 -3
- package/docs/en/configure/app/output/css-modules.mdx +2 -3
- package/docs/en/configure/app/output/data-uri-limit.mdx +2 -3
- package/docs/en/configure/app/output/dist-path.mdx +2 -4
- package/docs/en/configure/app/output/externals.mdx +2 -3
- package/docs/en/configure/app/output/filename-hash.mdx +2 -3
- package/docs/en/configure/app/output/filename.mdx +2 -3
- package/docs/en/configure/app/output/inject-styles.mdx +2 -3
- package/docs/en/configure/app/output/inline-scripts.mdx +2 -3
- package/docs/en/configure/app/output/inline-styles.mdx +2 -3
- package/docs/en/configure/app/output/legal-comments.mdx +2 -3
- package/docs/en/configure/app/output/minify.mdx +2 -3
- package/docs/en/configure/app/output/override-browserslist.mdx +2 -3
- package/docs/en/configure/app/output/polyfill.mdx +2 -3
- package/docs/en/configure/app/output/source-map.mdx +2 -3
- package/docs/en/configure/app/performance/build-cache.mdx +2 -3
- package/docs/en/configure/app/performance/bundle-analyze.mdx +2 -3
- package/docs/en/configure/app/performance/chunk-split.mdx +2 -3
- package/docs/en/configure/app/performance/dns-prefetch.mdx +2 -3
- package/docs/en/configure/app/performance/preconnect.mdx +2 -3
- package/docs/en/configure/app/performance/prefetch.mdx +2 -3
- package/docs/en/configure/app/performance/preload.mdx +2 -3
- package/docs/en/configure/app/performance/print-file-size.mdx +2 -3
- package/docs/en/configure/app/performance/profile.mdx +2 -3
- package/docs/en/configure/app/performance/remove-console.mdx +2 -3
- package/docs/en/configure/app/performance/remove-moment-locale.mdx +2 -3
- package/docs/en/configure/app/security/nonce.mdx +2 -3
- package/docs/en/configure/app/security/sri.mdx +0 -1
- package/docs/en/configure/app/server/port.mdx +2 -3
- package/docs/en/configure/app/source/alias-strategy.mdx +2 -3
- package/docs/en/configure/app/source/alias.mdx +2 -3
- package/docs/en/configure/app/source/decorators.mdx +2 -3
- package/docs/en/configure/app/source/define.mdx +2 -3
- package/docs/en/configure/app/source/exclude.mdx +2 -3
- package/docs/en/configure/app/source/include.mdx +2 -3
- package/docs/en/configure/app/source/pre-entry.mdx +2 -3
- package/docs/en/configure/app/source/transform-import.mdx +2 -3
- package/docs/en/configure/app/tools/css-extract.mdx +2 -3
- package/docs/en/configure/app/tools/css-loader.mdx +2 -2
- package/docs/en/configure/app/tools/html-plugin.mdx +7 -3
- package/docs/en/configure/app/tools/lightningcss-loader.mdx +2 -3
- package/docs/en/configure/app/tools/postcss.mdx +2 -3
- package/docs/en/configure/app/tools/rspack.mdx +2 -3
- package/docs/en/configure/app/tools/style-loader.mdx +2 -3
- package/docs/en/configure/app/tools/swc.mdx +1 -1
- package/docs/en/guides/advanced-features/_meta.json +0 -1
- package/docs/en/guides/advanced-features/bff/extend-server.mdx +33 -82
- package/docs/en/guides/advanced-features/bff/frameworks.mdx +12 -68
- package/docs/en/guides/advanced-features/page-performance/_meta.json +1 -1
- package/docs/en/guides/advanced-features/page-performance/react-compiler.mdx +44 -0
- package/docs/en/guides/advanced-features/web-server.mdx +211 -20
- package/docs/en/guides/basic-features/deploy.mdx +3 -3
- package/docs/en/guides/basic-features/output-files.mdx +0 -28
- package/docs/en/tutorials/first-app/c04-routes.mdx +4 -2
- package/docs/en/tutorials/first-app/c05-loader.mdx +4 -1
- package/docs/zh/apis/app/hooks/server/server.mdx +10 -0
- package/docs/zh/apis/app/hooks/src/routes.mdx +3 -3
- package/docs/zh/apis/app/runtime/bff/use-hono-context.mdx +31 -0
- package/docs/zh/components/enable-bff.mdx +2 -27
- package/docs/zh/components/rsbuild-config-tooltip.mdx +2 -2
- package/docs/zh/components/tech-stack-node-framework.mdx +1 -1
- package/docs/zh/configure/app/dev/asset-prefix.mdx +2 -3
- package/docs/zh/configure/app/dev/client.mdx +2 -3
- package/docs/zh/configure/app/dev/hmr.mdx +2 -3
- package/docs/zh/configure/app/dev/live-reload.mdx +2 -3
- package/docs/zh/configure/app/dev/progress-bar.mdx +2 -3
- package/docs/zh/configure/app/dev/setup-middlewares.mdx +2 -3
- package/docs/zh/configure/app/dev/watch-files.mdx +2 -3
- package/docs/zh/configure/app/dev/write-to-disk.mdx +2 -3
- package/docs/zh/configure/app/html/app-icon.mdx +2 -3
- package/docs/zh/configure/app/html/crossorigin.mdx +2 -3
- package/docs/zh/configure/app/html/favicon.mdx +2 -3
- package/docs/zh/configure/app/html/inject.mdx +2 -3
- package/docs/zh/configure/app/html/meta.mdx +2 -3
- package/docs/zh/configure/app/html/mount-id.mdx +2 -3
- package/docs/zh/configure/app/html/output-structure.mdx +2 -3
- package/docs/zh/configure/app/html/script-loading.mdx +2 -3
- package/docs/zh/configure/app/html/tags.mdx +2 -3
- package/docs/zh/configure/app/html/template-parameters.mdx +2 -3
- package/docs/zh/configure/app/html/template.mdx +2 -3
- package/docs/zh/configure/app/html/title.mdx +2 -3
- package/docs/zh/configure/app/output/asset-prefix.mdx +2 -3
- package/docs/zh/configure/app/output/charset.mdx +2 -3
- package/docs/zh/configure/app/output/copy.mdx +2 -3
- package/docs/zh/configure/app/output/css-modules.mdx +2 -3
- package/docs/zh/configure/app/output/data-uri-limit.mdx +2 -3
- package/docs/zh/configure/app/output/dist-path.mdx +2 -4
- package/docs/zh/configure/app/output/externals.mdx +2 -3
- package/docs/zh/configure/app/output/filename-hash.mdx +2 -3
- package/docs/zh/configure/app/output/filename.mdx +2 -3
- package/docs/zh/configure/app/output/inject-styles.mdx +2 -3
- package/docs/zh/configure/app/output/inline-scripts.mdx +2 -3
- package/docs/zh/configure/app/output/inline-styles.mdx +2 -3
- package/docs/zh/configure/app/output/legal-comments.mdx +2 -3
- package/docs/zh/configure/app/output/minify.mdx +2 -3
- package/docs/zh/configure/app/output/override-browserslist.mdx +2 -3
- package/docs/zh/configure/app/output/polyfill.mdx +2 -3
- package/docs/zh/configure/app/output/source-map.mdx +2 -3
- package/docs/zh/configure/app/performance/build-cache.mdx +2 -3
- package/docs/zh/configure/app/performance/bundle-analyze.mdx +2 -3
- package/docs/zh/configure/app/performance/chunk-split.mdx +2 -3
- package/docs/zh/configure/app/performance/dns-prefetch.mdx +2 -3
- package/docs/zh/configure/app/performance/preconnect.mdx +2 -3
- package/docs/zh/configure/app/performance/prefetch.mdx +2 -3
- package/docs/zh/configure/app/performance/preload.mdx +2 -3
- package/docs/zh/configure/app/performance/print-file-size.mdx +2 -3
- package/docs/zh/configure/app/performance/profile.mdx +2 -3
- package/docs/zh/configure/app/performance/remove-console.mdx +2 -3
- package/docs/zh/configure/app/performance/remove-moment-locale.mdx +2 -3
- package/docs/zh/configure/app/security/nonce.mdx +2 -3
- package/docs/zh/configure/app/security/sri.mdx +0 -1
- package/docs/zh/configure/app/server/port.mdx +2 -3
- package/docs/zh/configure/app/source/alias-strategy.mdx +2 -3
- package/docs/zh/configure/app/source/alias.mdx +2 -3
- package/docs/zh/configure/app/source/decorators.mdx +2 -3
- package/docs/zh/configure/app/source/define.mdx +2 -3
- package/docs/zh/configure/app/source/exclude.mdx +2 -3
- package/docs/zh/configure/app/source/include.mdx +2 -3
- package/docs/zh/configure/app/source/pre-entry.mdx +2 -3
- package/docs/zh/configure/app/source/transform-import.mdx +2 -3
- package/docs/zh/configure/app/tools/css-extract.mdx +2 -3
- package/docs/zh/configure/app/tools/css-loader.mdx +2 -3
- package/docs/zh/configure/app/tools/html-plugin.mdx +6 -3
- package/docs/zh/configure/app/tools/lightningcss-loader.mdx +2 -3
- package/docs/zh/configure/app/tools/postcss.mdx +2 -3
- package/docs/zh/configure/app/tools/rspack.mdx +2 -3
- package/docs/zh/configure/app/tools/style-loader.mdx +2 -3
- package/docs/zh/configure/app/tools/swc.mdx +1 -1
- package/docs/zh/guides/advanced-features/_meta.json +0 -1
- package/docs/zh/guides/advanced-features/bff/extend-server.mdx +28 -76
- package/docs/zh/guides/advanced-features/bff/frameworks.mdx +6 -66
- package/docs/zh/guides/advanced-features/page-performance/_meta.json +1 -1
- package/docs/zh/guides/advanced-features/page-performance/react-compiler.mdx +44 -0
- package/docs/zh/guides/advanced-features/web-server.mdx +209 -25
- package/docs/zh/guides/basic-features/deploy.mdx +4 -3
- package/docs/zh/guides/basic-features/output-files.mdx +0 -28
- package/docs/zh/tutorials/first-app/c04-routes.mdx +4 -2
- package/docs/zh/tutorials/first-app/c05-loader.mdx +4 -1
- package/package.json +7 -4
- package/rspress.config.ts +16 -1
- package/src/components/RsbuildLink/index.tsx +2 -2
- package/src/index.ts +1 -5
- package/src/pages/index.tsx +3 -3
- package/docs/en/apis/app/hooks/api/middleware.mdx +0 -11
- package/docs/en/apis/app/runtime/bff/hook.mdx +0 -44
- package/docs/en/apis/app/runtime/bff/use-context.mdx +0 -38
- package/docs/en/configure/app/bff/enable-handle-web.mdx +0 -24
- package/docs/en/guides/advanced-features/custom-server.mdx +0 -218
- package/docs/zh/apis/app/hooks/api/middleware.mdx +0 -11
- package/docs/zh/apis/app/runtime/bff/hook.mdx +0 -44
- package/docs/zh/apis/app/runtime/bff/use-context.mdx +0 -38
- package/docs/zh/configure/app/bff/enable-handle-web.mdx +0 -24
- package/docs/zh/guides/advanced-features/custom-server.mdx +0 -216
@@ -1,216 +0,0 @@
|
|
1
|
-
---
|
2
|
-
sidebar_position: 16
|
3
|
-
---
|
4
|
-
|
5
|
-
# 自定义 Server
|
6
|
-
|
7
|
-
Modern.js 将大部分项目需要的服务端能力都进行了封装,通常项目无需进行服务端开发。但在有些开发场景下,例如用户鉴权、请求预处理、添加页面渲染骨架等,项目仍需要对服务端进行定制。
|
8
|
-
|
9
|
-
## 自定义 Server 能力
|
10
|
-
|
11
|
-
项目目录下创建 `server/modern.server.ts` 文件,可以在这个文件中添加如下配置来扩展 Server:
|
12
|
-
- **中间件(Middleware)**
|
13
|
-
- **渲染中间件(RenderMiddleware)**
|
14
|
-
- **服务端插件(Plugin)**
|
15
|
-
|
16
|
-
|
17
|
-
其中 **Plugin** 中可以定义 **Middleware** 与 **RenderMiddleware**。 中间件加载流程如下图所示:
|
18
|
-
|
19
|
-
<img
|
20
|
-
src="https://lf3-static.bytednsdoc.com/obj/eden-cn/10eh7nuhpenuhog/server-md-wf.png"
|
21
|
-
style={{ width: '100%', maxWidth: '540px' }}
|
22
|
-
/>
|
23
|
-
|
24
|
-
### 基本配置
|
25
|
-
|
26
|
-
```ts title="server/modern.server.ts"
|
27
|
-
import { defineServerConfig } from '@modern-js/server-runtime';
|
28
|
-
|
29
|
-
export default defineServerConfig({
|
30
|
-
middlewares: [], // 中间件
|
31
|
-
renderMiddlewares: [], // 渲染中间件
|
32
|
-
plugins: [], // 插件
|
33
|
-
});
|
34
|
-
```
|
35
|
-
|
36
|
-
|
37
|
-
### 类型定义
|
38
|
-
|
39
|
-
`defineServerConfig` 类型定义如下:
|
40
|
-
|
41
|
-
```ts
|
42
|
-
import type { MiddlewareHandler } from 'hono';
|
43
|
-
|
44
|
-
type MiddlewareObj = {
|
45
|
-
name: string;
|
46
|
-
path?: string;
|
47
|
-
method?: 'options' | 'get' | 'post' | 'put' | 'delete' | 'patch' | 'all';
|
48
|
-
handler: MiddlewareHandler | MiddlewareHandler[];
|
49
|
-
};
|
50
|
-
type ServerConfig = {
|
51
|
-
middlewares?: MiddlewareObj[];
|
52
|
-
renderMiddlewares?: MiddlewareObj[];
|
53
|
-
plugins?: (ServerPlugin | ServerPluginLegacy)[];
|
54
|
-
}
|
55
|
-
```
|
56
|
-
|
57
|
-
|
58
|
-
### Middleware
|
59
|
-
|
60
|
-
Middleware 支持在 Modern.js 服务的**请求处理**与**页面路由**的流程前后,执行自定义逻辑。
|
61
|
-
即自定义逻辑既要处理接口路由,也要作用于页面路由,那么 Middleware 是不二选择。如果仅需要处理 BFF 接口路由,可以通过配置 `path` 为 BFF 的 `prefix` 来实现。
|
62
|
-
|
63
|
-
:::note
|
64
|
-
BFF 场景只有[运行时框架](/guides/advanced-features/bff/frameworks.html)为 Hono 时,BFF 路由才会经过 Middleware。
|
65
|
-
:::
|
66
|
-
|
67
|
-
#### 使用姿势
|
68
|
-
|
69
|
-
```ts title="server/modern.server.ts"
|
70
|
-
import { defineServerConfig, type MiddlewareHandler } from '@modern-js/server-runtime';
|
71
|
-
import { getMonitors } from '@modern-js/runtime';
|
72
|
-
|
73
|
-
export const handler: MiddlewareHandler = async (c, next) => {
|
74
|
-
const monitors = getMonitors();
|
75
|
-
const start = Date.now();
|
76
|
-
|
77
|
-
await next();
|
78
|
-
|
79
|
-
const end = Date.now();
|
80
|
-
// 上报耗时
|
81
|
-
monitors.timing('request_timing', end - start);
|
82
|
-
};
|
83
|
-
|
84
|
-
export default defineServerConfig({
|
85
|
-
middlewares: [
|
86
|
-
{
|
87
|
-
name: 'request-timing',
|
88
|
-
handler,
|
89
|
-
},
|
90
|
-
],
|
91
|
-
});
|
92
|
-
```
|
93
|
-
|
94
|
-
:::warning
|
95
|
-
必须执行 `next` 函数才会执行后续的 Middleware。
|
96
|
-
:::
|
97
|
-
|
98
|
-
|
99
|
-
### RenderMiddleware
|
100
|
-
|
101
|
-
如果只需要处理页面渲染的前后执行逻辑,modern.js 也提供了渲染中间件。
|
102
|
-
|
103
|
-
#### 使用姿势
|
104
|
-
|
105
|
-
```ts title="server/modern.server.ts"
|
106
|
-
import { defineServerConfig, type MiddlewareHandler } from '@modern-js/server-runtime';
|
107
|
-
|
108
|
-
// 注入 render 性能指标
|
109
|
-
const renderTiming: MiddlewareHandler = async (c, next) => {
|
110
|
-
const start = Date.now();
|
111
|
-
|
112
|
-
await next();
|
113
|
-
|
114
|
-
const end = Date.now();
|
115
|
-
c.res.headers.set('server-timing', `render; dur=${end - start}`);
|
116
|
-
};
|
117
|
-
|
118
|
-
// 修改响应体
|
119
|
-
const modifyResBody: MiddlewareHandler = async (c, next) => {
|
120
|
-
await next();
|
121
|
-
|
122
|
-
const { res } = c;
|
123
|
-
const text = await res.text();
|
124
|
-
const newText = text.replace('<body>', '<body> <h3>bytedance</h3>');
|
125
|
-
|
126
|
-
c.res = c.body(newText, {
|
127
|
-
status: res.status,
|
128
|
-
headers: res.headers,
|
129
|
-
});
|
130
|
-
};
|
131
|
-
|
132
|
-
export default defineServerConfig({
|
133
|
-
renderMiddlewares: [
|
134
|
-
{
|
135
|
-
name: 'render-timing',
|
136
|
-
handler: renderTiming,
|
137
|
-
},
|
138
|
-
{
|
139
|
-
name: 'modify-res-body',
|
140
|
-
handler: modifyResBody,
|
141
|
-
},
|
142
|
-
],
|
143
|
-
});
|
144
|
-
```
|
145
|
-
|
146
|
-
|
147
|
-
### Plugin
|
148
|
-
|
149
|
-
Modern.js 支持在自定义插件中为 Server 添加上述 Middleware 及 RenderMiddleware。
|
150
|
-
|
151
|
-
#### 使用姿势
|
152
|
-
|
153
|
-
|
154
|
-
```ts title="server/plugins/server.ts"
|
155
|
-
import type { ServerPluginLegacy } from '@modern-js/server-runtime';
|
156
|
-
|
157
|
-
export default (): ServerPluginLegacy => ({
|
158
|
-
name: 'serverPlugin',
|
159
|
-
setup(api) {
|
160
|
-
return {
|
161
|
-
prepare(serverConfig) {
|
162
|
-
const { middlewares, renderMiddlewares } = api.useAppContext();
|
163
|
-
|
164
|
-
// 注入服务端数据,供页面 dataLoader 消费
|
165
|
-
middlewares?.push({
|
166
|
-
name: 'server-plugin-middleware',
|
167
|
-
handler: async (c, next) => {
|
168
|
-
c.set('message', 'hi modern.js');
|
169
|
-
await next();
|
170
|
-
// ...
|
171
|
-
},
|
172
|
-
});
|
173
|
-
|
174
|
-
// 重定向
|
175
|
-
renderMiddlewares?.push({
|
176
|
-
name: 'server-plugin-render-middleware',
|
177
|
-
handler: async (c, next) => {
|
178
|
-
const user = getUser(c.req);
|
179
|
-
if (!user) {
|
180
|
-
return c.redirect('/login');
|
181
|
-
}
|
182
|
-
|
183
|
-
await next();
|
184
|
-
},
|
185
|
-
});
|
186
|
-
return serverConfig;
|
187
|
-
},
|
188
|
-
};
|
189
|
-
},
|
190
|
-
});
|
191
|
-
```
|
192
|
-
|
193
|
-
|
194
|
-
```ts title="server/modern.server.ts"
|
195
|
-
import { defineServerConfig } from '@modern-js/server-runtime';
|
196
|
-
import serverPlugin from './plugins/serverPlugin';
|
197
|
-
|
198
|
-
export default defineServerConfig({
|
199
|
-
plugins: [serverPlugin()],
|
200
|
-
});
|
201
|
-
```
|
202
|
-
|
203
|
-
|
204
|
-
```ts title="src/routes/page.data.ts"
|
205
|
-
import { useHonoContext } from '@modern-js/server-runtime';
|
206
|
-
import { defer } from '@modern-js/runtime/router';
|
207
|
-
|
208
|
-
export default () => {
|
209
|
-
const ctx = useHonoContext();
|
210
|
-
// 消费服务端注入的数据
|
211
|
-
const message = ctx.get('message');
|
212
|
-
|
213
|
-
// ...
|
214
|
-
};
|
215
|
-
|
216
|
-
```
|