如何在没有 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 块?)。
我使用以下过程解决了这个问题:
- 将每个新版本的文件推送到存储桶,例如
gs://my-buck/app/releases/<git-sha>/
- 在本地制作发布文件夹,如
firebase_deploy/
- 识别 git 历史记录中的最后
N
个发布标签
- 对于每个旧版本,
gsutil -m -q rsync -rc gs://my-buck/app/releases/<git-sha>/ firebase_deploy/
将 旧 文件复制下来
- 复制 new 发布文件
rsync -rvc build/ firebase_deploy/
- 使用 new 和 old 块将应用程序从
firebase_deploy/
部署到 Firebase,优先考虑新块可能发生冲突的地方。
这个过程为我消除了 ChunkLoadErrors。
注意:使用有限的 N
先前版本,这样您就不会 运行 增加 Firebase 托管存储费用。如果您没有很多工件,如果需要,您可以保留所有以前的版本。
我需要将 React Codes Splitting 与托管在 Firebase 托管上的 Create React 应用程序一起使用。
但是,我遇到了一个问题,因为 Firebase 托管只托管任何应用程序的最新版本。这意味着,如果您部署 new 应用程序版本 (N+1),并且用户打开现有版本 (N),并且该用户跨越代码拆分边界,他们将请求旧块 (N),不再托管在 Firebase 托管中,因为当前版本已更改 (N+1)。
那么,如何避免 Firebase 托管中的代码拆分 ChunkLoadError
?有没有办法告诉 Firebase Hosting 保留您已部署的所有先前版本,并且只添加最新版本的新文件(例如 index.html
和 JS/CSS 块?)。
我使用以下过程解决了这个问题:
- 将每个新版本的文件推送到存储桶,例如
gs://my-buck/app/releases/<git-sha>/
- 在本地制作发布文件夹,如
firebase_deploy/
- 识别 git 历史记录中的最后
N
个发布标签 - 对于每个旧版本,
gsutil -m -q rsync -rc gs://my-buck/app/releases/<git-sha>/ firebase_deploy/
将 旧 文件复制下来 - 复制 new 发布文件
rsync -rvc build/ firebase_deploy/
- 使用 new 和 old 块将应用程序从
firebase_deploy/
部署到 Firebase,优先考虑新块可能发生冲突的地方。
这个过程为我消除了 ChunkLoadErrors。
注意:使用有限的 N
先前版本,这样您就不会 运行 增加 Firebase 托管存储费用。如果您没有很多工件,如果需要,您可以保留所有以前的版本。