如何部署具有代码拆分功能的JS应用程序,确保不中断过去的应用程序版本

问题描述 投票:2回答:1

我有一个使用Webpack和React构建的简单PWA应用程序。它具有动态导入(例如React.lazy(() => import('./SomeRoute')))上的代码拆分设置,因此不同的路由会获得不同的JS包,例如:main.bundle.jssomeRoute.bundle.js

现在想象一下情况:我部署的应用程序的新版本完全没有SomeRoute或完全不同。该应用将尝试达到https://myapp.com/someRoute.bundle.js并失败,因为该资产不再存在。应用程序重装显然会有所帮助,但仍然不是令人愉快的行为。

我看到的一种解决方案是将内容哈希包含到所有资产中,因此它将是someRoute.1e4f.js,然后在一段时间内托管所有这些不同的应用程序版本,直到所有应用程序用户都拥有最新版本的应用程序。

如果这是要走的路,那么我不知道如何组织它。我目前在vercel.com(例如Zeit)上托管我的PWA,但我从未见过它们是否具有保持过去构建的资产可用的功能。当然,我可以将所有构建工件提交到git中,但这很快就会使回购膨胀。

另一个解决方案是在初始加载时预提取所有应用程序的路由,并将其缓存在服务工作者中。这显然会有所帮助,但它违反了代码拆分以减少网络流量使用的目的。

另一种解决方法是在JS块上检测404并强制重新加载应用程序] >>。对于某些用户来说,这将是一个非常不愉快的用户体验。

那么,认真的应用如何处理它?我感到惊讶的是,这样的基本问题没有引起人们的重视。

我有一个使用Webpack和React构建的简单PWA应用程序。它在动态导入上具有代码拆分设置(例如React.lazy(()=> import('./ SomeRoute'))),因此不同的路由会获得不同的JS包,例如....

reactjs webpack deployment progressive-web-apps code-splitting
1个回答
0
投票

我对此主题进行了一些研究,实际上,除了我已经在问题中提到的内容之外,没有其他要添加的内容。我已经在本文中更详细地说明了这一点:http://dimaip.github.io/2020/04/25/deploying-apps-with-code-splitting/

© www.soinside.com 2019 - 2024. All rights reserved.