blazor - Blazor WASM - 错误:无法启动平台 - 部署后有时会显示一次错误
问题描述
我有一个主要工作的 Blazor WASM 应用程序。但是,通常在部署新版本后,有时很少会无缘无故地应用程序无法自行加载。
刷新页面使错误消失,页面主要工作,直到部署下一个版本。
我不确定是什么导致了这个问题,似乎是某种缓存问题,但我无法查明,也无法解决它。
解决方案
通过添加一点蛮力方法,我设法解决了我的部署后完整性错误。这可能不是最好的解决方案,但适用于我的情况。
首先,在 service.worker.js 中,我将文件 index.html 标记为不被缓存:
const offlineAssetsExclude = [/^service-worker\.js$/, /^index\.html$/];
然后我将 service-worker-assets.js 包含到加载的脚本中。我需要它来访问assetsManifest.version
每次构建时自动生成的内容。然后我将它与保存在 localstorage 中的版本进行比较,清除所有应用程序缓存,将新版本保存到 localstorage 并强制重新加载。
请注意,这种方法将在检测到新版本时强制下载完整的应用程序,从而避免完整性错误,但代价是可能重新下载不需要的文件。
<script src="service-worker-assets.js?s=v1.12"></script>
<script>
if (localStorage.getItem('currentVersion') != self.assetsManifest.version) {
window.caches.keys().then(function (keyList) {
keyList.forEach(key => window.caches.delete(key));
});
localStorage.setItem('currentVersion', self.assetsManifest.version)
document.location.reload(true);
}
</script>
另请注意 ?s=v1.12 后缀添加到资产列表文件。该值必须在每次部署期间递增。它确保浏览器不会缓存旧文件,并且我们拥有最新版本。
由于我是偏执狂,我为许多其他我不想在部署后保持缓存的文件添加了相同的后缀
<link href="Project.Client.styles.css?s=v1.12" rel="stylesheet" />
...
<script src="javascript/site.js?s=v1.12"></script>
<script src="_framework/blazor.webassembly.js?s=v1.12"></script>
推荐阅读
- java - 在 SpringBoot 中遇到自动装配问题
- angular - Angular viewChild 获取偏移宽度
- git - Git漂亮格式短格式日期不起作用
- r - 在R中的两列中创建一个数字序列
- python - ValueError: int() 以 10 为基数的无效文字:'' 使用 tkinter
- javascript - 我可以拆分映射的项目吗?
- linux - 在 ESXi 上安装 vCenter 时出错(安装在 PC 上)
- compilation - Babel-CLI -- 使用 package.json 文件来“监视”一个目录不会更新编译的源代码
- c - 如何告诉 VSCode 在哪里可以找到头文件和源文件
- mongodb - 如何在 MongoDB 中对数组类型的字段进行排序