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

场景

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

// 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值