Vite · Not showing
Vite favicon 不显示或 404?这样修复
Vite 会在构建时把 public/ 复制到输出根目录,并重写 index.html。一个在开发时正常、在生产环境 404 的 favicon,几乎总是路径里带了 public/ 这一段,或者是从 src 导入而被加了哈希。
两条资源管线,你只想要其中一条
任何从 src 导入的东西都属于模块图:Vite 会内联它,或用内容哈希把它输出并重写引用。这对 UI 图片是对的,对 favicon 却是错的,因为 favicon 必须在固定 URL 上响应。
public/ 是逃生口。放在那里的文件永远不会被解析、加哈希或内联。它们会原名复制到输出的根目录。所以 public/favicon.ico 会在 /favicon.ico 上提供,而 href 必须正好是这个。
正确的 link 标签
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
<link rel="manifest" href="/site.webmanifest" />根绝对路径,不带 public/ 这一段。它们写在项目根目录的 index.html 里,而不是 public/ 内部。
Vite favicon 不显示:常见问题
为什么我的 Vite favicon 只在生产构建里 404?
因为路径经过了 public/ 或经过了一次 import,这两者在开发和构建之间都会变化。打开构建后的 index.html 和输出目录,确认 href 和文件对得上。
我需要在哪里导入 favicon 吗?
不需要。public/ 里的文件是刻意放在模块图之外的。一旦导入,Vite 就会输出第二份带哈希的副本,让本该只有一份的地方变成两份,而 /favicon.ico 上什么都没有。
部署到子路径下时 favicon 404 了。
在 vite.config.ts 里设置 base。Vite 会在构建时重写 index.html 里的资源 URL,所以之后打开构建后的文件,确认图标 href 带上了前缀再发布。