相信一些小白或者初级前端对于import.meta.glob是既熟悉又陌生。一些兄弟可能第一次听说,也有些兄弟可能在一些框架中见过或者混了个眼熟不知道这个api是干什么用的。这次我们来熟悉一下这个api到底作用是什么
首先,他和import.meta.env一样,都是vite提供给我们的。简单来说import.meta.glob这个api是在构建时会扫描文件,加载出我们传入文件路径下所有匹配的文件!
例如,我们希望得到src/pages下所有的vue文件,此时我们输入:
import.meta.glob('/src/pages/**/*.vue')
得到的结果为
我们可以看到,调用这个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,表面立即加载。 同样返回的是一个键值对格式:
这样我们就可以直接.default来获取需要得到的图片路径了。
最后我们再来介绍一下import.meta.glob的常用参数:
eager: boolean
-
true:立即加载(构建时打包所有匹配的模块,返回模块对象)。false(默认):懒加载(返回动态导入函数,按需加载)。
as: 'raw' | 'url' | 'default'
'raw':以字符串形式返回文件内容(适用于文本文件)。'url':返回文件的 URL 路径(适用于图片、字体等资源)。'default'(默认):返回模块的默认导出(如组件、JSON 数据等)。
import: string
-
指定要导入的模块成员(命名导出)。
- 例如,若模块导出
export { setup },则import: 'setup'可直接获取setup成员。
- 例如,若模块导出