diff --git a/examples/ssr-demo/src/pages/index.tsx b/examples/ssr-demo/src/pages/index.tsx
index 01b9151f2a85..1c1efec02c6d 100644
--- a/examples/ssr-demo/src/pages/index.tsx
+++ b/examples/ssr-demo/src/pages/index.tsx
@@ -1,5 +1,10 @@
import React from 'react';
-import { Link, useClientLoaderData, useServerLoaderData } from 'umi';
+import {
+ Link,
+ useClientLoaderData,
+ useServerInsertedHTML,
+ useServerLoaderData,
+} from 'umi';
import Button from '../components/Button';
// @ts-ignore
import bigImage from './big_image.jpg';
@@ -14,6 +19,11 @@ import umiLogo from './umi.png';
export default function HomePage() {
const clientLoaderData = useClientLoaderData();
const serverLoaderData = useServerLoaderData();
+
+ useServerInsertedHTML(() => {
+ return
inserted html
;
+ });
+
return (
Hello~
diff --git a/packages/preset-umi/src/commands/build.ts b/packages/preset-umi/src/commands/build.ts
index 140116a5bf60..ce3b69eb2469 100644
--- a/packages/preset-umi/src/commands/build.ts
+++ b/packages/preset-umi/src/commands/build.ts
@@ -161,6 +161,7 @@ umi build --clean
publicPath: api.config.publicPath,
});
const { vite } = api.args;
+
const markupArgs = await getMarkupArgs({ api });
const finalMarkUpArgs = {
...markupArgs,
diff --git a/packages/preset-umi/src/features/exportStatic/exportStatic.ts b/packages/preset-umi/src/features/exportStatic/exportStatic.ts
index 5c41a5f3787c..426a6dd344c6 100644
--- a/packages/preset-umi/src/features/exportStatic/exportStatic.ts
+++ b/packages/preset-umi/src/features/exportStatic/exportStatic.ts
@@ -1,11 +1,10 @@
import { getMarkup } from '@umijs/server';
-import { lodash, logger, Mustache, winPath } from '@umijs/utils';
+import { lodash, Mustache, winPath } from '@umijs/utils';
import assert from 'assert';
import { dirname, join, relative } from 'path';
import type { IApi, IRoute } from '../../types';
-import { absServerBuildPath } from '../ssr/utils';
+import { getPreRenderedHTML } from '../ssr/utils';
-let markupRender: any;
const IS_WIN = process.platform === 'win32';
interface IExportHtmlItem {
@@ -54,39 +53,6 @@ function getExportHtmlData(routes: Record): IExportHtmlItem[] {
return Array.from(map.values());
}
-/**
- * get pre-rendered html by route path
- */
-async function getPreRenderedHTML(api: IApi, htmlTpl: string, path: string) {
- markupRender ??= require(absServerBuildPath(api))._markupGenerator;
-
- try {
- const markup = await markupRender(path);
- const [mainTpl, extraTpl = ''] = markup.split('