From c68415ccba8b0dd55f9c238d4967391fc8cdca1a Mon Sep 17 00:00:00 2001 From: Jinbao1001 Date: Thu, 16 May 2024 13:56:15 +0800 Subject: [PATCH 01/11] refactor: change route preonload inline to ref --- .../routePreloadOnLoad/routePreloadOnLoad.ts | 47 ++++++++++--------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts index a42eebe7ffce..51cbc0fec1e1 100644 --- a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts +++ b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts @@ -3,7 +3,7 @@ import type { StatsCompilation, } from '@umijs/bundler-webpack/compiled/webpack'; import { lodash, logger, winPath } from '@umijs/utils'; -import { readFileSync } from 'fs'; +import { readFileSync, writeFileSync } from 'fs'; import { dirname, isAbsolute, join, relative } from 'path'; import { TEMPLATES_DIR } from '../../constants'; import { createResolver } from '../../libs/scan'; @@ -234,29 +234,11 @@ export default (api: IApi) => { : // script mode [ { - content: readFileSync( - join( - TEMPLATES_DIR, - 'routePreloadOnLoad/preloadRouteFilesScp.js', - ), - 'utf-8', - ) - .replace( - '"{{routeChunkFilesMap}}"', - JSON.stringify(routeChunkFilesMap), - ) - .replace('{{basename}}', api.config.base) - .replace( - '"{{publicPath}}"', - `${ - // handle runtimePublicPath - api.config.runtimePublicPath ? 'window.publicPath||' : '' - }"${api.config.publicPath}"`, - ), + src: `/${PRELOAD_ROUTE_MAP_SCP_TYPE}.js`, }, ]; } - + return []; }, stage: Infinity, @@ -306,6 +288,29 @@ export default (api: IApi) => { .value() as any, }; } + // + if (api.name === 'build' && routeChunkFilesMap && !api.config.tern) { + writeFileSync( + join(api.paths.absOutputPath, `${PRELOAD_ROUTE_MAP_SCP_TYPE}.js`), + readFileSync( + join(TEMPLATES_DIR, 'routePreloadOnLoad/preloadRouteFilesScp.js'), + 'utf-8', + ) + .replace( + '"{{routeChunkFilesMap}}"', + JSON.stringify(routeChunkFilesMap), + ) + .replace('{{basename}}', api.config.base) + .replace( + '"{{publicPath}}"', + `${ + // handle runtimePublicPath + api.config.runtimePublicPath ? 'window.publicPath||' : '' + }"${api.config.publicPath}"`, + ), + ), + 'utf-8'; + } } }); }; From 45d7e4ea075433dbe49d5147b2927b7cd7331524 Mon Sep 17 00:00:00 2001 From: Jinbao1001 Date: Thu, 16 May 2024 13:58:36 +0800 Subject: [PATCH 02/11] =?UTF-8?q?chore:=20=E5=88=A0=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/features/routePreloadOnLoad/routePreloadOnLoad.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts index 51cbc0fec1e1..e5bdf3808ebf 100644 --- a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts +++ b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts @@ -288,7 +288,6 @@ export default (api: IApi) => { .value() as any, }; } - // if (api.name === 'build' && routeChunkFilesMap && !api.config.tern) { writeFileSync( join(api.paths.absOutputPath, `${PRELOAD_ROUTE_MAP_SCP_TYPE}.js`), From a264a33c06e2a7118b9830d4226b83ae215813f2 Mon Sep 17 00:00:00 2001 From: Jinbao1001 Date: Thu, 16 May 2024 15:11:25 +0800 Subject: [PATCH 03/11] fix: join publicPath --- .../src/features/routePreloadOnLoad/routePreloadOnLoad.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts index e5bdf3808ebf..3a3aa2b8d466 100644 --- a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts +++ b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts @@ -234,7 +234,10 @@ export default (api: IApi) => { : // script mode [ { - src: `/${PRELOAD_ROUTE_MAP_SCP_TYPE}.js`, + src: join( + api.config.publicPath, + `/${PRELOAD_ROUTE_MAP_SCP_TYPE}.js`, + ), }, ]; } From c4768bc9ba6ec496ee570fc3baf260034d861603 Mon Sep 17 00:00:00 2001 From: Jinbao1001 Date: Thu, 16 May 2024 15:17:12 +0800 Subject: [PATCH 04/11] fix: join publicPath auto --- .../src/features/routePreloadOnLoad/routePreloadOnLoad.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts index 3a3aa2b8d466..fdd34938b10a 100644 --- a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts +++ b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts @@ -222,6 +222,8 @@ export default (api: IApi) => { api.addHTMLHeadScripts({ fn: () => { if (api.name === 'build' && routeChunkFilesMap) { + const { publicPath } = api.config; + const displayPublicPath = publicPath === 'auto' ? '/' : publicPath; // internal tern app use map mode return api.config.tern ? // map mode @@ -235,7 +237,7 @@ export default (api: IApi) => { [ { src: join( - api.config.publicPath, + displayPublicPath, `/${PRELOAD_ROUTE_MAP_SCP_TYPE}.js`, ), }, From 724143d24ce2c18b50c4ee24aab6667e0ac919d0 Mon Sep 17 00:00:00 2001 From: Jinbao1001 Date: Thu, 16 May 2024 15:29:23 +0800 Subject: [PATCH 05/11] fix: not use join --- .../src/features/routePreloadOnLoad/routePreloadOnLoad.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts index fdd34938b10a..68811231e8b0 100644 --- a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts +++ b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts @@ -236,10 +236,7 @@ export default (api: IApi) => { : // script mode [ { - src: join( - displayPublicPath, - `/${PRELOAD_ROUTE_MAP_SCP_TYPE}.js`, - ), + src: `${displayPublicPath}${PRELOAD_ROUTE_MAP_SCP_TYPE}.js`, }, ]; } From 2a5f0310ce33d0be78b1f425d1e825c42d986ac8 Mon Sep 17 00:00:00 2001 From: Jinbao1001 Date: Thu, 16 May 2024 16:12:18 +0800 Subject: [PATCH 06/11] refactor: add hash to the preloadhelper.js --- .../routePreloadOnLoad/routePreloadOnLoad.ts | 20 ++++++++++++------- .../src/features/routePreloadOnLoad/utils.ts | 1 + 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts index 68811231e8b0..958a97a3c080 100644 --- a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts +++ b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts @@ -3,12 +3,13 @@ import type { StatsCompilation, } from '@umijs/bundler-webpack/compiled/webpack'; import { lodash, logger, winPath } from '@umijs/utils'; +import { createHash } from 'crypto'; import { readFileSync, writeFileSync } from 'fs'; import { dirname, isAbsolute, join, relative } from 'path'; import { TEMPLATES_DIR } from '../../constants'; import { createResolver } from '../../libs/scan'; import type { IApi, IRoute } from '../../types'; -import { PRELOAD_ROUTE_MAP_SCP_TYPE } from './utils'; +import { PRELOAD_ROUTE_HELPER, PRELOAD_ROUTE_MAP_SCP_TYPE } from './utils'; export interface IRouteChunkFilesMap { /** @@ -205,7 +206,7 @@ async function getRoutePathFilesMap( export default (api: IApi) => { let routeChunkFilesMap: IRouteChunkFilesMap; - + let hash = ''; api.describe({ enableBy: () => // enable when package name available @@ -223,6 +224,7 @@ export default (api: IApi) => { fn: () => { if (api.name === 'build' && routeChunkFilesMap) { const { publicPath } = api.config; + const hashedPart = hash ? `.${hash}.js` : '.js'; const displayPublicPath = publicPath === 'auto' ? '/' : publicPath; // internal tern app use map mode return api.config.tern @@ -236,7 +238,7 @@ export default (api: IApi) => { : // script mode [ { - src: `${displayPublicPath}${PRELOAD_ROUTE_MAP_SCP_TYPE}.js`, + src: `${displayPublicPath}${PRELOAD_ROUTE_HELPER}${hashedPart}`, }, ]; } @@ -291,12 +293,16 @@ export default (api: IApi) => { }; } if (api.name === 'build' && routeChunkFilesMap && !api.config.tern) { + const content = readFileSync( + join(TEMPLATES_DIR, 'routePreloadOnLoad/preloadRouteFilesScp.js'), + 'utf-8', + ); + if (api.config.hash) { + hash = createHash('md5').update(content).digest('hex'); + } writeFileSync( join(api.paths.absOutputPath, `${PRELOAD_ROUTE_MAP_SCP_TYPE}.js`), - readFileSync( - join(TEMPLATES_DIR, 'routePreloadOnLoad/preloadRouteFilesScp.js'), - 'utf-8', - ) + content .replace( '"{{routeChunkFilesMap}}"', JSON.stringify(routeChunkFilesMap), diff --git a/packages/preset-umi/src/features/routePreloadOnLoad/utils.ts b/packages/preset-umi/src/features/routePreloadOnLoad/utils.ts index 56bb90750736..625fef5cebb2 100644 --- a/packages/preset-umi/src/features/routePreloadOnLoad/utils.ts +++ b/packages/preset-umi/src/features/routePreloadOnLoad/utils.ts @@ -13,6 +13,7 @@ export interface IPreloadRouteFile { } export const PRELOAD_ROUTE_MAP_SCP_TYPE = 'umi-route-chunk-files-map'; +export const PRELOAD_ROUTE_HELPER = '_umi_route_preload_helper'; export function getPreloadRouteFiles( path: string, From 56e88d21e80bbc13e5802e8678523bdddcaf0848 Mon Sep 17 00:00:00 2001 From: Jinbao1001 Date: Thu, 16 May 2024 16:39:20 +0800 Subject: [PATCH 07/11] =?UTF-8?q?refactor:=20=E4=BF=AE=E6=94=B9hash?= =?UTF-8?q?=E9=95=BF=E5=BA=A6=E4=B8=BA8=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/features/routePreloadOnLoad/routePreloadOnLoad.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts index 958a97a3c080..cafab54508e4 100644 --- a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts +++ b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts @@ -298,7 +298,10 @@ export default (api: IApi) => { 'utf-8', ); if (api.config.hash) { - hash = createHash('md5').update(content).digest('hex'); + hash = createHash('md5') + .update(content) + .digest('hex') + .substring(0, 8); } writeFileSync( join(api.paths.absOutputPath, `${PRELOAD_ROUTE_MAP_SCP_TYPE}.js`), From 127bf4f13343c6414fa4a5eae7cda79db0d931b5 Mon Sep 17 00:00:00 2001 From: Jinbao1001 Date: Thu, 16 May 2024 16:54:49 +0800 Subject: [PATCH 08/11] fix: content hash after replace --- .../routePreloadOnLoad/routePreloadOnLoad.ts | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts index cafab54508e4..834deeb177c2 100644 --- a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts +++ b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts @@ -296,7 +296,19 @@ export default (api: IApi) => { const content = readFileSync( join(TEMPLATES_DIR, 'routePreloadOnLoad/preloadRouteFilesScp.js'), 'utf-8', - ); + ) + .replace( + '"{{routeChunkFilesMap}}"', + JSON.stringify(routeChunkFilesMap), + ) + .replace('{{basename}}', api.config.base) + .replace( + '"{{publicPath}}"', + `${ + // handle runtimePublicPath + api.config.runtimePublicPath ? 'window.publicPath||' : '' + }"${api.config.publicPath}"`, + ); if (api.config.hash) { hash = createHash('md5') .update(content) @@ -305,19 +317,7 @@ export default (api: IApi) => { } writeFileSync( join(api.paths.absOutputPath, `${PRELOAD_ROUTE_MAP_SCP_TYPE}.js`), - content - .replace( - '"{{routeChunkFilesMap}}"', - JSON.stringify(routeChunkFilesMap), - ) - .replace('{{basename}}', api.config.base) - .replace( - '"{{publicPath}}"', - `${ - // handle runtimePublicPath - api.config.runtimePublicPath ? 'window.publicPath||' : '' - }"${api.config.publicPath}"`, - ), + content, ), 'utf-8'; } From f7dac1829e28a5cec27fed22b14dc5492731c54a Mon Sep 17 00:00:00 2001 From: Jinbao1001 Date: Thu, 16 May 2024 16:56:39 +0800 Subject: [PATCH 09/11] fix: content hash after replace --- .../src/features/routePreloadOnLoad/routePreloadOnLoad.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts index 834deeb177c2..e47da8cb614f 100644 --- a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts +++ b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts @@ -316,7 +316,9 @@ export default (api: IApi) => { .substring(0, 8); } writeFileSync( - join(api.paths.absOutputPath, `${PRELOAD_ROUTE_MAP_SCP_TYPE}.js`), + winPath( + join(api.paths.absOutputPath, `${PRELOAD_ROUTE_MAP_SCP_TYPE}.js`), + ), content, ), 'utf-8'; From af3226d05308c8769a353d435ea292b150ecab2d Mon Sep 17 00:00:00 2001 From: Jinbao1001 Date: Thu, 16 May 2024 16:57:19 +0800 Subject: [PATCH 10/11] fix: delete winpath --- .../src/features/routePreloadOnLoad/routePreloadOnLoad.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts index e47da8cb614f..834deeb177c2 100644 --- a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts +++ b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts @@ -316,9 +316,7 @@ export default (api: IApi) => { .substring(0, 8); } writeFileSync( - winPath( - join(api.paths.absOutputPath, `${PRELOAD_ROUTE_MAP_SCP_TYPE}.js`), - ), + join(api.paths.absOutputPath, `${PRELOAD_ROUTE_MAP_SCP_TYPE}.js`), content, ), 'utf-8'; From 2abbc9b94d4c5bbe88083153bd46c5f4553338c7 Mon Sep 17 00:00:00 2001 From: Jinbao1001 Date: Thu, 16 May 2024 17:21:00 +0800 Subject: [PATCH 11/11] fix: writefile path --- .../features/routePreloadOnLoad/routePreloadOnLoad.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts index 834deeb177c2..ddc9ee3a055e 100644 --- a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts +++ b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts @@ -206,7 +206,7 @@ async function getRoutePathFilesMap( export default (api: IApi) => { let routeChunkFilesMap: IRouteChunkFilesMap; - let hash = ''; + let hashedPart = '.js'; api.describe({ enableBy: () => // enable when package name available @@ -224,7 +224,6 @@ export default (api: IApi) => { fn: () => { if (api.name === 'build' && routeChunkFilesMap) { const { publicPath } = api.config; - const hashedPart = hash ? `.${hash}.js` : '.js'; const displayPublicPath = publicPath === 'auto' ? '/' : publicPath; // internal tern app use map mode return api.config.tern @@ -310,13 +309,14 @@ export default (api: IApi) => { }"${api.config.publicPath}"`, ); if (api.config.hash) { - hash = createHash('md5') + hashedPart = `.${createHash('md5') .update(content) .digest('hex') - .substring(0, 8); + .substring(0, 8)}.js`; } + writeFileSync( - join(api.paths.absOutputPath, `${PRELOAD_ROUTE_MAP_SCP_TYPE}.js`), + join(api.paths.absOutputPath, `${PRELOAD_ROUTE_HELPER}${hashedPart}`), content, ), 'utf-8';