fix: ensure that the correct components are dynamically imported

This commit is contained in:
Vben
2021-03-01 23:01:37 +08:00
parent 3b8ca420c7
commit b476e1c84c
6 changed files with 32 additions and 5 deletions

View File

@@ -9,10 +9,22 @@ export type LayoutMapKey = 'LAYOUT';
const LayoutMap = new Map<LayoutMapKey, () => Promise<typeof import('*.vue')>>();
const dynamicViewsModules = import.meta.glob('../../views/**/*.{vue,tsx}');
let dynamicViewsModules: Record<
string,
() => Promise<{
[key: string]: any;
}>
>;
// 动态引入
function asyncImportRoute(routes: AppRouteRecordRaw[] | undefined) {
// TODO It may be a bug in Vite. When the conditions are not established, the dynamically imported files will still be packaged in.
if (!__DYNAMIC_IMPORT__) {
dynamicViewsModules = {};
} else {
dynamicViewsModules = dynamicViewsModules || import.meta.glob('../../views/**/*.{vue,tsx}');
}
if (!routes) return;
routes.forEach((item) => {
const { component, name } = item;
@@ -37,8 +49,10 @@ function dynamicImport(
) {
const keys = Object.keys(dynamicViewsModules);
const matchKeys = keys.filter((key) => {
const k = key.replace('../../views', '');
return k.startsWith(`${component}`) || k.startsWith(`/${component}`);
let k = key.replace('../../views', '');
const lastIndex = k.lastIndexOf('.');
k = k.substring(0, lastIndex);
return k === component;
});
if (matchKeys?.length === 1) {
const matchKey = matchKeys[0];