自定义组件的全局注册

144 阅读1分钟

场景:一个自定义组件,可能不止一个模块需要引用,那么每次引用都要先引入这个公共的自定义组件,那有没有一种方法可以不用每次都引入,而是直接就可以用呢?那就需要全局注册这个自定义组件啦~

思路

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), ),],

}),