从Firebase Hosting部署中恢复丢失的代码

74

我需要从Firebase托管的网站中获取我的代码,上个夏天我创建了一个网站,但现在我本地电脑上没有代码了。我想重新编写一些部分,但没有源代码(除了可以从服务页面中获取的JavaScript和CSS)。我找不到从Firebase网站获取代码的方法,有人有什么想法吗?


7
在这里发布问题似乎有些奇怪,但这是Firebase要求用户做的事情:“对于API问题和一般技术帮助,我们鼓励您在StackOverflow上使用Firebase标签。我们密切关注这些问题,并使用StackOverflow可以让其他人受益于答案。” - Randal Wilcox
1
Randal,这里发布API或技术问题一点也不奇怪。@Mooseman,这不是Firebase的文档或支持的功能,因此不是文档问题。 - Kato
Firebase Hosting仅保留您网站的静态资源,因此(通常)它不包含除JavaScript、CSS和HTML之外的任何内容。您还在寻找哪些代码而不是JavaScript呢? - Frank van Puffelen
3
我为这个项目写的角度观点。 - Randal Wilcox
4个回答

90

当然,你应该添加自己的版本控制(例如 git)来管理修订版本和备份,以避免出现这种情况。

有一个脚本可以使用 CLI 运行以下载所有资产。您可以在此处找到脚本和说明。也可以使用 npx 运行:

npx https://gist.github.com/mbleigh/9c8680cf319ace2f506f57380da66e7d <site_name>

请注意,此操作仅返回指定公共文件夹中编译/渲染的内容,而不包括您在开发机器上可能拥有的任何预编译源代码。
由于您的文件是静态资源,您也可以使用wget进行抓取。但对于高级应用程序来说,这种方法不如其他方法,因为您将获取渲染的内容,而非源代码:
wget -r -np https://<YOURAPPNAME>.firebaseapp.com

在这里阅读有关网站抓取的更多内容: https://apple.stackexchange.com/questions/100570/getting-files-all-at-once-from-a-web-page-using-curl


有趣的是,“firebase deploy”似乎并没有部署我的整个项目(除了firebase.json中的“ignore”设置),只部署了index.html文件所需的资源。 - Andrew Swan
2
Firebase部署会上传所有文件,而wget只能从您的index.html文件可以访问到的文件中抓取。 - Chris Raynor
1
Unix的wget命令中,-r -np选项在Windows版本中对应什么?在Windows 10上,wget没有-r选项。 - roberto tomás
1
在 W10 中,您可以通过 scoop 使用 Unix 软件包。 首先,请导航至 [scoop](https://scoop.sh),然后安装它。 之后,在终端(cmd)中将会出现 scoop 命令,键入 “scoop install wget” 就可以安装 Linux 软件包了。如果您是开发人员并且在工作中使用 W10,我建议您启用开发工具。 - simultsop
Firebase托管仅包含公共文件夹中的文件。如果您使用webpack或任何其他构建脚本,您可能只上传了编译后的文件到托管。您无法下载从未上传过的内容。 - Kiana
显示剩余2条评论

8
也许这个答案并不完全符合要求的方向,但为了列出正在上传的文件,您可以在部署过程中使用--debug开关。
firebase deploy --debug

使用此选项,您将看到POST请求。类似于:

>>> HTTP REQUEST POST https://deploy.firebase.com/firebase/yourapp/releases?token=XXX public=dist, version=-KE5UDaj7oCppckjEBaE, prefix=-KE5UDaj7oCppckjEBaE/, manifest=[path=404.html, object=404.html, path=scripts\main\main.html, object=scripts\main\main.html, path=scripts\scripts.d6106dbd.js, object=scripts\scripts.d6106dbd.js, path=scripts\vendor.68cdc83b.js, object=scripts\vendor.68cdc83b.js, path=styles\main.5b335e2d.css, object=styles\main.5b335e2d.css, path=styles\vendor.d41d8cd9.css, object=styles\vendor.d41d8cd9.css], rules=undefined <<< HTTP RESPONSE 200 server=nginx, date=Wed, 30 Mar 2016 07:46:31 GMT, content-type=application/json; charset=utf-8, content-length=34, connection=close, access-control-allow-origin=*, access-control-allow-methods=GET, PUT, POST, DELETE, OPTIONS, strict-transport-security=max-age=31556926; includeSubDomains; preload, x-content-type-options=nosniff

这可能有助于跟踪实际上传到Firebase托管的内容。

但我同意,缺少简单列出Firebase托管文件的选项不鼓励使用此服务。


4
如果我运行“firebase deploy --debug”,则在“HTTP请求POST”中我得不到任何“object”或“path”。看起来它已经不再起作用了。 - Matt
最好且更容易使用托管API获取您当前的版本,然后列出该版本中的文件。这是如何执行此操作的示例[1]。 1 - Kiana

0

-9
  1. 非常简单,你需要做的就是进入你的托管站点。
  2. 右键点击并转到检查元素 => 调试器。在那里,你会找到一个静态文件夹。
  3. 放松,所有的js文件都在那里(仅限前端),你可以复制你的代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接