vue3.0公共组件自动导入
一、前提我们使用的是require.context方法导入,在vite创建的项目内使用会报错"require not found",所以必须用webpack创建项目。或者有大能可以说说vite怎么解决这个问题。二、规则我使用的注册规则是,搜索src/components/路径下的所有目录和子目录,知道文件名叫做"index.vue"的文件,使用上级目录的名字作为组件名,进行注册。结构如下:只注册i
·
一、前提
我们使用的是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')
更多推荐
已为社区贡献6条内容
所有评论(0)