vite 批量导入图片

225 字
1 分钟
vite 批量导入图片

场景#

有很多城市的图片

mulit-images
mulit-images

需要在一个列表中统一渲染:

mulit-images-render
mulit-images-render

导入方案#

使用 import.meta.glob 函数从文件系统导入多个模块,然后遍历渲染。

vite Glob 导入

const files = import.meta.globEager('./*.png')
const modules = []
Object.keys(files).forEach((path) => {
const name = path.replace(/^\.\/(.*)\.png$/, '$1')
const module = files[path]
// @ts-ignore
modules[name] = module.default
})
export default modules

渲染完成后结果如下:

// vite 生成的代码
const modules = {
'./a.png': () => import('./a.png'),
'./b.png': () => import('./b.png'),
...
}

最后通过对象直接匹配获取即可

新版本 vite 中 import.meta.globEager 已经被废弃,需要使用 import.meta.glob('*', { eager: true }) 来代替

https://cn.vitejs.dev

webpack 导入方案#

webpack 提供 require.context 遍历文件夹下的文件,从中获取指定文件,自动导入模块

const files = (require as any).context('./', false, /\.png$/); //批量读取模块文件
const modules = files.keys().reduce((modules, path) => {
const [, name] = path.replace(/^\.\/(.*)\.png$/, '$1').split('-');
const module = files(path);
modules[name] = module.default;
return modules;
}, {});
export default modules;
vite 批量导入图片
https://wangxiang.website/posts/前端工程/vite-mulit-import/
作者
翔子
发布于
2024-05-15
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
翔子
前端开发工程师
公告
博客已从 VitePress 迁移到 Astro + Firefly 主题,223 篇文章全部保留。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
221
分类
9
标签
28
总字数
411,914
运行时长
0
最后活动
0 天前

文章目录