我已经在云函数中使用Typescript构建了一个动态站点。我还具有云功能触发器,只要Firestore中的数据发生变化,这些触发器就会将相关页面重新编译为Firebase云存储桶中托管的静态页面。
桶看起来像这样:
gs://[bucketname].appspot.com
/app/index.html
/app/page1.html
/app/page2.html
/uploads/images.webp
...
当前,静态网站是通过名为app的云功能中的快速应用程序提供的。这里的问题在于云功能状态。它们并不总是很热,这使得初始加载时间非常慢。
firebase.json
"hosting": {
"public": "public",
"rewrites": [{ "source": "**", "function": "app" }],
}
我要实现的目标是让Firebase托管指向存储桶中的文件,而不是在云功能中安装快速应用程序。在以下两行之间的内容:
firebase.json
"hosting": {
"public": "public",
"rewrites": [
{ "source": "**/:url", "destination": "[BUCKETURL]/app/:url.html" },
{ "source": "**", "destination": "[BUCKETURL]/app/index.html" }]
}
我的URL结构非常简单,它是domain.com/page-name,我也想保持这种方式,最后不带.html。任何建议将不胜感激。谢谢
答案 0 :(得分:0)
在您描述时,允许将Firebase Hosting从Cloudbase重写为Cloud Storage,但这听起来很酷,但目前尚无法实现。我建议filing a feature request。
与此同时,您的选择是:
使用Firestation Hosting中的Cloud Functions集成作为重定向器,就像您已经做的那样。确实,这有时可能会导致冷启动延迟。
在需要时使用另一种类型的Cloud Function(或其他服务器端进程)生成静态内容,并将其推送到Cloud Storage存储桶中。在这种情况下,您将不再使用Firebase Hosting,而是始终直接从Cloud Storage存储桶中提供静态内容。
如果您对此感兴趣,请签出:Upload single file to firebase hosting via CLI or other without deleting existing ones?
答案 1 :(得分:0)
一种类似的方法,可以使用GCP云存储和HTTP负载平衡器,但是唯一的不便之处是无法隐藏.html
。
对于此方法,主要步骤为:
A
记录将您的域指向负载均衡器。要在存储桶中创建静态网站,请遵循this guide
存储在存储桶中的静态站点不依赖于任何后端,并且您生成的即时文件可以是configured not to be cached,并且始终提供可用的最新版本。