Skip to content

Commit aa40bda

Browse files
keepviewcaohuilin
andauthored
feat: update server generator (#7182)
Co-authored-by: Belinda Cao <[email protected]>
1 parent 747a04f commit aa40bda

File tree

9 files changed

+111
-30
lines changed

9 files changed

+111
-30
lines changed

.changeset/pink-days-begin.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@modern-js/server-generator': patch
3+
'@modern-js/generator-common': patch
4+
---
5+
6+
feat: update server generator
7+
feat: 更新 server 生成器

packages/document/main-doc/docs/en/guides/advanced-features/web-server.mdx

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,15 @@ Modern.js encapsulates most server-side capabilities required by projects, typic
1212
You must ensure that the Modern.js version is x.67.5 or above.
1313
:::
1414

15-
To start a custom web server, the following steps need to be taken:
16-
1. Add and install the dependencies `@modern-js/server-runtime` and `ts-node` to `devDependencies`.
17-
2. Add `server` to the `include` section of `tsconfig`.
18-
3. Create a file `server/modern.server.ts` in the project directory, where you can write custom logic.
15+
Developers can execute the `pnpm run new` command in the project root directory to start the "Custom Web Server" feature:
16+
17+
```bash
18+
? Select operation: Create project element
19+
? Select element type: Create "Custom Web Server" source directory
20+
```
21+
22+
After executing the command, a `server/modern.server.ts` file will be automatically created in the project directory, where you can write custom logic.
23+
1924

2025
## Capabilities of the Custom Web Server
2126

@@ -230,6 +235,13 @@ export default () => {
230235
The legacy API is compatible but no longer recommended. For extending server capabilities, please refer to [Custom Web Server](/guides/advanced-features/web-server.html#custom-web-server). For migration guidelines, see [Migrating to the New Version of Custom Web Server](/guides/advanced-features/web-server.html#migrate-to-the-new-version-of-custom-web-server).
231236
:::
232237

238+
### Enable
239+
To enable the custom Web Server feature, follow these steps:
240+
1. Add `@modern-js/plugin-server``tsconfig-paths` and `ts-node` to `devDependencies` and install them.
241+
2. Add `server` to the `include` section of `tsconfig`.
242+
3. Register the `@modern-js/plugin-server` plugin in `modern.config.ts`.
243+
4. Create a `server/index.ts` file in the project directory, where you can write custom logic.
244+
233245
### Unstable Middleware
234246

235247
Modern.js supports adding rendering middleware to the Web Server, allowing custom logic execution before and after processing page routes.

packages/document/main-doc/docs/zh/guides/advanced-features/web-server.mdx

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,15 @@ Modern.js 将大部分项目需要的服务端能力都进行了封装,通常
1212
必须确保 Modern.js 版本是 x.67.5 及以上。
1313
:::
1414

15-
开启自定义 Web Server 功能,需要执行以下步骤:
16-
1. devDependencies 增加 `@modern-js/server-runtime``ts-node`依赖并安装。
17-
2. `tsconfig``include` 中添加 `server`
18-
3. 项目目录下创建 `server/modern.server.ts` 文件,可以在这个文件中编写自定义逻辑。
15+
开发者可以在项目根目录执行 `pnpm run new` 命令,开启「自定义 Web Server」功能:
16+
17+
```bash
18+
? 请选择你想要的操作 创建工程元素
19+
? 请选择创建元素类型 新建「自定义 Web Server」源码目录
20+
```
21+
22+
执行命令后,项目目录下会自动创建 `server/modern.server.ts` 文件,可以在这个文件中编写自定义逻辑。
23+
1924

2025
## 自定义 Web Server 能力
2126

@@ -227,6 +232,14 @@ export default () => {
227232
旧版 API 兼容但不再推荐使用,扩展 Server 能力请移步 [自定义 Web Server](/guides/advanced-features/web-server.html),迁移指南参考 [迁移至新版自定义 Web Server](/guides/advanced-features/web-server.html#迁移至新版自定义-web-server)
228233
:::
229234

235+
### 开启
236+
开启自定义 Web Server 功能,需要执行以下步骤:
237+
1. devDependencies 增加 `@modern-js/plugin-server``tsconfig-paths``ts-node`依赖并安装。
238+
2. `tsconfig``include` 中添加 `server`
239+
3. `modern.config.ts` 中注册 `@modern-js/plugin-server` 插件。
240+
4. 项目目录下创建 `server/index.ts` 文件,可以在这个文件中编写自定义逻辑。
241+
242+
230243
### Unstable Middleware
231244

232245
Modern.js 支持为 Web Server 添加渲染中间件,支持在处理页面路由的前后执行自定义逻辑。

packages/generator/generator-common/src/newAction/mwa/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ export const MWANewActionPluginName: Record<
175175
Record<string, string>
176176
> = {
177177
[ActionType.Element]: {
178-
[ActionElement.Server]: 'serverPlugin',
178+
[ActionElement.Server]: '',
179179
},
180180
[ActionType.Function]: {
181181
[ActionFunction.TailwindCSS]: 'tailwindcssPlugin',

packages/generator/generators/server-generator/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ const handleTemplateFile = async (
4949
}
5050

5151
const language = isTsProject(appDir) ? Language.TS : Language.JS;
52-
const serverPlugin = '@modern-js/plugin-server';
52+
const serverPlugin = '@modern-js/server-runtime';
5353
await appApi.runSubGenerator(
5454
getGeneratorPath(DependenceGenerator, context.config.distTag, [__dirname]),
5555
undefined,

packages/generator/generators/server-generator/templates/base-template/js/server/index.js.handlebars

Lines changed: 0 additions & 9 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { defineServerConfig } from '@modern-js/server-runtime';
2+
3+
const renderTiming = async (c, next) => {
4+
const start = Date.now();
5+
6+
await next();
7+
8+
console.log('render-timing', Date.now() - start);
9+
};
10+
11+
const requestTiming = async (c, next) => {
12+
const start = Date.now();
13+
14+
await next();
15+
16+
console.log('request-timing', Date.now() - start);
17+
};
18+
19+
export default defineServerConfig({
20+
middlewares: [
21+
{
22+
name: 'request-timing',
23+
handler: requestTiming,
24+
},
25+
],
26+
renderMiddlewares: [
27+
{
28+
name: 'render-timing',
29+
handler: renderTiming,
30+
},
31+
],
32+
plugins: [],
33+
});

packages/generator/generators/server-generator/templates/base-template/ts/server/index.ts.handlebars

Lines changed: 0 additions & 11 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import {
2+
type MiddlewareHandler,
3+
defineServerConfig
4+
} from '@modern-js/server-runtime';
5+
6+
const renderTiming: MiddlewareHandler = async (c, next) => {
7+
const start = Date.now();
8+
9+
await next();
10+
11+
console.log('render-timing', Date.now() - start);
12+
};
13+
14+
const requestTiming: MiddlewareHandler = async (c, next) => {
15+
const start = Date.now();
16+
17+
await next();
18+
19+
console.log('request-timing', Date.now() - start);
20+
};
21+
22+
export default defineServerConfig({
23+
middlewares: [
24+
{
25+
name: 'request-timing',
26+
handler: requestTiming,
27+
},
28+
],
29+
renderMiddlewares: [
30+
{
31+
name: 'render-timing',
32+
handler: renderTiming,
33+
},
34+
],
35+
plugins: [],
36+
});

0 commit comments

Comments
 (0)