如何在没有 ChunkLoadError 的情况下使用 React Code Splitting 和 Firebase Hosting

How to use React Code Splitting and Firebase Hosting without ChunkLoadError

我需要将 React Codes Splitting 与托管在 Firebase 托管上的 Create React 应用程序一起使用。

但是,我遇到了一个问题,因为 Firebase 托管只托管任何应用程序的最新版本。这意味着,如果您部署 new 应用程序版本 (N+1),并且用户打开现有版本 (N),并且该用户跨越代码拆分边界,他们将请求旧块 (N),不再托管在 Firebase 托管中,因为当前版本已更改 (N+1)。

那么,如何避免 Firebase 托管中的代码拆分 ChunkLoadError?有没有办法告诉 Firebase Hosting 保留您已部署的所有先前版本,并且只添加最新版本的新文件(例如 index.html 和 JS/CSS 块?)。

我使用以下过程解决了这个问题:

  1. 将每个新版本的文件推送到存储桶,例如 gs://my-buck/app/releases/<git-sha>/
  2. 在本地制作发布文件夹,如firebase_deploy/
  3. 识别 git 历史记录中的最后 N 个发布标签
  4. 对于每个旧版本,gsutil -m -q rsync -rc gs://my-buck/app/releases/<git-sha>/ firebase_deploy/ 文件复制下来
  5. 复制 new 发布文件 rsync -rvc build/ firebase_deploy/
  6. 使用 newold 块将应用程序从 firebase_deploy/ 部署到 Firebase,优先考虑新块可能发生冲突的地方。

这个过程为我消除了 ChunkLoadErrors。

注意:使用有限的 N 先前版本,这样您就不会 运行 增加 Firebase 托管存储费用。如果您没有很多工件,如果需要,您可以保留所有以前的版本。