From a46726c69f57313f312737311ea49f7a6a88cb64 Mon Sep 17 00:00:00 2001 From: Peach Date: Mon, 11 Mar 2024 09:33:54 +0800 Subject: [PATCH] fix(preset-umi): disable route preload feature if unnecessary (#12186) * fix(preset-umi): route preload feature error in vite mode * refactor: skip unnecessary route preload logic --- .../routePreloadOnLoad/routePreloadOnLoad.ts | 49 +++++++++++-------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts index 1d3594e22bf8..22525e4f137f 100644 --- a/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts +++ b/packages/preset-umi/src/features/routePreloadOnLoad/routePreloadOnLoad.ts @@ -206,14 +206,21 @@ async function getRoutePathFilesMap( export default (api: IApi) => { let routeChunkFilesMap: IRouteChunkFilesMap; - // enable when package name available - // because preload script use package name as attribute prefix value api.describe({ - enableBy: () => Boolean(api.pkg.name), + enableBy: () => + // enable when package name available + // because preload script use package name as attribute prefix value + Boolean(api.pkg.name) && + // vite mode is not supported currently + !api.config.vite && + // mpa mode is unnecessary + !api.config.mpa && + // only esm router needs this feature + api.config.routeLoader?.moduleType === 'esm', }); api.addHTMLHeadScripts(() => { - if (api.name === 'build') { + if (api.name === 'build' && routeChunkFilesMap) { // internal tern app use map mode return api.config.tern ? // map mode @@ -278,22 +285,24 @@ export default (api: IApi) => { ); // 3. generate final route chunk files map - routeChunkFilesMap = { - p: api.pkg.name!, - b: api.appData.bundler!, - f: Object.entries(routeChunkFiles) - .sort((a, b) => a[1].index - b[1].index) - .map(([k, { id }]) => [k, id]), - // sort similar to react-router@6 - r: lodash(routeFilesMap) - .toPairs() - .sort( - ([a]: [string, number[]], [b]: [string, number[]]) => - computeRouteScore(a) - computeRouteScore(b), - ) - .fromPairs() - .value() as any, - }; + if (!lodash.isEmpty(routeChunkFiles) && !lodash.isEmpty(routeFilesMap)) { + routeChunkFilesMap = { + p: api.pkg.name!, + b: api.appData.bundler!, + f: Object.entries(routeChunkFiles) + .sort((a, b) => a[1].index - b[1].index) + .map(([k, { id }]) => [k, id]), + // sort similar to react-router@6 + r: lodash(routeFilesMap) + .toPairs() + .sort( + ([a]: [string, number[]], [b]: [string, number[]]) => + computeRouteScore(a) - computeRouteScore(b), + ) + .fromPairs() + .value() as any, + }; + } } }); };