require.context 与 import.meta.glob

require.context 与 import.meta.glob

两者都是根据正则获取目录下一类文件

require.context参数

require.context(directory,useSubdirectories,regExp)

directory:表示检索的目录
useSubdirectories:表示是否检索子文件夹
regExp:匹配文件的正则表达式,一般是文件名

比如,可以用在Vue项目中的路由的加载和vuex中module的加载

let routerList = [];
let routerFileList = require.context('./module', false, /\.js$/);

routerFileList.keys().forEach(key => {
    routerList.push(...routerFileList(key).default);
});

export default [
    ...routerList
]

import.meta.glob

是vite中支持的,但是是懒加载

import.meta.glob('./dir/*.js', { eager: true })

参数

参数1:路径以及文件类型
参数2:配置项
	eager: boolean 是否懒加载,进行 tree-shaking
	import: '' 导入模块中的部分内容
	query: {} 查询
	as: 导入形式

实例

const modules = import.meta.glob('./module/*.ts');
const modulesArr = [];
// 官网介绍
for (const key in modules) {
  modules[key]().then(mod => {
 	modulesArr.push(...mod.default);
  });
}
// 通过await
for (const key in modules) {
  const mod = await modules[key]();
  modulesArr.push(...mod.default);
}

作者:前端墨尘
链接:https://juejin.cn/post/7262580489062547493
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
多个匹配模式
const modules = import.meta.glob(['./dir/*.js', './another/*.js'])
注意

在通过await加载的时候,打包项目会报如下错误
在这里插入图片描述
原因:ECMAScript 提案 Top-level await 由 Myles Borins 提出,它可以让你在模块的最高层中使用 await 操作符。在这之前,你只能通过在 async 函数或 async generators 中使用 await 操作符。Top-level await 是个新特性,打包不支持此特性。
解决:

 pnpm i vite-plugin-top-level-await -D
 or
 yarn add vite-plugin-top-level-await -D

在vite.config.ts中加入如下插件

import topLevelAwait from 'vite-plugin-top-level-await'

plugins:[
  topLevelAwait({
    promiseExportName: '__tla',
    promiseImportName: (i) => `__tla_${i}`,
  }),
]

对于 jeccg-boot vue3前端来说如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值