Vite打包后为什么静态资源路径404?
用Vite开发的项目部署到服务器后,图片和字体文件都报404错误,明明在public目录里放了资源,也配置了publicDir: 'public',生产构建后的dist里确实有这些文件,但页面访问时路径全是404…
尝试过在vite.config.js里这样配置:
export default defineConfig({
build: {
outDir: 'dist',
assetsDir: 'assets',
rollupOptions: {
output: {
assetFileNames: 'assets/[name].[ext]'
}
}
},
publicDir: 'public'
})
页面里引用图片是这样写的:./public/logo.png,但生成的HTML里路径显示为/logo.png,服务器根目录确实有public/logo.png文件,为什么访问不到呢?
首先,你在页面里直接写
./public/logo.png这种引用方式其实是不对的。Vite 会把public目录里的文件原封不动地复制到输出目录(比如你的dist目录),但这些文件的访问路径是相对于服务器的根目录,而不是相对于你的项目目录。正确的引用方式应该是直接用绝对路径,比如
/logo.png,因为 Vite 会把public目录下的文件映射到服务器的根路径下。如果你在 HTML 或者 JS 里写了./public/logo.png,生成的路径可能会有问题,导致 404。其次,检查一下你的服务器配置。如果你用的是 Nginx 或者 Apache,确保它们的根目录指向了你的
dist文件夹,而不是更深层次的某个子目录。举个例子,Nginx 的配置可以这样写:这个配置的关键是
root要指向dist,并且通过try_files确保未匹配的请求能 fallback 到index.html,这对于前端路由也很重要。最后,关于你的
vite.config.js配置,目前看起来没啥大问题,不过你可以再确认一下assetsDir和assetFileNames的设置是否符合你的需求。如果你希望静态资源都放在assets目录下,那现在的配置是 OK 的。总结一下:
1. 页面里引用
public目录下的文件时,直接用绝对路径,比如/logo.png。2. 检查服务器配置,确保根目录指向了
dist,并且有正确的 fallback 规则。3. 如果还是有问题,试着清理一下缓存重新打包,有时候缓存也会导致奇怪的问题。
可以试试这样调整,应该就能解决问题了!如果还有其他疑问,随时来问哈。
你在代码里写 ./public/logo.png,浏览器就会按相对路径去请求,但实际部署时服务器结构可能不匹配,导致 404。正确做法是:public 目录下的资源应该用绝对路径引用,也就是以 / 开头。
推荐的做法是把图片引用改成
/logo.png,这样开发和生产环境都能正确访问。比如:同时确保你的 vite.config.js 没有额外干扰 public 目录的行为,publicDir: 'public' 这个配置没问题,默认就是这个值,可以省略。
另外注意如果你部署的项目不是放在服务器根目录,而是子目录(比如 example.com/my-vite-app),那还得设置 base 配置项为 '/my-vite-app/',否则静态资源路径还是对不上。
总结一下:public 下的文件走根路径访问,别带 public 文件夹名在引用路径里,改用 /xxx.png 就行了。