11 changed files with 104 additions and 19 deletions
@ -0,0 +1,55 @@ |
|||
// Used to import all files under `src/views`
|
|||
|
|||
// The built-in dynamic import of vite cannot meet the needs of importing all files under views
|
|||
|
|||
import glob from 'glob'; |
|||
import { Transform } from 'vite/dist/node/transform.js'; |
|||
|
|||
function getPath(path: string) { |
|||
const lastIndex = path.lastIndexOf('.'); |
|||
if (lastIndex !== -1) { |
|||
path = path.substring(0, lastIndex); |
|||
} |
|||
return path.replace('src/views', ''); |
|||
} |
|||
|
|||
const dynamicImportTransform = function (env: any = {}): Transform { |
|||
return { |
|||
test({ path }) { |
|||
// Only convert the file
|
|||
return path.includes('/src/utils/helper/dynamicImport.ts'); |
|||
}, |
|||
transform({ code }) { |
|||
const { VITE_GEN_MENU_MODE = '' } = env; |
|||
if (VITE_GEN_MENU_MODE !== 'BACK') { |
|||
return code; |
|||
} |
|||
// if (!isBuild) return code;
|
|||
// Only convert the dir
|
|||
try { |
|||
const files = glob.sync('src/views/**/**.{vue,tsx}', { cwd: process.cwd() }); |
|||
|
|||
const _code = ` |
|||
export default function (id) { |
|||
switch (id) { |
|||
${files |
|||
|
|||
.map((p) => |
|||
` case '${getPath(p)}': return () => import('${p |
|||
.replace('src/views', '/@/views') |
|||
.replace(/\/\//g, '/')}');`.replace('.tsx', '') |
|||
) |
|||
.join('\n ')} |
|||
default: return Promise.reject(new Error("Unknown variable dynamic import: " + id)); |
|||
} |
|||
}\n\n |
|||
`;
|
|||
return _code; |
|||
} catch (error) { |
|||
console.error(error); |
|||
return code; |
|||
} |
|||
}, |
|||
}; |
|||
}; |
|||
export default dynamicImportTransform; |
|||
@ -0,0 +1,4 @@ |
|||
export default function (id: string) { |
|||
const dynamicImportModule: any = id; |
|||
return dynamicImportModule; |
|||
} |
|||
Loading…
Reference in new issue