分别用webpack和vite注册全局组件

ops/2024/10/30 19:55:32/

基础组件的自动化全局注册

1. 组件全部导入后,批量注册

import dgDialog from "@/components/dgDialog/index.vue";
import svgIcon from "@/components/svgIcon/index.vue";
const allComponent = { dgDialog, svgIcon };
export default {install(app) {console.log(app, "app"); //App.vueObject.keys(allComponent).forEach((key) => {console.log(key, "key"); //dgDialog svgIconapp.component(key, allComponent[key]);});},
};// 或是
const ComponentRegister = {install(Vue) {console.log(Vue, "Vue"); //App.vueObject.keys(allComponent).forEach((key) => {console.log(key, "key");Vue.component(key, allComponent[key]);});}
}export default ComponentRegister;

webpackwebpack_Vue_CLI_3_36">2. 使用webpack(或在内部使用了webpackVue CLI 3+)全局注册组件

使用 require.context方法引入组件

// 所有组件放在一个`components`文件夹内的写法
const ComponentRegister = {install(Vue) {// 文件结构为components/组件名称.vueconst requireComponent = require.context(// 其组件目录的相对路径"@/components",// 是否查询其子目录false,// 匹配基础组件文件名的正则表达式/\.(vue|js)$/);requireComponent.keys().forEach((fileName) => {// 获取组件配置const componentConfig = requireComponent(fileName);// 获取当前组件的文件名称 vue文件中声明的name属性 || 文件名称const componentName =componentConfig.default.name ||fileName.split("/").pop().replace(/\.\w+$/, ""); //或 fileName.replace(/^\.\/(.*)\.\w+$/, "$1");// 全局注册组件Vue.component(componentName,// 如果这个组件选项是通过 `export default` 导出的,// 那么就会优先使用 `.default`,// 否则回退到使用模块的根。componentConfig.default || componentConfig);});},
};export default ComponentRegister;
// 组件以文件夹名称命名
const ComponentRegister = {install(Vue) {// 文件结构为文件夹名称(即组件名称)/index.vueconst requireComponent = require.context(// 其组件目录的相对路径"@/components/",// 是否查询其子目录true,// 匹配基础组件文件名的正则表达式/\.(vue|js)$/);requireComponent.keys().forEach((fileName) => {// 获取组件配置const componentConfig = requireComponent(fileName);//获取当前组件的文件名称 vue文件中声明的name属性 || 文件名称const componentName =componentConfig.default.name ||fileName.replace(/^\.\/(.*)\.\w+$/, "$1").split("/").shift(); //移除数组第一个元素  结果为 文件夹名称// .pop()//移除最后一个数组元素 结果为index// 全局注册组件Vue.component(componentName,// 如果这个组件选项是通过 `export default` 导出的,// 那么就会优先使用 `.default`,// 否则回退到使用模块的根。componentConfig.default || componentConfig);});},
};export default ComponentRegister;

3. 使用vite方法全局注册组件

使用import.meta.glob方法引入组件

const ComponentRegister = {install(Vue) {//获取所有的vue文件const requireComponent = import.meta.glob("@/components/*/*.vue", {// import: 'default',as: "component",eager: true,});/*** (\/[^\/]+)+ 匹配一个或多个以/开头,后面跟着一个或多个非/字符的序列。这对应于路径中的目录名。* \/ 匹配/字符,它是目录名与我们要提取的部分之间的分隔符。* ([^\/]+) 匹配一个或多个非/字符,这就是我们要提取的部分(文件夹名称)。* \/ 再次匹配/字符,表示提取部分的结束和下一个目录或文件的开始。* */const re = /(\/[^\/]+)+\/([^\/]+)\//; //或是 /\/components\/(.*?)\//;  i.match(re)[1];for (const i in requireComponent) {//获取当前遍历的组件const componentName = i.match(re)[2];const componentConfig = requireComponent[i];Vue.component(componentName, componentConfig.default || componentConfig);}},
};export default ComponentRegister;

记住全局注册的行为必须在根 Vue 实例 (通过 new Vue) 创建之前发生。如下

//注册组件到全局
Vue.component("Profile", Profile);
//创建vue
var vue = new Vue({el: "#app",data: {msg: "Vue是最简单的",},
});

http://www.ppmy.cn/ops/129683.html

相关文章

Python实现基于WebSocket的stomp协议调试助手工具

stomp协议很简单,但是搜遍网络竟没找到一款合适的客户端工具。大多数提供的都是客户端库的使用。可能是太简单了吧!可是即便这样,假如有一可视化的工具,将方便的对stomp协议进行抓包调试。网上类似MQTT的客户端工具有很多&#xf…

如何从iconfont中获取字体图标并应用到微信小程序中去?

下面我们一一个微信小程序的登录界面的制作为例来说明,如何从iconfont中获取字体图标是如何应用到微信小程序中去的。首先我们看效果。 这里所有的图标,都是从iconfont中以字体的形式来加载的,也就是说,我们自始至终没有使用一张…

工具_Nginx

文章目录 location语法介绍跨域配置https配置http重定向到https配置反向代理配置负载均衡配置upstream配置负载均衡算法(1)rr轮询(默认)(2)wrr加权轮询(weight)(3&#x…

[极客大挑战 2019]FinalSQL

首先进入题目正常思路是登录框存在sql注入,尝试万能密码,提示“你可别被我逮住了,臭弟弟”,应该是被过滤了,做一下FUZZ测试,发现过滤了空格,union等关键字 FUZZ字典已经上传到CSDN了 试了很长时…

没有基础,学习HCIE难吗?

首先要清楚,华为 HCIE-Datacom 认证并非局限于特定专业背景,即便对专业基础有一定要求,无论你有无相关学习经历或者工作经验,皆有机会报考并争取通过这一认证。HCIE-Datacom 考试主要由笔试和实验两部分构成,涉及高级路…

【Python爬虫实战】络爬虫完整指南:从TCP/IP协议到爬虫实践

网络爬虫完整指南:从TCP/IP协议到爬虫实践 什么是TCP/IP协议? TCP/IP协议(传输控制协议/互联网协议) 是互联网通信的核心协议套件,它定义了设备在互联网上如何通信的规则和方式。TCP/IP协议由多个层组成,其…

项目开发的架构模式与异步请求(AJAX)

一、项目开发的架构模式 1. 架构模式的分类 在项目开发中,架构模式通常分为以下两种类型: B/S架构(浏览器/服务端)C/S架构(客户端/服务端) 例如,QQ和微信的设计均基于C/S架构。这种架构的本…

计算机毕业设计 | vue+springboot调查问卷管理系统(附源码+论文)

1,研究目的 在进入21世纪以后,互联网得到了蓬勃的发展,电子问卷调查也开始逐渐流行起来。传统纸质问卷和电子问卷相比较后,传统问卷还存在很多弊端: 问卷分发起来比较困难,并且分发试卷耗费大量的金钱和时…