firebase - 何时/如何更新 Firebase Web SDK 版本号?
问题描述
当您初始化 Firebase 托管时,它会在生成的 index.html 文件的标头中包含一条注释:
<!-- update the version number as needed -->
<script defer src="/__/firebase/7.5.2/firebase-app.js"></script>
我的问题与“根据需要”有关;我查看了文档,没有看到解释。
可能这意味着它应该是显而易见的——但是当您是初学者时,大多数事情都不是!
所以,为了让我的问题更具体:
- 更新版本何时会导致 Firebase 网络应用中断?
- 相关地,如果一个应用程序正在运行,并且很长时间没有更新(许多版本/年),那么该应用程序是否仍然正常运行?或者如果不保持最新,它会中断吗?
- “根据需要”是否意味着“根据需要 [访问新功能]”?
- 最后,是否暗示这些更改应该手动实现——通过定期查找最新的 Firebase 版本,并在 index.html 中输入新版本号——或者是否有某种自动“保持最新”工作流程/隐含的工具/约定?
我意识到上面有许多子问题,但它们都是为了澄清“按需更新”,所以我认为它们属于同一个地方。
我希望任何答案都能帮助其他初学者了解何时适合更新应用程序所依赖的服务这一更大的问题!谢谢。
解决方案
Firebase 遵循所谓的语义版本控制 (SemVer) 规则。
来自semver.org:
给定版本号 MAJOR.MINOR.PATCH,增加:
进行不兼容的 API 更改时的主要版本,
以向后兼容的方式添加功能时的次要版本,以及
PATCH 版本,当您进行向后兼容的错误修复时。
这意味着在您的情况下,API 保证在次要版本 (7.x) 中保持兼容,但可能会在主要版本 (8.0) 中进行重大更改。这意味着次要版本 (7.x) 用于修复问题,有时会添加不会破坏现有行为的次要功能。
有了这些知识,让我们看看我们是否可以回答您的问题:
更新版本何时会导致 Firebase 网络应用中断?
在同一主要版本(7.x,例如 7.5.2 -> 7.5.3 或 7.5.2 -> 7.6.0)内更新不应破坏您的应用程序。有一些例外情况,例如当您的代码依赖于已修复的错误行为时,或者当版本中存在错误时。Firebase 团队通常会尽快修复后者,而您通常希望回滚到以前的版本并在前一种情况下更新您的代码。
相关地,如果一个应用程序正在运行,并且很长时间没有更新(许多版本/年),那么该应用程序是否仍然正常运行?或者如果不保持最新,它会中断吗?
版本发布后,将保持不变。因此,您的应用程序将继续按照您制作时的方式运行。
“根据需要”是否意味着“根据需要 [访问新功能]”?
升级的两个主要原因:
访问新功能。
这是升级的最明显原因,因为它允许您将 Firebase 中的新功能添加到您的应用程序中。大多数时候这个
访问错误修复。
在您使用的库版本中可能会发现错误,其中一些错误可能是安全漏洞。在这种情况下,不更新到更新版本意味着您的应用程序中存在已知的安全漏洞。这里要实现的关键是已知部分:大多数黑客搜索具有已知漏洞的应用程序,而不是试图寻找新的漏洞。
最后,是否暗示这些更改应该手动实现——通过定期查找最新的 Firebase 版本,并在 index.html 中输入新版本号——或者是否有某种自动“保持最新”工作流程/隐含的工具/约定?
如果您使用工具来构建/打包您的网站,通常可以自动引入新版本。
许多开发人员将此类工具配置为在每次构建时自动引入新补丁 (7.5.x),而有些开发人员甚至引入新的次要版本 (7.xx)。但也有一种思想流派更喜欢硬编码确切的版本号,并且只能通过定期检查手动升级。
无论哪种方式,即使在这种情况下,也需要进行新的构建进行升级。这是一件好事™️,因为您最不希望看到的是,当 Firebase 意外发布带有错误的新版本时,您的应用程序会在生产中中断(这种情况很少发生,但确实发生了)。通过在构建过程中只包含一个新版本,您可以降低这种风险,尤其是当您在构建过程中运行应用功能的自动化测试时。
这里没有正确或错误的答案,因为任何一个都可以正常工作。这真的取决于你自己的喜好。
推荐阅读
- swift - 我需要帮助将 UITextField 从字符串转换为 Int
- javascript - 如何根据javascript中的条件对现有数组对象中的值求和
- java - 如何在 VS Code 远程容器中设置 java.home 路径
- wso2 - 自定义 WSO2 API Manager 3.1.0 管理控制台的界面
- sef - 如何阅读零件
- angular-reactive-forms - 无法绑定到“formGroup”,因为在使用 SharedModule 时它不是“form”的已知属性
- python - 如何减去/除以
和 和 ? - sql-server - 使用 while 循环在 SQL Server 实例上创建数据库表和表信息
- css - 为什么 SVG 旋转没有居中?
- excel - 日期自动过滤器