Replies: 2 comments
-
version-rocket 这个库也可以参考。单独开了一个工作线程,后台轮询比对版本标识,一样的逻辑。 |
Beta Was this translation helpful? Give feedback.
0 replies
-
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
背景
目前 umi 4 默认按页拆包来优化,实现每个页面只需加载最少的 js 资源,由此会出现很多异步 js 分包。
通常我们会开启
hash: true
构建,js / css 等资源做长期缓存,html 不缓存。但如果在版本发布时,有用户在旧的应用 html 上加载了新的页面,会导致旧资源
xxx.[hash].js
加载不到(如果是整个替换 oss 存储内容的话,因为新版本已经发布了,旧的 hash 文件不存在了)。以下介绍两种解决方案供参考。
加载失败自动重试方案
可以考虑 patch
React.lazy
加载方法,遇到加载失败后自动 reload 页面重试,以下代码为自动重试的示例,若阻塞超过 10s ,则弹出报错弹窗需用户手动刷新加载:参考来源:https://twitter.com/cpojer/status/1730141247900459166
另可参考 Vite 的 preload error 实现,自行在
loadError
内 dispatch 事件,之后在需要监听的地方处理即可。自动检测新版本是否发布方案
同时还可参考 #10171 中的方案,在后台轮询 html 内容,在 html 中或其他位置维护新的版本标识,发版后将自动提示用户刷新页面。
注:添加版本标识的方案多样,如在
api.onBuildHtmlComplete
构建完成后手动修改 html ,或headScripts
手动添加等:Beta Was this translation helpful? Give feedback.
All reactions