12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- // 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') ||
- path.includes(`\\src\\utils\\helper\\dynamicImport.ts`)
- );
- },
- transform({ code }) {
- const { VITE_DYNAMIC_IMPORT } = env;
- if (!VITE_DYNAMIC_IMPORT) {
- 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;
|