上线新版本最怕什么?用户打开还是旧界面,按钮点不动,样式乱成一团。八成是缓存惹的祸。别再手动提醒用户“清除一下缓存”了,太low也容易遗漏。真正靠谱的做法,是在部署脚本里把清理缓存这事给自动化。
为什么要在部署脚本里清理缓存
每次发版,前端资源文件变了,但浏览器还在用本地的旧缓存,结果就是页面错乱、功能异常。尤其是公司内部系统,员工懒得刷新,问题反馈一堆。与其被动救火,不如在部署的时候主动出击,顺手把缓存相关的临时文件、CDN 缓存、甚至客户端可能存在的 localStorage 都处理掉。
常见的缓存清理操作
部署脚本不是只能拷代码。你可以让它多干几步:删除旧的 build 文件、清空临时目录、刷新 CDN 缓存、通知服务端清理 opcode 缓存等。下面是一个简单的 Bash 脚本片段:
#!/bin/bash
# 构建前端项目
npm run build
# 删除旧静态资源
rm -rf /var/www/html/dist/*
# 拷贝新构建文件
cp -r dist/* /var/www/html/dist/
# 清理 Nginx 缓存目录
rm -rf /var/cache/nginx/*
# 重启 PHP-FPM(可选,触发 opcode 清除)
sudo systemctl restart php-fpm
# 输出完成提示
echo "部署完成,缓存已清理"
这个脚本在复制新文件后,顺手把 Nginx 的代理缓存和 PHP 的 opcode 都清了。如果你用了 CDN,还可以在这里加一段调用 API 刷新缓存的命令,比如阿里云或腾讯云提供的 CLI 工具。
结合 CI/CD 更高效
现在大多数团队都用 GitLab CI 或 Jenkins 做自动化部署。你只需要在部署阶段的脚本中加入缓存清理逻辑,每次推送代码后,整个流程全自动跑完,连登录服务器都不用。例如在 .gitlab-ci.yml 中:
deploy:
stage: deploy
script:
- npm run build
- rsync -av dist/ user@server:/var/www/html/
- ssh user@server \"sudo rm -rf /var/cache/nginx/*\"
- curl -X POST \"https://api.cdn.com/refresh\" -H \"Authorization: Bearer $TOKEN\" -d \"{\"urls\":[\"https://yoursite.com/*\"]}\"
only:
- main
这样一来,开发人员只管提交代码,剩下的事全交给脚本。再也不用大晚上被叫起来处理“怎么还是老界面”的问题。
小心别误删重要数据
自动化是好东西,但也得谨慎。rm -rf 这种命令一旦写错路径,后果严重。建议在执行删除前加个判断,或者先用 echo 打印要删的目录,确认无误再执行。也可以先把关键目录备份一下,比如:
# 备份当前运行目录
cp -r /var/www/html/dist /var/www/html/dist.bak.$(date +%Y%m%d)
万一出问题,还能快速回滚。
部署脚本不只是“传文件”,它应该是你发布流程的总指挥。把清理缓存这件事纳入其中,不仅能减少线上问题,还能让整个团队更信任发布流程。谁都不想因为一个缓存,耽误半小时会议开场。