Vite 中引用 public 目录下的图片为什么 404 了? 司马艳清 提问于 2026-03-02 15:52:18 阅读 35 前端 我刚接触 Vite,把一张 logo.png 放在了 public/images/ 目录下,然后在 HTML 里直接用相对路径引用,结果页面加载时图片显示 404。我试过用 /images/logo.png 和 ./images/logo.png 都不行,是不是 public 目录的用法不对? 我的 HTML 是这样写的: <img src="/images/logo.png" alt="Logo" /> 我来解答 赞 4 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 设计师怡涵 Lv1 遇到Vite里public目录图片404的问题挺常见的,我刚学Vite时也被坑过。这个问题其实和静态资源处理方式有关,我来详细说说。 原理是这样:Vite的public目录是特殊的静态资源目录,这里的文件会原封不动复制到最终构建的dist目录里。但关键点是public目录本身不会出现在最终路径中。 比如你的文件结构: public/ images/ logo.png 构建后会变成: dist/ images/ logo.png index.html 所以解决方案很简单,直接去掉public这层路径引用: <!-- 错误写法 --> <img src="/images/logo.png" /> <!-- 正确写法 --> <img src="/logo.png" /> 或者如果你想保持images目录结构,有两个选择: 1. 直接把图片放在public根目录下的images文件夹里: public/ logo.png images/ logo.png 2. 改用assets目录方式(适合需要hash处理的图片),用import导入: import logo from './images/logo.png' // 然后在模板里 <img :src="logo" /> 记住public目录适合放不需要处理的静态文件,比如favicon.ico、robots.txt这些。其他需要构建优化的资源最好放assets里。 另外提一嘴,Vite开发服务器会自动处理这些路径,所以开发环境和生产环境的行为是一致的,这点比webpack省心多了。 回复 点赞 2026-03-06 16:05 Good“令敏 Lv1 检查一下你的 public 目录是不是放在项目根目录,跟 package.json 同级。Vite 规定 public 必须在根目录下,里面的文件会直接映射到根路径。如果你的目录结构是 src/public/images/logo.png 那就错了,应该是 public/images/logo.png。 引用方式 /images/logo.png 是对的,不需要改。另外检查一下 vite.config.js 里有没有配置 base 选项,如果设置了比如 base: '/app/',那访问路径就变成了 /app/images/logo.png,这时候你需要改成: 或者用 Vite 提供的 import.meta.env.BASE_URL 变量拼接路径,这样不管 base 怎么配都能自动适配。 回复 点赞 1 2026-03-02 16:00 加载更多 相关推荐 2 回答 95 浏览 Vite打包后为什么静态资源路径404? 用Vite开发的项目部署到服务器后,图片和字体文件都报404错误,明明在public目录里放了资源,也配置了publicDir: 'public',生产构建后的dist里确实有这些文件,但页面访问时路... 皇甫桂香 优化 2026-02-08 23:20:28 1 回答 47 浏览 VitePress 中如何自定义首页的 hero 图片路径? 我在用 VitePress 搭建文档站,想改首页 hero 区域的背景图,但图片放在 public 目录下引用不到,试了相对路径也不行,一直 404。 配置里写的是 heroImage: '/logo... 博主林莹 框架 2026-03-10 21:36:19 1 回答 50 浏览 Vite迁移后publicPath配置不生效怎么办? 我从Webpack迁移到Vite,原来在Webpack里用publicPath: '/static/'设置静态资源前缀,现在Vite里改成了base: '/static/',但打包后的CSS和JS路径... ლ婉琳 工具 2026-03-21 08:10:20 2 回答 44 浏览 Webpack 打包后 HTML 中的图片路径为什么 404 了? 我用 Webpack 打包项目,HTML 里直接写了 img 标签引用 public 目录下的图片,本地开发没问题,但 build 之后图片路径变成 /img/logo.png,实际打包后图片在根目录... 上官浩奇 前端 2026-03-08 18:45:18 2 回答 175 浏览 Vite项目中图片路径在打包后显示404怎么办? 我在开发环境用能正常显示图片,但打包后访问根路径时图片404了。试过改成还是不行,public目录配置也没问题,这是哪里出错了? 项目结构是这样的:src/里放代码,public/放静态资源。打包生成... UI志敏 工具 2026-01-28 12:07:30 1 回答 42 浏览 Vite 中如何正确引入静态图片资源? 我在 Vite 项目里想用 import 引入一张本地图片,但一直报错说找不到模块。明明路径是对的,放在了 public 目录下,也试过放 src/assets 里,还是不行。 比如我这样写: imp... 开发者焕焕 工具 2026-03-23 11:04:20 2 回答 58 浏览 Vite 打包后 HTML 中的静态资源路径为什么不对? 我用 Vite 构建项目后,发现生成的 index.html 里引用的 JS 和 CSS 文件路径是相对路径,部署到子目录时就加载不到了。明明配置了 base 路径,但好像没生效? 比如我的项目部署在... 轩辕梦玲 前端 2026-03-16 07:46:23 2 回答 72 浏览 Nitro dev模式下静态图片路径404,怎么配置才能正确访问? 在Nuxt3项目里用Nitro开发服务器运行时,引用public/image目录下的logo.png一直报404。我直接写和都试过了, 控制台报错显示:GET http://localhost:300... UE丶尚文 框架 2026-02-17 19:40:25 2 回答 52 浏览 Vite+React项目中配置别名后无法导入组件,路径报错怎么办? 在用Vite搭建React项目时,我按文档配置了@别名指向src目录,但导入组件时总提示404错误。比如这样写: // vite.config.js import { defineConfig } f... 迷人的晟华 框架 2026-02-14 19:05:26 2 回答 91 浏览 Vite配置base选项后静态资源404怎么办? 在用Vite打包生产环境时,我设置了base: '/dist/',但访问页面时图片和CSS都404了。调整过publicDir也没用,控制台报错说资源路径变成了/dist/dist/images/lo... 小敏 工具 2026-02-04 21:09:30
原理是这样:Vite的public目录是特殊的静态资源目录,这里的文件会原封不动复制到最终构建的dist目录里。但关键点是public目录本身不会出现在最终路径中。
比如你的文件结构:
构建后会变成:
所以解决方案很简单,直接去掉public这层路径引用:
或者如果你想保持images目录结构,有两个选择:
1. 直接把图片放在public根目录下的images文件夹里:
2. 改用assets目录方式(适合需要hash处理的图片),用import导入:
记住public目录适合放不需要处理的静态文件,比如favicon.ico、robots.txt这些。其他需要构建优化的资源最好放assets里。
另外提一嘴,Vite开发服务器会自动处理这些路径,所以开发环境和生产环境的行为是一致的,这点比webpack省心多了。
引用方式
/images/logo.png是对的,不需要改。另外检查一下 vite.config.js 里有没有配置base选项,如果设置了比如base: '/app/',那访问路径就变成了/app/images/logo.png,这时候你需要改成:或者用 Vite 提供的
import.meta.env.BASE_URL变量拼接路径,这样不管 base 怎么配都能自动适配。