RT
现在前端这边很多采用按需引用模块
但是这样其它模块的资源就没被加载到
如果这时发布了新版本
用户又没刷新页面
并点击了其它模块
这时可能就遇到其它模块的资源文件 404
从而加载失败
目前公司微前端的子系统是 vite 项目
最近和测试在扯这个问题
也做了些优化
监听如果是要加载 js 文件却加载了 html
就提示用户刷新页面
1
chenluo0429 2022-10-20 20:26:50 +08:00
线上环境有 CDN ,没有预热就再次更新版本的概率不高,真的命中也没办法,为这种 edge case 做优化总感觉怪怪的
|
2
chenluo0429 2022-10-20 20:27:37 +08:00
真的有需要我们也会向客户端推送事件,触发客户端自刷新的
|
3
icySoda 2022-10-20 20:35:01 +08:00 via iPhone
为什么会 404 ,难道不是加载到上一个版本的 js 文件吗?
|
4
caisanli OP @chenluo0429 自刷新有点突兀,想着有提示会好些。主要是测试阶段 更新很频繁。 突然想到 应该存一份旧的包在那里...好像也解决不了根本问题
|
6
rabbbit 2022-10-20 20:43:31 +08:00
加配置让生成的 js 文件名带 hash
然后旧的 js 文件不要删 |
8
rabbbit 2022-10-20 20:51:12 +08:00
留着没啥问题,实在讨厌可以隔几年再删。
很多后端也不会清理冗余文件,这些东西才更占地方。 |
11
aaronlam 2022-10-20 21:07:28 +08:00
一般会采取增量发布的方式的啊,肯定不会直接把上一版本的直接干掉把。而且资源 hash 是文件名的一部分
|
13
caisanli OP |
14
aaronlam 2022-10-20 21:24:53 +08:00 1
|
15
jarven123 2022-10-21 10:28:43 +08:00
我们为了让用户尽快使用新版,会在打包的时候生成一个 json 记录当前的版本信息,并且在 html 打上标记,然后每次切换路由的时候拿当前 html 标记的版本和生成的 json 中的版本信息对比,如果需要更新就直接 reload 页面
|
18
daysv 2022-10-21 15:51:13 +08:00
这有啥的, 每次打包资源名称都是根据内容的 hash 值, 发版本先发资源, 后发 index.html.
发版不删除, 无脑覆盖. over |
19
daysv 2022-10-21 15:52:22 +08:00
```js
router.onError((error) => { const isChunkLoadFailed = /Loading (\w| )*?chunk (\d)+ failed/.test(error.message) if (isChunkLoadFailed) { window.location.reload() } }) ``` 我这还写过一个粗暴的代码在懒加载路由里, 虽然现在没啥用. |
20
bebop 2022-10-21 18:18:39 +08:00
加版本号
|