关于一个按需引入的疑问

2022 年 10 月 20 日
 caisanli

RT

现在前端这边很多采用按需引用模块

但是这样其它模块的资源就没被加载到

如果这时发布了新版本

用户又没刷新页面

并点击了其它模块

这时可能就遇到其它模块的资源文件 404

从而加载失败


目前公司微前端的子系统是 vite 项目

最近和测试在扯这个问题

也做了些优化

监听如果是要加载 js 文件却加载了 html

就提示用户刷新页面

2376 次点击
所在节点    JavaScript
20 条回复
chenluo0429
2022 年 10 月 20 日
线上环境有 CDN ,没有预热就再次更新版本的概率不高,真的命中也没办法,为这种 edge case 做优化总感觉怪怪的
chenluo0429
2022 年 10 月 20 日
真的有需要我们也会向客户端推送事件,触发客户端自刷新的
icySoda
2022 年 10 月 20 日
为什么会 404 ,难道不是加载到上一个版本的 js 文件吗?
caisanli
2022 年 10 月 20 日
@chenluo0429 自刷新有点突兀,想着有提示会好些。主要是测试阶段 更新很频繁。 突然想到 应该存一份旧的包在那里...好像也解决不了根本问题
caisanli
2022 年 10 月 20 日
@icySoda 上一个版本的 js 已经被新的替换了 浏览器也没有缓存 所以会 404
rabbbit
2022 年 10 月 20 日
加配置让生成的 js 文件名带 hash
然后旧的 js 文件不要删
caisanli
2022 年 10 月 20 日
@rabbbit 默认都会加 hash 。旧的包不删倒是能解决,只是发版多了后就会有占空间(虽然不多)。
rabbbit
2022 年 10 月 20 日
留着没啥问题,实在讨厌可以隔几年再删。
很多后端也不会清理冗余文件,这些东西才更占地方。
caisanli
2022 年 10 月 20 日
@rabbbit 哈哈哈可以和运维商量一下
icySoda
2022 年 10 月 20 日
@caisanli 为啥要删,就这点文件体积,积累到公司倒闭都没多少空间。
aaronlam
2022 年 10 月 20 日
一般会采取增量发布的方式的啊,肯定不会直接把上一版本的直接干掉把。而且资源 hash 是文件名的一部分
aaronlam
2022 年 10 月 20 日
@caisanli

相比于线上用户用着用着报错,这点占用真的不算什么吧,而且可以采取半年一清的方式来清楚旧的资源。
caisanli
2022 年 10 月 20 日
@aaronlam
@icySoda
焕然大悟!🤣🤣🤣我们现在测试和生产部署都是干掉之前的包,明天和运维商量下。
aaronlam
2022 年 10 月 20 日
jarven123
2022 年 10 月 21 日
我们为了让用户尽快使用新版,会在打包的时候生成一个 json 记录当前的版本信息,并且在 html 打上标记,然后每次切换路由的时候拿当前 html 标记的版本和生成的 json 中的版本信息对比,如果需要更新就直接 reload 页面
caisanli
2022 年 10 月 21 日
@jarven123 这样会写兼容代码 而且不一定是路由 一个弹窗组件也会引起
jarven123
2022 年 10 月 21 日
@caisanli 那就上 CDN 缓存就好了
daysv
2022 年 10 月 21 日
这有啥的, 每次打包资源名称都是根据内容的 hash 值, 发版本先发资源, 后发 index.html.
发版不删除, 无脑覆盖.
over
daysv
2022 年 10 月 21 日
```js
router.onError((error) => {
const isChunkLoadFailed = /Loading (\w| )*?chunk (\d)+ failed/.test(error.message)
if (isChunkLoadFailed) {
window.location.reload()
}
})
```
我这还写过一个粗暴的代码在懒加载路由里, 虽然现在没啥用.
bebop
2022 年 10 月 21 日
加版本号

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/888518

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX