一、前提

我们使用的是require.context方法导入,在vite创建的项目内使用会报错"require not found",所以必须用webpack创建项目。或者有大能可以说说vite怎么解决这个问题。
2021年5月17日,经过几天测试,vite2的自动导入搞定了。

二、规则

我使用的注册规则是,搜索src/components/路径下的所有目录和子目录,搜索文件名叫做"index.vue"的文件,使用上级目录的名字作为组件名,进行注册。结构如下:
在这里插入图片描述
只注册index.vue,其他名字的组件不注册,

三、webpack项目自动注册

由于vue3.0没有import “Vue” from vue,我们需要使用app来注册,所以只能在 main.js
入口文件注册

// src/main.js

import { createApp } from 'vue'
const app = createApp(App)
// 动态注册公共组件
const requireComponent = require.context(
    // 其组件目录的相对路径
    '@/components',
    // 是否查询其子目录
    true,
    // 匹配基础组件文件名的正则表达式
    /index.vue$/
)
const jieguo = requireComponent.keys().filter((item:any)=> true)
jieguo.forEach((item:any)=>{
    const componentConfig = requireComponent(item)
    const name = item.split("/")[1]
    app.component(name,componentConfig.default || componentConfig)
})
// 注册结束

app.mount('#app')

当我们新建、删除、给公共组件改名等操作,注册方面就不需要任何操作了。重启一下项目,喝口水的时间就行了 。

四、vite2项目自动注册

import { createApp } from 'vue'
import App from './App.vue'
const app = createApp(App)
// 自动导入公共组件
const modulesFiles:any = import.meta.globEager('./components/*/*.vue')
// console.log(modulesFiles,"看看是什么东西")
const jieguo = Object.keys(modulesFiles).filter((item:any)=> true)
// console.log(jieguo,"结果")
jieguo.forEach((item:any)=>{
    const moduleName = item.split("/")[2]
    const componentConfig = modulesFiles[item]
    app.component(moduleName,componentConfig.default || componentConfig)
})
// 自动导入结束
app.mount('#app')
Logo

前往低代码交流专区

更多推荐