import { VueConstructor } from 'vue' const views = require.context( // 其组件目录的相对路径 '../views', // 是否查询其子目录 true, // 匹配基础组件文件名的正则表达式 /\w+\.vue$/, 'lazy', ) const components = require.context( // 其组件目录的相对路径 '../components', // 是否查询其子目录 true, // 匹配基础组件文件名的正则表达式 /\w+\.vue$/, 'lazy', ) const viewsMap: { [key: string]: () => Promise } = {} views.keys().map((filepath) => { const path = filepath.replace(/^\./, '') function asyncComponentFn() { return views(filepath) } Object.defineProperty(asyncComponentFn, 'name', { get() { return path }, }) viewsMap[path] = asyncComponentFn }) components.keys().map((filepath) => { const path = '/components' + filepath.replace(/^\./, '') function asyncComponentFn() { return components(filepath) } Object.defineProperty(asyncComponentFn, 'name', { get() { return path }, }) viewsMap[path] = asyncComponentFn }) export { viewsMap }