Blazor WASM - Error: Failed to start platform - error sometimes shows once after deploy
Blazor WASM - Error: Failed to start platform - error sometimes shows once after deploy
我有一个 Blazor WASM 应用程序,它可以正常工作。但是,通常在部署新版本后,有时无缘无故应用程序无法自行加载。
刷新页面使错误消失,页面大部分工作,直到部署下一个版本。
我从网络控制台得到了这个结果:
我不确定是什么导致了这个问题,似乎是某种缓存问题,但我无法查明也无法解决。
我通过添加一些蛮力方法设法解决了我的 post-部署完整性错误。这可能不是最佳解决方案,但对我来说效果不错。
首先,在 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>
我有一个 Blazor WASM 应用程序,它可以正常工作。但是,通常在部署新版本后,有时无缘无故应用程序无法自行加载。
刷新页面使错误消失,页面大部分工作,直到部署下一个版本。
我从网络控制台得到了这个结果:
我不确定是什么导致了这个问题,似乎是某种缓存问题,但我无法查明也无法解决。
我通过添加一些蛮力方法设法解决了我的 post-部署完整性错误。这可能不是最佳解决方案,但对我来说效果不错。
首先,在 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>