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