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>