场景:一个自定义组件,可能不止一个模块需要引用,那么每次引用都要先引入这个公共的自定义组件,那有没有一种方法可以不用每次都引入,而是直接就可以用呢?那就需要全局注册这个自定义组件啦~
思路
vite.config.ts中有一个plugin配置,里面可以配置自动注册组件,是通过引入 【Components】插件实现的,那【Components】从哪来的呢?
import Components from "unplugin-vue-components/vite";
翻阅unplugin-vue-components/vite在GitHub上的介绍,参考dirs属性,结合dts相关配置会找到答案。
实现方案
上图中的dirs参数,自动注册组件也可以是搜索目录的相对路径,那问题就解决啦,把自定义组件的相对路径填上去,就实现和element组件库一样的自动注册啦,到时候编译会自动检索这个相对目录下的自定义组件,并完成全局注册。
这样在其他模块调用的时候就可以直接使用而不用每次都引入啦。
over!
最终代码实现:
// 自动注册组件
Components({
resolvers: [ ElementPlusResolver(),IconsResolver()],
// 生成 `components.d.ts` 全局声明,
// 还接受自定义文件名的路径
// 默认值:如果安装了包 typescript,则为“true”
dts: fileURLToPath(new URL("./types/components.d.ts", import.meta.url),),
// 要搜索组件的目录的相对路径。
dirs: [ fileURLToPath(new URL("./src/components", import.meta.url), ),],
}),