Vite模块动态导入之Glob导入实践

 更新时间:2026年01月15日 09:16:13   作者:独泪了无痕  
import.meta.glob是Vite提供的强大模块动态导入功能,用于在构建时批量导入模块并生成按需加载的代码,适用于处理大量文件

前言

在 Vite 中有一个特殊的导入方式,即我们今天打算讨论的 Glob 导入 。

这种导入弥补完善了 JavaScript 导入体系中不能同时导入到某个文件目录的多个文件的缺陷。

一、快速入门

1.1 什么是 import.meta.glob

在 Vue3 和 Vite 的开发环境中, import.meta.glob()Vite 提供的一个强大的模块动态导入功能,用于在构建时批量导入模块(如 Vue 文件、图片、JSON 等),并生成按需加载的代码。

Glob 导入可以导入目录中的所有文件/目录,也可以对文件/目录进行匹配筛选。

这在处理大量的文件,如组件、页面或其他模块时特别有用,特别是当需要根据某些条件或模式来动态加载它们时。

1.2 基本语法

const modules = import.meta.glob(
	pattern,          		// 匹配文件路径的 glob 模式:字符串或字符串数组
    {						// 可选配置
    	eager?: boolean, 	// 是否同步导入
    	import?: string | string[], // 指定导入的内容,例如:import: 'default'
    	query?: string|Record<string, string | number | boolean> // 查询参数
  }
);
  • 所有 import.meta.glob 的参数都必须以字面量传入,不可以在其中使用变量或表达式。
  • 路径相对于当前文件,必须是相对路径(以 ./ 开头)或绝对路径(以 / 开头,相对于项目根目录解析)或一个别名路径。

二、核心功能

假设有一个 src/views/DynamicComponents 目录,里面包含多个 Vue 组件。

若是根据某些条件动态地导入这些组件,那么可以使用 import.meta.glob 来实现这个需求。

2.1 基本导入

这种导入是动态导入,通过 glob 模式来匹配文件,默认返回一个函数对象,对象的键是匹配到的文件路径,值是 import() 函数,这个功能可以帮助我们实现模块的按需加载。

// 使用 import.meta.glob 导入所有组件
const modules = import.meta.glob('/src/views/DynamicComponents/*.vue')

// 通过遍历 modules 对象来动态加载组件
for (const path in modules) {
  // 输出模块路径
  console.log('模块路径:', path)
  console.log('文件名:', path.split("/src/views/DynamicComponents/")[1].split('.vue')[0])
  // 等待模块加载完成,输出模块内容
  await modules[path]().then((mod: any) => {
    console.log('模块内容:', mod.default); // 这里可以访问到组件的默认导出
  });
}

说明】异步加载 - 代码分割,按需加载。

2.2 同步导入

Glob 导入匹配到的文件默认是懒加载的,若是想要直接引入所有的模块,则需要借助 eager 选项, 当设置为 true 时,它会立即导入所有匹配的模块,而不是返回一个 Promise,这在某些场景下可以提高性能。

const eagerModules = import.meta.glob('/src/views/DynamicComponents/*.vue', {eager: true})

for (const path in modules) {
  console.log(modules[path]); // 直接访问模块
}

注意】同步加载 - 所有模块打包在一起。

2.3 指定导入内容

若是只想要导入模块中的部分内容,那么可以利用 import 选择,其允许我们指定导入模块的导出内容。

const specificImports = import.meta.glob('./DynamicComponents/*.vue', {
  import: 'default', // 只导入默认导出
  eager: true
})

const multipleImports = import.meta.glob('./DynamicComponents/*.vue', {
  import: ['default', 'setup'], // 导入多个指定内容
  eager: true
})

自定义查询

还可以使用 query 选项来提供对导入的自定义查询,比如,可以将资源作为字符串引入或者作为 URL 引入。

// 作为 URL 导入
const imageUrls = import.meta.glob('./assets/*.png', {
  query: '?url'
})

// 作为原始文本导入
const rawContents = import.meta.glob('./files/*.md', {
  query: '?raw'
})

三、小结

import.meta.glob 是 Vite 的核心功能,用于高效处理模块批量导入,它可以帮助我们实现模块的按需加载。

通过 import.meta.glob,我们可以轻松地动态导入模块,并在 Vue3 项目中实现动态路由、懒加载组件等功能。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue中的路由拦截器的作用详解

    vue中的路由拦截器的作用详解

    在Vue中,路由拦截器主要用于在导航到某个路由前或者离开某个路由时进行拦截和处理,下面给大家介绍vue中的路由拦截器的作用,感兴趣的朋友一起看看吧
    2024-07-07
  • vue-baidu-map实现区域圈线和路径的渐变色

    vue-baidu-map实现区域圈线和路径的渐变色

    这篇文章主要介绍了vue-baidu-map实现区域圈线和路径的渐变色方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • vuepress项目侧边栏菜单配置使用方式

    vuepress项目侧边栏菜单配置使用方式

    这篇文章主要介绍了vuepress项目侧边栏菜单配置使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • Vue脚手架的创建超详解步骤

    Vue脚手架的创建超详解步骤

    这篇文章主要给大家介绍了关于Vue脚手架创建的相关资料,Vue脚手架是vue官方提供的标准化开发工具(平台),文中通过代码以及图文介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • Vue3 - setup script的使用体验分享

    Vue3 - setup script的使用体验分享

    Vue3中的setup一种是setup函数,一种是script setup,这篇文章主要给大家介绍了关于Vue3 - setup script使用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • web前端vue filter 过滤器

    web前端vue filter 过滤器

    vue的过滤器通常用在一些常见的文本格式化,过滤器可以用在两个地方:双花括号插值和 v-bind 表达式。本文给大家介绍了web前端vue filter 过滤器的相关知识,感兴趣的朋友一起看看吧
    2018-01-01
  • vue3中的组件间的传值(props)

    vue3中的组件间的传值(props)

    这篇文章主要介绍了vue3中的组件间的传值(props)问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • vue3整合springboot打完整jar包

    vue3整合springboot打完整jar包

    本文主要介绍了vue3整合springboot打完整jar包,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • Vue中tab栏切换的简单实现

    Vue中tab栏切换的简单实现

    本文主要介绍了Vue中tab栏切换的简单实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • vue中axios实现数据交互与跨域问题

    vue中axios实现数据交互与跨域问题

    这篇文章主要介绍了vue中axios实现数据交互与跨域问题,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05

最新评论