是否可以将静态资产从firebase功能部署到firebase托管?
用例:包含静态html文件的博客。博客内容和元信息将存储在数据库中(内容为降价)。在发布或更新时,将触发firebase函数,该函数解析markdown并为博客帖子生成静态html文件,并将其部署到firebase托管。部署后,该函数会将实时URL存储在数据库中。
这个工作流程是否可行?在当前的文档中,我找不到任何有关从函数部署的内容。
作为一种解决方法,我可以设想使用travis-ci进行设置。该函数触发travis上的重建,travis构建静态资产并将它们部署到firebase托管,但这似乎是一个巨大的开销。
我还可以从数据库中提取markdown内容并在客户端上构建,但我真的很想在初始加载时间的原因下尝试静态文件方法。
答案 0 :(得分:2)
我一直希望这样做很长一段时间,似乎新推出的Firebase Functions Hosting Integration ......好吧,我们仍然无法做到我们想要的。但我们可以关闭!
如果您按照上面的帖子阅读,您可以看到我们现在如何编辑firebase.json
重定向URL以指向firebase功能,该功能可以从存储在firebase中的markdown构建页面为客户服务。
问题是,每个页面的每个GET
请求都会发生这种情况。哪个是愚蠢的(对于像典型博客这样的大部分静态页面)。我们想要即时的静态页面,而无需等待函数生成任何内容(即使这种情况发生得非常快)。我们可以通过使用Cache-Control
对象将response
标头设置为任意大的数字来缓解这种情况,如
res.set('Cache-Control', 'public, max-age=600, s-maxage=31536000');
这将告诉浏览器将结果缓存10分钟,但CDN将其缓存一年。这几乎解决了除了第一次打击之外所有想要预渲染,即时可用页面的问题,这将导致渲染成本。此外,如果CDN确定没有足够的流量来保证存储它,CDN可以逐出您的缓存内容。
越来越近了。
但我们并不是我们需要的地方。说你发布你的帖子,几天后,注意一个错字?好吧,我觉得你几乎都被软管了。除非您执行以下操作,否则您的缓存内容将在今年剩余时间内继续提供:
更改帖子的网址 - 这可能是一个坏主意,因为它会使任何搜索引擎优化和中断链接到已经存在的页面。
可能有一种方法可以强制CDN更新,可能是通过增加您的发布博客帖子来实现的。在请求标头中包含javascript GET
请求并包含奇怪内容的进程,或者可能有任何方法在帖子更新时使用firebase函数执行此操作。这就是我被卡住的地方。
Firebase使用谷歌的云平台CDN,其中包含Cache invalidation的机制,但我不知道这些功能可以从功能中获得 - 即使它已经存在,它仍然没有#39;解决从缓存中逐出的问题。
就个人而言,我可能会使用我描述的设置,CDN缓存年龄限制为中间长度。这打败了我目前使用(优秀的)showdown.js向客户端发送markdown的方法,这仍然非常快,但确实需要客户端javascript和几个cpu周期。
希望有人可以解决这个问题(或者firebase的某个人可以放弃从功能到主机托管到下一个版本:))。如果我把它固定下来,我会更新我的答案。
答案 1 :(得分:0)
我尚未对此进行全面调查,但我想知道这是否是您要寻找的东西
https://gist.github.com/puf/e00c34dd82b35c56e91adbc3a9b1c412
git clone https://gist.github.com/e00c34dd82b35c56e91adbc3a9b1c412.git Firebase托管部署文件cd firebase托管部署文件npm 安装
进行空运行,请确保您没有做会后悔节点deployFile.js contentsite /index.html
的操作删除真实节点deployFile.js contentsite /index.html提交
答案 2 :(得分:0)
我还没有尝试过,但是我希望您的云功能可以使用Hosting REST API将新的静态文件部署到Firebase托管中。
经过一些测试,我将使用功能代码和教程来更新此答案。