Vite默认为静态资源生成contenthash文件名以实现长期缓存,需配合Nginx对JS/CSS等资源设Cache-Control: public, immutable, max-age=31536000,HTML设no-cache,并正确配置base支持CDN或子路径部署。

Vite 本身默认就为静态资源生成带 contenthash 的文件名,这是实现合理缓存的基础。真正要做的,是前后端协同:构建阶段确保资源带哈希,部署阶段让 Nginx(或其它服务器)对不同资源类型设置对应缓存头。
构建阶段:确认资源自动带哈希
Vite 2.0+ 默认启用基于内容的哈希命名,无需额外插件。JS、CSS、字体、图片等产出文件名类似 index.e9a2f3b4.js 或 logo.a1b2c3.png,只要文件内容不变,hash 就不变;内容一改,hash 变,浏览器自然请求新资源。
- 无需修改配置即可生效,但可检查 dist/assets/ 下的文件名是否含哈希段
- 如需自定义输出路径或 hash 长度,可在 vite.config.ts 中调整 rollupOptions:
entryFileNames: 'assets/[name].[hash:6].js',
chunkFileNames: 'assets/[name].[hash:6].js',
assetFileNames: 'assets/[name].[hash:6].[ext]'
注意:public/ 目录下的文件(如 favicon.ico、robots.txt)不参与哈希,它们原样复制,适合放无需版本控制的静态资产。
立即学习“Java免费学习笔记(深入)”;
Nginx 配置:区分资源类型设缓存头
服务端必须配合设置 Cache-Control,否则浏览器不会按预期缓存。核心原则是:带 hash 的资源 → 强缓存一年;HTML → 不缓存。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 对 JS/CSS/图片/字体等带 hash 的资源,设为长期缓存且不可变:
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2|ttf)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
- 对 /index.html 单独处理,禁用强缓存,避免用户刷新后仍加载旧 HTML 导致资源引用错乱:
location = /index.html {
expires -1;
add_header Cache-Control "no-cache";
}
补充要点:CDN 与子路径部署别漏配 base
如果静态资源托管在 CDN,或应用部署在子路径(如 https://example.com/my-app/),必须在 vite.config.ts 中正确设置 base:
export default defineConfig({
base: 'https://cdn.example.com/my-app/', // CDN 地址
// 或 base: '/my-app/' // 子路径
})
- base 决定了 index.html 中 script/link 标签的资源路径前缀,配错会导致 404
- CDN 侧也需同步配置相同缓存策略(max-age=31536000 + immutable)
进阶可选:加一层 Service Worker 离线兜底
对 PWA 或弱网场景,可用 Service Worker 缓存关键静态资源(如首页、核心 JS/CSS):
- 在 main.ts 中注册 sw.js
- sw.js 中预缓存 /、/index.html、/assets/*.js、/assets/*.css
- 搭配 cacheFirst 策略,离线时也能打开首页
这层属于增强体验,不是基础缓存策略必需项,但能显著提升可靠性。

















