vue2中使用require.context批量注册组件

一、require.context的作用

1.1. 什么是 require.context

  • 一个 webpackapi ,通过该函数可以获取一个上下文,从而实现工程自动化(遍历文件夹的文件,从中获取指定文件,自动导入模块)。
  • 在前端工程中,如果一个文件夹中的模块需要频繁引用时可以使用该中方式一次性引入

1.2. 参数说明

参数类型说明
pathString需要读取模块的文件的所在目录
useSubdirectoriesBoolean是否遍历子目录
RegExpString匹配的规则(正则表达式)

1.2.1. 参数path不能含有变量,否则会报错

  • 错误写法
const path= '@/components';
require.context(path);

在这里插入图片描述

  • 正确写法
require.context('@/components');

1.3. 返回值

const context = require.context('../../', false);
console.dir(context);
  • 打印结果如下
    在这里插入图片描述

返回值是一个函数,函数里面有三个属性,分别如下:

属性类型说明
resolveFunction接受一个参数request,request为文件夹下面匹配文件的相对路径,返回这个匹配文件相对于整个工程的相对路径
keysFunction返回一个数组,由匹配成功的文件所组成的数组
idString执行环境的 id

1.4. 应用场景

1.4.1. 获取components目录下面的所有vue文件的文件名称

注意: 我这里说的是文件名称

  • 项目结构
    在这里插入图片描述
  • 代码块
const context = require.context('@/components', false, /\.vue$/);
console.dir(context.keys());
  • 打印结果
    在这里插入图片描述

1.4.2. 获取components目录下面的所有的vue的组件实例

注意: 我这里说的是组件实例

写法一:按照顺序一个一个获取组件实例的获取

按照顺序一个一个获取组件实例的获取

  • 代码块
const context = require.context('@/components', false, /\.vue$/);
context.keys().forEach(fileName => {
	// 组件实例
	const component = context(fileName);
	console.log(component);
});
  • 打印结果
    在这里插入图片描述
写法二:一次行获取全部组件实例

一次行获取全部组件实例

  • 简单写法
const context = require.context('@/components', false, /\.vue$/);
// 简单写法
const components = context.keys().map(context);
console.log(components);
  • 完整写法
const context = require.context('@/components', false, /\.vue$/);
// 完整写法
const components = context.keys().map(fileName => {
	return context(fileName);
});
console.log(components);

在这里插入图片描述

三、vue2中使用require.context批量注册组件

const requireComponents = require.context('@/components', true, /\.vue/);
// 遍历出每个组件的路径
requireComponents.keys().forEach(fileName => {
	// 组件实例
	const reqCom = requireComponents(fileName);
	// 截取路径或者组件的name作为组件名
	const reqComName = reqCom.defautl?.name ?? fileName.replace(/\.\/(.*)\.vue/, '$1');
	// 组件挂载 或者其它地方挂载
	Vue.component(reqComName, reqCom.default);
});
  • 12
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值