当前位置: 首页 > news >正文

vite+vue3+ts中使用require.context | 报错require is not defined | 获取文件夹中的文件名

vite+vue3+ts中使用require.context|报错require is not defined|获取文件夹中的文件名

目录

  • vite+vue3+ts中使用require.context|报错require is not defined|获取文件夹中的文件名
    • 一、问题背景
    • 二、报错原因
    • 三、解决方法

一、问题背景

如题在vite+vue3+ts中使用required.context时报错如下:

代码:需求为获取文件夹中的后缀为.vue的文件相对路径

const files = require.context('@/views', true, /\.vue$/)
const result = []
files.keys().forEach((key) => {result.push({label: key.replace(/(\.\/|\.vue)/g, ''),value: key.replace(/(\.\/|\.vue)/g, '')})
})

报错如下

image-20231009122817001

按照网上搜到的解决方案在代码中加入两行代码(如下)后,产生新的报错如下:

import { createRequire } from 'module';
const require = createRequire(import.meta.url);

image-20231009123739081

二、报错原因

require.context()webpack用来查找文件内容的,在vite中不适用。webpack官网对require.context的详解如下:

网址: requirecontext

image-20231009123417973

三、解决方法

vite中可以使用import.meta.glob()方法实现导入资源,注意import.meta.globEager()已弃用。

官网详解

网址:import.meta.glob

image-20231009125016115

修改后可用的代码如下

// 获取src/pages下的vue文件地址
searchFiles () {const files = import.meta.glob( '@/pages/**/*.vue', { eager: true })console.log('files',files);const result = []Object.keys(files).forEach(fileName=>{// console.log('fileName',fileName);result.push({label: fileName.replace(/(\.\/|\.vue)/g, ''),value: fileName.replace(/(\.\/|\.vue)/g, '')})})this.vue_files = resultconsole.log('vue files',this.vue_files);
}

打印出的files格式如下:如果想获得文件的相对路径,则用Object.keys()获取到files对象的key值即可
image-20231009125913289

注:/**的意思是匹配所有文件夹及里面的子文件夹,相当于reqiure.context中第二个参数useSubdirectories = true的作用。

/**的意思是所有文件夹及里面的子文件夹
/*是所有文件夹,不含子文件夹
http://www.lryc.cn/news/189980.html

相关文章:

  • C#(Csharp)我的基础教程(四)(我的菜鸟教程笔记)-Windows项目结构分析、UI设计和综合事件应用的探究与学习
  • Flink: Only supported for operators
  • NSIDC定义的海冰相关概念
  • 【码银送书第八期】《Python数据挖掘:入门进阶与实用案例分析》
  • 微信小程序底部tabBar不显示图标
  • PostgreSQL基操之角色、表空间、数据库与表
  • 【算法|滑动窗口No.1】leetcode209. 长度最小的子数组
  • 11_博客管理系统_实现过程
  • 安防视频监控平台EasyCVR集成到ios系统不能播放是什么原因?如何解决?
  • hutool实现文件上传与下载
  • vue3学习源码笔记(小白入门系列)------provide和 inject 跨层级数据传递原理
  • 【Python深度学习】目标检测和语义分割的区别
  • 取消加考!自考专业调整,2026年起执行新计划!
  • 项目串讲(后端)要讲哪些东西?
  • 区块链技术在供应链管理中的创新应用
  • tcp/ip协议2实现的插图,数据结构2 (9 - 章)
  • 嵌入式Linux裸机开发(六)EPIT 定时器
  • 如何批量导出文件名?
  • sort排序
  • 缓存的力量:提升API性能和可扩展性
  • 部署vSAN相关的名词解释 几句话概括
  • 【C++】进阶模板
  • 易点易动设备管理系统:打通采购管理的智能化设备管理解决方案
  • 成集云 | 管家婆ERP集成金蝶云星辰 | 解决方案
  • Django开发之进阶篇
  • 【C++】:类和对象(3)
  • windows创建服务:更新服务信息乱码问题(ChangeServiceConfig)
  • Spark 9:Spark 新特性
  • Angular+html+js前端加载生命周期
  • 社区投稿| 以安全视角,深度剖析 Sui Staking 与 LSD