vite vue3 自动注册全局组件,且注册为异步组件。
目录下的子级文件以文件名作为组件名,如 ./HelloWorld.vue,以HelloWorld作为组件名;
孙级、n孙级的index.vue或index.tsx文件以其父级文件夹名称作为组件名,如 ./Table/index.vue,以Table作为组件名,非index文件不注册。
/**
* 自动注册全局异步组件 by 新石器原始人
* 区分大小写
*/
import { App, defineAsyncComponent } from 'vue'
const files = import.meta.glob('./**')
export default {
install(app: App) {
for (const file of Object.keys(files)) {
const m =
file.match(/^\.\/(?<name>\w+)\.(tsx|vue)$/i) ||
file.match(/^\.\/((?<name>\w+)\/)+index\.(tsx|vue)$/i)
if (m?.groups?.name) {
app.component(m.groups.name, defineAsyncComponent(files[file]))
}
}
},
}
只适用于vite-vue3,不适用于webpack-vue3