首页 > 其他分享 >vite Glob 实现 责任链、注册组件

vite Glob 实现 责任链、注册组件

时间:2024-06-10 14:00:03浏览次数:11  
标签:modulesKey const modules Glob list ts 组件 import vite

场景

下面是其中一种场景,我们定义二种方法对外提供一个方案,按需调用。

// list/test1.ts
export default () => {
  console.log("test")
}
// list/test2.ts

export default () => {
  console.log("test")
}
// index.ts
import test1 from "./list/test1";
import test2 from "./list/test2";
const modules = {
  test1,
  test2
}

function execute() {
  for (let modulesKey in modules) {
	// 条件
    modules[modulesKey]();
  }
}

⚠ 这种方式在后面想在 list 文件夹下再扩充方法时候需要改 2 个地方凡是漏掉一处都会导致程序无法运行

第一个:需要在 index.ts 导入新模块

第二个:需要 modules 注册这个新的模块

解决

我们可以使用 vite 的 Glob 方法动态导入模块。

详情 Glob 使用文档可以直接看官方的文档 地址 这里不过多描述。

这里我们可以直接修改 index.ts 文件

// 导入 list 中全部的 ts 文件
const modules: Record<string, () => void> = import.meta.glob('./list/*.ts', {
  eager: true,
  import: 'default',
});

function execute() {
  for (let modulesKey in modules) {
	// 条件
    modules[modulesKey]();
  }
}

这样子就可以实现动态导入,后面只需要在 list 文件夹中直接新建模块文件即可。

技术推广

责任链模式

// list/test1.ts
export default {
	// 处理
	execute: (args) => {

	},

	// 是否支持处理
	support: (args) => {
		return false;
    }
}
// 导入 list 中全部的 ts 文件
const modules: Record<string, () => void> = import.meta.glob('./list/*.ts', {
  eager: true,
  import: 'default',

});

function execute(args) {
  for (let modulesKey in modules) {
     if(modules[modulesKey].support(args)) {
		modules[modulesKey](args);
      }
   }

}

批量注册组件

// components/lib/ComponentDemo1.vue
<template>
  <div>我是一个组件</div>
</template>
<style lang="less" scoped></style>
// components/lib/index.ts
import type {App} from "vue";

const modules: Record<string, () => void> = import.meta.glob('./*.vue', {
  eager: true,
  import: 'default',
});


export function install(app: App) {
  for (const modulesKey in modules) {
	// 从文件路径中格式化出组件的名称
    const componentName = modulesKey.replace('./', '').replace('.vue', '')
    console.log(componentName)
    app.component(componentName, modules[modulesKey])
    // app.use(modules[modulesKey]);
  }
}
作者信息
  • 多多点赞会变好看,多多留言会变有钱,多多收藏会变幸运。
  • 联系方式添加微信 -xiaou- 备注:csdn

标签:modulesKey,const,modules,Glob,list,ts,组件,import,vite
From: https://blog.csdn.net/m0_37373396/article/details/139576105

相关文章

  • Codeforces Global Round 26 (A - D)
    CodeforcesGlobalRound26A如果\(a_1=a_n\),无解。如果\(a_2=a_n\),\(a_1,a_2\)涂成红色,否则只把\(a_1\)涂成红色。voidsolve(){ cin>>n; for(inti=1;i<=n;++i)cin>>a[i]; if(a[1]==a[n]){ cout<<"NO\n"; re......
  • 关于Vue组件通信
    前言此文代表本人对Vue的理解,欢迎大家的交流与指正Vue组件的概念和作用概念:组件是Vue.js中的基本构建块,它是一个自包含的单元,拥有自己的视图(模板)、数据(数据对象)和逻辑(方法)。组件允许开发者将界面拆分成独立、可复用的部件,每个部件负责应用程序的一部分功能。作用:可重用性......
  • Vue2基础知识:v-model在组件传值中的使用,表单组件如何封装,如何用v-model简化父传子,子传
    要想要了解v-model在组件传值中如何使用首先得先了解表单组件如何封装数据在父组件那里,表单结构在子组件那里。1.表单组件如何封装1.父传子:数据应该是父组件props传递过来的,v-model拆解绑定数据。(为什么说是拆解呢?因为不可以直接v-model绑定,子组件只能改变自己的值,不能改变......
  • 6、组件通信详解(父子、兄弟、祖孙)
    一、父传子1、props用法:(1)父组件用props绑定数据,表示为v-bind:props="数据"(v-bind:简写为:,props可以任意命名)(2)子组件用defineProps(['props',....])接收注意:(1)v-bind:c="数据"表示父组件给数据绑定了一个名为c的prop属性。这样当父组件的数据发生改变,子组件也能接收......
  • RocketMQ教程(三):RocketMQ的核心组件
    四个核心组件RocketMQ的架构采用了典型的分布式系统设计理念,以确保高性能、高可用和可扩展性。RocketMQ主要由四个核心组件构成:NameServer、Broker、Producer和Consumer。下面是对这些组件以及它们在RocketMQ中的角色和功能的概述:1.NameServer角色和功能:NameServer......
  • python后端结合uniapp与uview组件tabs,实现自定义导航按钮与小标签颜色控制
    实现效果(红框内):后端api如下:@task_api.route('/user/task/states_list',methods=['POST','GET'])@visitor_token_requireddeftask_states(user):name_list=['待接单','设计中','交付中','已完成','......
  • HarmonyOS ArkTS组件 | Flex 以弹性方式布局子组件的容器组件 学习记录
    HarmonyOSArkTS组件|Flex以弹性方式布局子组件的容器组件学习记录前言:最近需要用到弹性布局,记录一下。(忽略图片水印QAQ)说明:Flex组件在渲染时存在二次布局过程,因此在对性能有严格要求的场景下建议使用Column、Row代替。Flex组件主轴默认不设置时撑满父容器,Column、Row组......
  • Vue3中的常见组件通信之`$refs`、`$parent`
    Vue3中的常见组件通信之$refs、$parent概述​在vue3中常见的组件通信有props、mitt、v-model、refs、......
  • Vue 3 的 <teleport> 组件封装为自定义指令
    <Teleport>是一个内置组件,它可以将一个组件内部的一部分模板“传送”到该组件的DOM结构外层的位置去。https://cn.vuejs.org/guide/built-ins/teleport.html为了更加简便灵活,可以将Vue3的<teleport>组件类似的功能封装为自定义指令。当然,但在某些情况下,直接使用<telepo......
  • Linux命令 (network statistics -all numeric programs | Global Regular Expression P
    文章目录1、第一种解释2、第二种解释3、第三种解释4、第四种解释5、第五种解释6、netstat--help在Windows中,杀死端口占用的博客链接在Linux中,grep的英文全称是GlobalRegularExpressionPrint全局正则表达式打印。它用于在文本中搜索与指定模式匹配的行,并将这......