Firebase deploy 没生效的主因是未执行 firebase init hosting,导致缺少 firebase.json;其次为 SPA 缺少 rewrite 规则、CDN/浏览器缓存未更新、或登录账号无项目权限。

firebase deploy 为什么没生效?检查是否漏了 init
直接 firebase deploy 肯定报错或上传空目录——Firebase Hosting 不是 FTP,必须先初始化项目。漏掉 firebase init hosting 是最常见原因,尤其从 GitHub 拉完代码就急着部署的人。
- 运行前先确认当前目录下有
firebase.json,没有就说明没 init 过 -
firebase init hosting会问你「public directory」,填.或dist都行,但必须和你实际放index.html的路径一致 - 如果项目已存在,
firebase init会提示「You're about to initialize a Firebase project」,别跳过,选中 Hosting 并回车
HTML 文件不显示 404?可能是缺少 rewrite 规则
Firebase Hosting 默认只按路径找真实文件。单页应用(SPA)比如用原生 HTML + JS 路由时,访问 /about 会 404,因为没这个 HTML 文件。
- 在
firebase.json的hosting字段里加rewrites:
{
"hosting": {
"public": "dist",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [{ "source": "**", "destination": "/index.html" }]
}
}
- 注意
source是 glob 模式,**匹配所有路径(包括带参数的),不是正则 - 这个配置不会影响静态资源(CSS/JS 图片),它们仍按原路径加载,只有不存在的 HTML 路径才 fallback 到
index.html
部署后还是旧页面?缓存和版本问题怎么清
Firebase Hosting 默认开 CDN 缓存,改完 HTML 重新 firebase deploy 后可能看到旧版,不是部署失败,是浏览器或 CDN 拿了缓存。
- 本地测试用
firebase serve,它不走 CDN,改完立刻生效 - 上线后强制刷新(Ctrl+Shift+R)能绕过浏览器缓存,但 CDN 缓存要等几分钟自动更新
- 想立刻生效?改
firebase.json加headers控制缓存:
"headers": [{
"source": "**.html",
"headers": [{ "key": "Cache-Control", "value": "no-cache, no-store, must-revalidate" }]
}]
- 但别对所有资源关缓存,JS/CSS 加哈希名 + 长缓存更合理
firebase login 失败或权限拒绝?和 Google 账号绑定有关
firebase login 打开网页后登录不了、卡住、或者提示「User does not have permission」,大概率是你用的 Google 账号没被加进 Firebase 项目成员。
立即学习“前端免费学习笔记(深入)”;
- 先去 Firebase Console 确认项目 ID,再检查右上角账号是不是你要部署用的那个
- 如果用公司邮箱或 GSuite 账号,得让项目 Owner 在
Project Settings > Users and permissions里手动添加你,并给Editor或Owner角色 - 终端里执行
firebase use --add前,确保firebase login已成功且账号有权限,否则deploy会报Error: HTTP Error: 403
真正容易卡住的地方其实是权限和缓存——不是命令写错,而是你以为部署完了,其实 CDN 还在吐旧 HTML,或者你根本没权限往那个项目里写。











