initComponent.ts 719 B

123456789101112131415161718192021222324
  1. import { App, Component } from 'vue'
  2. interface FileType {
  3. [key: string]: Component
  4. }
  5. // @ts-ignore
  6. const Components: Record<string, FileType> = import.meta.glob(
  7. '/src/components/**/*.vue',
  8. { eager: true },
  9. )
  10. export default (app: App): void => {
  11. // 因为通过 import.meta.globEager 返回的列表不能迭代所以直接使用 Object.keys 拿到 key 遍历
  12. Object.keys(Components).forEach((c: string) => {
  13. // const component = files[c]?.default
  14. const component = Components[c] ? Components[c].default : null
  15. // 组件内有注册过name才可自动挂载
  16. if (component && component.name) {
  17. // 挂载全局控件
  18. app.component(component.name as string, component)
  19. }
  20. })
  21. }