From 53f38f2ad0764210b3c7d504b1f949444c78d96a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=87=E9=A3=8E?= Date: Sun, 8 Oct 2023 11:51:27 +0800 Subject: [PATCH 01/17] =?UTF-8?q?fix:=20dev=E7=8E=AF=E5=A2=83=E6=9E=84?= =?UTF-8?q?=E5=BB=BASSR=20server.js=E6=97=B6=EF=BC=8C=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E9=94=99=E8=AF=AF=E5=AF=BC=E8=87=B4=E8=BE=93?= =?UTF-8?q?=E5=87=BA=E7=9A=84dev=E4=BA=A7=E7=89=A9=E5=B8=A6=E4=B8=8A?= =?UTF-8?q?=E4=BA=86hash?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/preset-umi/src/features/ssr/webpack/webpack.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/preset-umi/src/features/ssr/webpack/webpack.ts b/packages/preset-umi/src/features/ssr/webpack/webpack.ts index e2b3dad228e4..fc26fdee7348 100644 --- a/packages/preset-umi/src/features/ssr/webpack/webpack.ts +++ b/packages/preset-umi/src/features/ssr/webpack/webpack.ts @@ -11,9 +11,9 @@ export const build = async (api: IApi, opts: any) => { const now = new Date().getTime(); const bundlerOpts: any = lodash.cloneDeep(opts); const oChainWebpack = bundlerOpts.chainWebpack; - const isDev = opts.env === Env.development; + const isDev = api.env === Env.development; const { userConfig, config } = opts; - const useHash = (config.hash || (userConfig?.hash && !isDev)); + const useHash = (config.hash || userConfig?.hash) && !isDev; // disable deadCode check delete bundlerOpts.config.deadCode; @@ -49,7 +49,9 @@ export const build = async (api: IApi, opts: any) => { memo.output .path(dirname(absOutputFile)) .filename(useHash ? 'umi.[contenthash:8].server.js' : 'umi.server.js') - .chunkFilename(useHash ? 'umi.[contenthash:8].server.js' : 'umi.server.js') + .chunkFilename( + useHash ? 'umi.[contenthash:8].server.js' : 'umi.server.js', + ) .libraryTarget('commonjs2'); // remove useless progress plugin From 7f6d6d54fad8930fb3c38133e873447e9e8b290f Mon Sep 17 00:00:00 2001 From: gwuhaolin Date: Sun, 8 Oct 2023 16:44:55 +0800 Subject: [PATCH 02/17] Update packages/preset-umi/src/features/ssr/webpack/webpack.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: chencheng (云谦) --- packages/preset-umi/src/features/ssr/webpack/webpack.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/preset-umi/src/features/ssr/webpack/webpack.ts b/packages/preset-umi/src/features/ssr/webpack/webpack.ts index fc26fdee7348..01b61aace4cf 100644 --- a/packages/preset-umi/src/features/ssr/webpack/webpack.ts +++ b/packages/preset-umi/src/features/ssr/webpack/webpack.ts @@ -13,7 +13,7 @@ export const build = async (api: IApi, opts: any) => { const oChainWebpack = bundlerOpts.chainWebpack; const isDev = api.env === Env.development; const { userConfig, config } = opts; - const useHash = (config.hash || userConfig?.hash) && !isDev; + const useHash = api.config.hash && api.env === Env.production; // disable deadCode check delete bundlerOpts.config.deadCode; From 5d004a1520970695dcae67ba4308f7bbb3e28851 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=87=E9=A3=8E?= Date: Sun, 8 Oct 2023 16:57:32 +0800 Subject: [PATCH 03/17] =?UTF-8?q?fix:=20dev=E7=8E=AF=E5=A2=83=E6=9E=84?= =?UTF-8?q?=E5=BB=BASSR=20server.js=E6=97=B6=EF=BC=8C=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E9=94=99=E8=AF=AF=E5=AF=BC=E8=87=B4=E8=BE=93?= =?UTF-8?q?=E5=87=BA=E7=9A=84dev=E4=BA=A7=E7=89=A9=E5=B8=A6=E4=B8=8A?= =?UTF-8?q?=E4=BA=86hash?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/preset-umi/src/features/ssr/webpack/webpack.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/preset-umi/src/features/ssr/webpack/webpack.ts b/packages/preset-umi/src/features/ssr/webpack/webpack.ts index 01b61aace4cf..dd527d58f88f 100644 --- a/packages/preset-umi/src/features/ssr/webpack/webpack.ts +++ b/packages/preset-umi/src/features/ssr/webpack/webpack.ts @@ -11,8 +11,6 @@ export const build = async (api: IApi, opts: any) => { const now = new Date().getTime(); const bundlerOpts: any = lodash.cloneDeep(opts); const oChainWebpack = bundlerOpts.chainWebpack; - const isDev = api.env === Env.development; - const { userConfig, config } = opts; const useHash = api.config.hash && api.env === Env.production; // disable deadCode check delete bundlerOpts.config.deadCode; From 5b0946a70121a8f5c7332e70bd0aa4da904253e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=87=E9=A3=8E?= Date: Mon, 9 Oct 2023 15:19:15 +0800 Subject: [PATCH 04/17] =?UTF-8?q?feature:=20=E6=94=AF=E6=8C=81=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89SSR=E6=9E=84=E5=BB=BA=E7=9B=AE=E6=A0=87?= =?UTF-8?q?=EF=BC=8C=E9=BB=98=E8=AE=A4=E4=B8=BAnode=EF=BC=8C=E5=8F=AF?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=B8=BAwebworker=E4=BB=A5=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=E5=9C=A8=E7=B1=BB=E4=BC=BCCloudflare=20Worke?= =?UTF-8?q?rs=E7=9A=84=E5=B9=B3=E5=8F=B0=20=E4=BB=A5=E8=A7=A3=E5=86=B3=20r?= =?UTF-8?q?eact-dom/server=20renderToReadableStream=20=E4=B8=8D=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/preset-umi/src/features/ssr/ssr.ts | 1 + packages/preset-umi/src/features/ssr/webpack/webpack.ts | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/preset-umi/src/features/ssr/ssr.ts b/packages/preset-umi/src/features/ssr/ssr.ts index 2136eb37006b..d7ec11f8ffb6 100644 --- a/packages/preset-umi/src/features/ssr/ssr.ts +++ b/packages/preset-umi/src/features/ssr/ssr.ts @@ -27,6 +27,7 @@ export default (api: IApi) => { serverBuildPath: zod.string(), platform: zod.string(), builder: zod.enum(['esbuild', 'webpack']), + target: zod.enum(['node', 'webworker']), }) .deepPartial(); }, diff --git a/packages/preset-umi/src/features/ssr/webpack/webpack.ts b/packages/preset-umi/src/features/ssr/webpack/webpack.ts index dd527d58f88f..a5a9ccb73a02 100644 --- a/packages/preset-umi/src/features/ssr/webpack/webpack.ts +++ b/packages/preset-umi/src/features/ssr/webpack/webpack.ts @@ -40,7 +40,8 @@ export const build = async (api: IApi, opts: any) => { await oChainWebpack(memo); memo.entryPoints.clear(); memo.entry('umi').add(resolve(api.paths.absTmpPath, 'umi.server.ts')); - memo.target('node'); + // 支持自定义SSR构建目标,默认为node,可配置为webworker以支持运行在类似Cloudflare Workers的平台 + memo.target(api.config.ssr.target || 'node'); memo.name('umi'); memo.devtool(false); From 7fe8bdc7a8a9fde59032234cd918829f399b8229 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=87=E9=A3=8E?= Date: Mon, 9 Oct 2023 17:33:21 +0800 Subject: [PATCH 05/17] =?UTF-8?q?feature:=20getManifest=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E4=BC=A0=E5=85=A5sourceDir=E8=A1=A8=E7=A4=BASSR=E4=BA=A7?= =?UTF-8?q?=E7=89=A9=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/preset-umi/templates/server.tpl | 14 +++----------- packages/server/src/ssr.ts | 19 ++++++++++--------- 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/packages/preset-umi/templates/server.tpl b/packages/preset-umi/templates/server.tpl index 5cae4e772b7a..b98d54a5ed3f 100644 --- a/packages/preset-umi/templates/server.tpl +++ b/packages/preset-umi/templates/server.tpl @@ -26,30 +26,22 @@ export function getValidKeys() { return [{{#validKeys}}'{{{ . }}}',{{/validKeys}}]; } -export function getManifest() { +export function getManifest(sourceDir) { return JSON.parse(require('fs').readFileSync( - process.env.SSR_RESOURCE_DIR ? process.env.SSR_RESOURCE_DIR + '/build-manifest.json' : - '{{{ assetsPath }}}', 'utf-8')); + sourceDir ? require('path').join(sourceDir,'build-manifest.json') : '{{{ assetsPath }}}', 'utf-8')); } export function createHistory(opts) { return createClientHistory(opts); } -// TODO: remove global variable -global.g_getAssets = (fileName) => { - let m = typeof manifest === 'function' ? manifest() : manifest; - return m.assets[fileName]; -}; - -const manifest = {{{ env }}} === 'development' ? getManifest : getManifest(); const createOpts = { routesWithServerLoader, PluginManager, getPlugins, getValidKeys, getRoutes, - manifest, + manifest: getManifest, getClientRootComponent, helmetContext, createHistory, diff --git a/packages/server/src/ssr.ts b/packages/server/src/ssr.ts index 1ba332e36b6d..ea97a52d425a 100644 --- a/packages/server/src/ssr.ts +++ b/packages/server/src/ssr.ts @@ -14,7 +14,7 @@ interface CreateRequestHandlerOptions { routesWithServerLoader: RouteLoaders; PluginManager: any; manifest: - | (() => { assets: Record }) + | ((sourceDir?: string | null) => { assets: Record }) | { assets: Record }; getPlugins: () => any; getValidKeys: () => any; @@ -24,6 +24,7 @@ interface CreateRequestHandlerOptions { helmetContext?: any; ServerInsertedHTMLContext: React.Context; withoutHTML?: boolean; + sourceDir?: string | null; } const createJSXProvider = ( @@ -55,6 +56,7 @@ function createJSXGenerator(opts: CreateRequestHandlerOptions) { getValidKeys, getRoutes, createHistory, + sourceDir, } = opts; // make import { history } from 'umi' work @@ -95,7 +97,7 @@ function createJSXGenerator(opts: CreateRequestHandlerOptions) { ); const manifest = - typeof opts.manifest === 'function' ? opts.manifest() : opts.manifest; + typeof opts.manifest === 'function' ? opts.manifest(sourceDir) : opts.manifest; const context = { routes, routeComponents, @@ -238,13 +240,12 @@ export default function createRequestHandler( } export function createUmiHandler(opts: CreateRequestHandlerOptions) { - const jsxGeneratorDeferrer = createJSXGenerator({ - ...opts, - withoutHTML: true, - }); - - return function (req: Request) { + return function (req: Request, params?: CreateRequestHandlerOptions) { return new Promise(async (resolve, reject) => { + const jsxGeneratorDeferrer = createJSXGenerator({ + ...opts, + ...params, + }); const jsx = await jsxGeneratorDeferrer(new URL(req.url).pathname); if (!jsx) { @@ -252,7 +253,7 @@ export function createUmiHandler(opts: CreateRequestHandlerOptions) { return; } - const stream = await ReactDomServer.renderToReadableStream(jsx.element, { + const stream = await (ReactDomServer.renderToReadableStream || ReactDomServer.renderToNodeStream)(jsx.element, { bootstrapScripts: [jsx.manifest.assets['umi.js'] || '/umi.js'], onError(err: any) { reject(err); From 542304af6ed2fb115ba92b575b2e03161aa632ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=87=E9=A3=8E?= Date: Mon, 9 Oct 2023 17:35:41 +0800 Subject: [PATCH 06/17] =?UTF-8?q?feature:=20getManifest=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E4=BC=A0=E5=85=A5sourceDir=E8=A1=A8=E7=A4=BASSR=E4=BA=A7?= =?UTF-8?q?=E7=89=A9=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/server/src/ssr.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/server/src/ssr.ts b/packages/server/src/ssr.ts index ea97a52d425a..b813495bdb9e 100644 --- a/packages/server/src/ssr.ts +++ b/packages/server/src/ssr.ts @@ -253,6 +253,7 @@ export function createUmiHandler(opts: CreateRequestHandlerOptions) { return; } + // 同时兼容target = node 和 target = webworker 两个场景 const stream = await (ReactDomServer.renderToReadableStream || ReactDomServer.renderToNodeStream)(jsx.element, { bootstrapScripts: [jsx.manifest.assets['umi.js'] || '/umi.js'], onError(err: any) { From 335e6a69b6c135e560720bb5843551e9db8280a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=87=E9=A3=8E?= Date: Mon, 9 Oct 2023 17:55:45 +0800 Subject: [PATCH 07/17] fix: rendertoreadablestream is not a function --- packages/server/src/ssr.ts | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/packages/server/src/ssr.ts b/packages/server/src/ssr.ts index b813495bdb9e..338ae3881f42 100644 --- a/packages/server/src/ssr.ts +++ b/packages/server/src/ssr.ts @@ -240,28 +240,19 @@ export default function createRequestHandler( } export function createUmiHandler(opts: CreateRequestHandlerOptions) { - return function (req: Request, params?: CreateRequestHandlerOptions) { - return new Promise(async (resolve, reject) => { - const jsxGeneratorDeferrer = createJSXGenerator({ - ...opts, - ...params, - }); - const jsx = await jsxGeneratorDeferrer(new URL(req.url).pathname); + return async function (req: Request, params?: CreateRequestHandlerOptions) { + const jsxGeneratorDeferrer = createJSXGenerator({ + ...opts, + ...params, + }); + const jsx = await jsxGeneratorDeferrer(new URL(req.url).pathname); - if (!jsx) { - reject(new Error('no page resource')); - return; - } + if (!jsx) { + throw new Error('no page resource') + } - // 同时兼容target = node 和 target = webworker 两个场景 - const stream = await (ReactDomServer.renderToReadableStream || ReactDomServer.renderToNodeStream)(jsx.element, { - bootstrapScripts: [jsx.manifest.assets['umi.js'] || '/umi.js'], - onError(err: any) { - reject(err); - }, - }); - resolve(stream); - }); + const stream = await ReactDomServer.renderToNodeStream(jsx.element); + return stream; }; } From e7fb0c1708ac2ccaffd5bbbdcdd15838a5b6f6c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=87=E9=A3=8E?= Date: Mon, 9 Oct 2023 17:56:09 +0800 Subject: [PATCH 08/17] =?UTF-8?q?Revert=20"feature:=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89SSR=E6=9E=84=E5=BB=BA=E7=9B=AE?= =?UTF-8?q?=E6=A0=87=EF=BC=8C=E9=BB=98=E8=AE=A4=E4=B8=BAnode=EF=BC=8C?= =?UTF-8?q?=E5=8F=AF=E9=85=8D=E7=BD=AE=E4=B8=BAwebworker=E4=BB=A5=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E8=BF=90=E8=A1=8C=E5=9C=A8=E7=B1=BB=E4=BC=BCCloudflar?= =?UTF-8?q?e=20Workers=E7=9A=84=E5=B9=B3=E5=8F=B0"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 5b0946a70121a8f5c7332e70bd0aa4da904253e8. --- packages/preset-umi/src/features/ssr/ssr.ts | 1 - packages/preset-umi/src/features/ssr/webpack/webpack.ts | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/preset-umi/src/features/ssr/ssr.ts b/packages/preset-umi/src/features/ssr/ssr.ts index d7ec11f8ffb6..2136eb37006b 100644 --- a/packages/preset-umi/src/features/ssr/ssr.ts +++ b/packages/preset-umi/src/features/ssr/ssr.ts @@ -27,7 +27,6 @@ export default (api: IApi) => { serverBuildPath: zod.string(), platform: zod.string(), builder: zod.enum(['esbuild', 'webpack']), - target: zod.enum(['node', 'webworker']), }) .deepPartial(); }, diff --git a/packages/preset-umi/src/features/ssr/webpack/webpack.ts b/packages/preset-umi/src/features/ssr/webpack/webpack.ts index a5a9ccb73a02..dd527d58f88f 100644 --- a/packages/preset-umi/src/features/ssr/webpack/webpack.ts +++ b/packages/preset-umi/src/features/ssr/webpack/webpack.ts @@ -40,8 +40,7 @@ export const build = async (api: IApi, opts: any) => { await oChainWebpack(memo); memo.entryPoints.clear(); memo.entry('umi').add(resolve(api.paths.absTmpPath, 'umi.server.ts')); - // 支持自定义SSR构建目标,默认为node,可配置为webworker以支持运行在类似Cloudflare Workers的平台 - memo.target(api.config.ssr.target || 'node'); + memo.target('node'); memo.name('umi'); memo.devtool(false); From 64a9a42a06b0843447e7d65a1cbdb39377157c10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=87=E9=A3=8E?= Date: Mon, 9 Oct 2023 18:07:39 +0800 Subject: [PATCH 09/17] fix: rendertoreadablestream is not a function --- packages/server/src/ssr.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/server/src/ssr.ts b/packages/server/src/ssr.ts index 338ae3881f42..51b799405157 100644 --- a/packages/server/src/ssr.ts +++ b/packages/server/src/ssr.ts @@ -239,6 +239,7 @@ export default function createRequestHandler( }; } +// 新增的给CDN worker用的SSR请求handle export function createUmiHandler(opts: CreateRequestHandlerOptions) { return async function (req: Request, params?: CreateRequestHandlerOptions) { const jsxGeneratorDeferrer = createJSXGenerator({ @@ -251,8 +252,7 @@ export function createUmiHandler(opts: CreateRequestHandlerOptions) { throw new Error('no page resource') } - const stream = await ReactDomServer.renderToNodeStream(jsx.element); - return stream; + return ReactDomServer.renderToNodeStream(jsx.element); }; } From bfcd087a79b8fcc571758cfb9238b78a2aad3e47 Mon Sep 17 00:00:00 2001 From: gwuhaolin Date: Tue, 10 Oct 2023 10:00:03 +0800 Subject: [PATCH 10/17] Update packages/server/src/ssr.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 咲奈Sakina <59400654+fz6m@users.noreply.github.com> --- packages/server/src/ssr.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/src/ssr.ts b/packages/server/src/ssr.ts index 51b799405157..60baa41aad76 100644 --- a/packages/server/src/ssr.ts +++ b/packages/server/src/ssr.ts @@ -24,7 +24,7 @@ interface CreateRequestHandlerOptions { helmetContext?: any; ServerInsertedHTMLContext: React.Context; withoutHTML?: boolean; - sourceDir?: string | null; + sourceDir?: string; } const createJSXProvider = ( From d1a6e3305467c8b380729e651a9fd12fb7151717 Mon Sep 17 00:00:00 2001 From: gwuhaolin Date: Tue, 10 Oct 2023 10:00:17 +0800 Subject: [PATCH 11/17] Update packages/server/src/ssr.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 咲奈Sakina <59400654+fz6m@users.noreply.github.com> --- packages/server/src/ssr.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/src/ssr.ts b/packages/server/src/ssr.ts index 60baa41aad76..822825c6d4f7 100644 --- a/packages/server/src/ssr.ts +++ b/packages/server/src/ssr.ts @@ -14,7 +14,7 @@ interface CreateRequestHandlerOptions { routesWithServerLoader: RouteLoaders; PluginManager: any; manifest: - | ((sourceDir?: string | null) => { assets: Record }) + | ((sourceDir?: string) => { assets: Record }) | { assets: Record }; getPlugins: () => any; getValidKeys: () => any; From e9ced7f432340059c4893a9349fb7c5f2361b5f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=87=E9=A3=8E?= Date: Tue, 10 Oct 2023 10:13:12 +0800 Subject: [PATCH 12/17] =?UTF-8?q?fix:=20=E8=BF=98=E5=8E=9Fg=5FgetAssets?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/preset-umi/templates/server.tpl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/preset-umi/templates/server.tpl b/packages/preset-umi/templates/server.tpl index b98d54a5ed3f..44e6a28d48f0 100644 --- a/packages/preset-umi/templates/server.tpl +++ b/packages/preset-umi/templates/server.tpl @@ -35,6 +35,12 @@ export function createHistory(opts) { return createClientHistory(opts); } +// TODO: remove global variable +global.g_getAssets = (fileName) => { + let m = typeof manifest === 'function' ? manifest() : manifest; + return m.assets[fileName]; +}; +const manifest = {{{ env }}} === 'development' ? getManifest : getManifest(); const createOpts = { routesWithServerLoader, PluginManager, From 1ab01c48030213d0daee3e84603eeef079b2e168 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=87=E9=A3=8E?= Date: Tue, 10 Oct 2023 16:33:43 +0800 Subject: [PATCH 13/17] =?UTF-8?q?fix:=20=E8=A2=AB=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E6=97=B6=E6=89=8D=E8=B0=83=E7=94=A8getManifest()=EF=BC=8C?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E5=9C=A8=E5=85=A5=E5=8F=A3=E7=AB=8B=E5=8D=B3?= =?UTF-8?q?=E8=B0=83=E7=94=A8getManifest()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/preset-umi/templates/server.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/preset-umi/templates/server.tpl b/packages/preset-umi/templates/server.tpl index 44e6a28d48f0..55ee84b145cb 100644 --- a/packages/preset-umi/templates/server.tpl +++ b/packages/preset-umi/templates/server.tpl @@ -37,10 +37,10 @@ export function createHistory(opts) { // TODO: remove global variable global.g_getAssets = (fileName) => { + const manifest = {{{ env }}} === 'development' ? getManifest : getManifest(); let m = typeof manifest === 'function' ? manifest() : manifest; return m.assets[fileName]; }; -const manifest = {{{ env }}} === 'development' ? getManifest : getManifest(); const createOpts = { routesWithServerLoader, PluginManager, From af6b87f11b259f7a1081a6e4360a20d77ab6f68e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=87=E9=A3=8E?= Date: Tue, 10 Oct 2023 16:41:04 +0800 Subject: [PATCH 14/17] =?UTF-8?q?fix:=20=E8=A2=AB=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E6=97=B6=E6=89=8D=E8=B0=83=E7=94=A8getManifest()=EF=BC=8C?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E5=9C=A8=E5=85=A5=E5=8F=A3=E7=AB=8B=E5=8D=B3?= =?UTF-8?q?=E8=B0=83=E7=94=A8getManifest()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/preset-umi/templates/server.tpl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/preset-umi/templates/server.tpl b/packages/preset-umi/templates/server.tpl index 55ee84b145cb..9ff0c01b9d7b 100644 --- a/packages/preset-umi/templates/server.tpl +++ b/packages/preset-umi/templates/server.tpl @@ -37,8 +37,7 @@ export function createHistory(opts) { // TODO: remove global variable global.g_getAssets = (fileName) => { - const manifest = {{{ env }}} === 'development' ? getManifest : getManifest(); - let m = typeof manifest === 'function' ? manifest() : manifest; + let m = getManifest() return m.assets[fileName]; }; const createOpts = { From aceacd137b1e468ae8d3f2bc2e87428a202891c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=87=E9=A3=8E?= Date: Tue, 10 Oct 2023 16:49:10 +0800 Subject: [PATCH 15/17] =?UTF-8?q?fix:=20=E8=A2=AB=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E6=97=B6=E6=89=8D=E8=B0=83=E7=94=A8getManifest()=EF=BC=8C?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E5=9C=A8=E5=85=A5=E5=8F=A3=E7=AB=8B=E5=8D=B3?= =?UTF-8?q?=E8=B0=83=E7=94=A8getManifest()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/preset-umi/templates/server.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/preset-umi/templates/server.tpl b/packages/preset-umi/templates/server.tpl index 9ff0c01b9d7b..13be23d98838 100644 --- a/packages/preset-umi/templates/server.tpl +++ b/packages/preset-umi/templates/server.tpl @@ -37,7 +37,7 @@ export function createHistory(opts) { // TODO: remove global variable global.g_getAssets = (fileName) => { - let m = getManifest() + let m = getManifest(); return m.assets[fileName]; }; const createOpts = { From a55b7082df93eebbc14d587b2299f1a8108cfb9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=87=E9=A3=8E?= Date: Wed, 11 Oct 2023 16:23:36 +0800 Subject: [PATCH 16/17] =?UTF-8?q?feature:=20SSR=E6=A8=A1=E5=BC=8F=E4=B8=8B?= =?UTF-8?q?=EF=BC=8C=E5=A4=9A=E8=BE=93=E5=87=BA=E4=B8=80=E4=BB=BD=E5=92=8C?= =?UTF-8?q?index.html=E5=AE=8C=E5=85=A8=E4=B8=80=E8=87=B4=E7=9A=84*.html?= =?UTF-8?q?=E6=96=87=E4=BB=B6=EF=BC=8C=E7=94=A8=E4=BA=8EER=E5=9C=BA?= =?UTF-8?q?=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/preset-umi/src/commands/build.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/preset-umi/src/commands/build.ts b/packages/preset-umi/src/commands/build.ts index 9dcd1e4a829d..f5884aa4a634 100644 --- a/packages/preset-umi/src/commands/build.ts +++ b/packages/preset-umi/src/commands/build.ts @@ -197,6 +197,10 @@ umi build --clean fsExtra.mkdirpSync(dirname(absPath)); writeFileSync(absPath, content, 'utf-8'); + if (api.config.ssr && path === 'index.html') { + // SSR模式下,多输出一份和index.html完全一致的*.html文件,用于ER场景 + writeFileSync(resolve(api.paths.absOutputPath, '*.html'), content, 'utf-8'); + } logger.event(`Build ${path}`); }); } From d57224726c0d22cb94d44967a04ba34b6f7d1963 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=87=E9=A3=8E?= Date: Wed, 11 Oct 2023 16:45:15 +0800 Subject: [PATCH 17/17] =?UTF-8?q?feature:=20SSR=E6=A8=A1=E5=BC=8F=E4=B8=8B?= =?UTF-8?q?=EF=BC=8C=E5=A4=9A=E8=BE=93=E5=87=BA=E4=B8=80=E4=BB=BD=E5=92=8C?= =?UTF-8?q?index.html=E5=AE=8C=E5=85=A8=E4=B8=80=E8=87=B4=E7=9A=84*.html?= =?UTF-8?q?=E6=96=87=E4=BB=B6=EF=BC=8C=E7=94=A8=E4=BA=8EER=E5=9C=BA?= =?UTF-8?q?=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/preset-umi/src/commands/build.ts | 4 ---- packages/preset-umi/src/features/ssr/ssr.ts | 5 +++++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/preset-umi/src/commands/build.ts b/packages/preset-umi/src/commands/build.ts index f5884aa4a634..9dcd1e4a829d 100644 --- a/packages/preset-umi/src/commands/build.ts +++ b/packages/preset-umi/src/commands/build.ts @@ -197,10 +197,6 @@ umi build --clean fsExtra.mkdirpSync(dirname(absPath)); writeFileSync(absPath, content, 'utf-8'); - if (api.config.ssr && path === 'index.html') { - // SSR模式下,多输出一份和index.html完全一致的*.html文件,用于ER场景 - writeFileSync(resolve(api.paths.absOutputPath, '*.html'), content, 'utf-8'); - } logger.event(`Build ${path}`); }); } diff --git a/packages/preset-umi/src/features/ssr/ssr.ts b/packages/preset-umi/src/features/ssr/ssr.ts index 2136eb37006b..6fe0e25db92f 100644 --- a/packages/preset-umi/src/features/ssr/ssr.ts +++ b/packages/preset-umi/src/features/ssr/ssr.ts @@ -145,6 +145,11 @@ export default function handler(request, response) { } }); + api.onBuildHtmlComplete(() => { + // SSR模式下,多输出一份和index.html完全一致的*.html文件,用于ER场景 + fsExtra.copyFileSync(join(api.paths.absOutputPath, 'index.html'), join(api.paths.absOutputPath, '*.html')); + }) + const pluginName = 'ProcessAssetsPlugin'; class ProcessAssetsPlugin { apply(compiler: Compiler) {