揭秘vite中的 import.meta.glob

115 阅读2分钟

相信一些小白或者初级前端对于import.meta.glob是既熟悉又陌生。一些兄弟可能第一次听说,也有些兄弟可能在一些框架中见过或者混了个眼熟不知道这个api是干什么用的。这次我们来熟悉一下这个api到底作用是什么

首先,他和import.meta.env一样,都是vite提供给我们的。简单来说import.meta.glob这个api是在构建时会扫描文件,加载出我们传入文件路径下所有匹配的文件!

例如,我们希望得到src/pages下所有的vue文件,此时我们输入: import.meta.glob('/src/pages/**/*.vue')

得到的结果为

image.png 我们可以看到,调用这个api就获得了所有的src/pages下所有的.vue文件。并且它的键是他的文件路径,值是一个动态导入函数这个就可以在我们注册路由时用到

还有一个经常会使用到的场景就是,我们在使用img元素时,经常会绑定动态的src,但是这时不能直接后面写一个字符串,这样在vite构建时会搞不清楚他是基于当前组件还是根目录的路径。所以我们通常会有好几种解决办法。这次我们就拿import.meta.glob来解决这个问题

const url = computed(() => {
    const image = import.meta.glob('/src/assets/**/*.{jpeg,jpg,png}', {eager: true})
    
    return image[path.value].default
})

解释一下这段代码:我们使用import.meta.glob来获取src/assets的所有jpeg,jpg,png图片,同时设置eager: true,表面立即加载。 同样返回的是一个键值对格式:

image.png 这样我们就可以直接.default来获取需要得到的图片路径了。

最后我们再来介绍一下import.meta.glob的常用参数:

eager: boolean

    • true:立即加载(构建时打包所有匹配的模块,返回模块对象)。
    • false(默认):懒加载(返回动态导入函数,按需加载)。

as: 'raw' | 'url' | 'default'

  • 'raw':以字符串形式返回文件内容(适用于文本文件)。
  • 'url':返回文件的 URL 路径(适用于图片、字体等资源)。
  • 'default'(默认):返回模块的默认导出(如组件、JSON 数据等)。

import: string

  • 指定要导入的模块成员(命名导出)。

    • 例如,若模块导出 export { setup },则 import: 'setup' 可直接获取 setup 成员。