发布更改后强制重新加载 Blazor 客户端

Joh*_*rum 12 azure-web-app-service blazor

我有一个 Blazor 应用程序,我将它部署到 Azure 以进行一些 alpha 测试。我设法做到了这一点,并且可以很好地从网站上运行该应用程序。

当我对客户端和服务器项目进行更改并重新发布它们时,问题就出现了。无论浏览器在运行什么,客户端都将运行浏览器缓存中已有的内容,直到浏览器历史记录被清除。这意味着在清除历史记录之前,应用程序似乎已损坏,因为旧版本上的客户端请求与新服务器 API 不匹配 - 更不用说我的客户端更改没有得到测试。

发布更改时如何强制重新加载客户端?我是否必须告诉浏览器不要缓存我的应用程序(不确定如何在 blazor 上)并在我的应用程序稳定之前降低性能?或者有没有办法在第一次 API 调用后使用一些中间件或其他东西强制客户端重新加载?

或者我错过了什么?

编辑:我使用了 Blazor WebAssembly 3.2.0 Preview 2 中提供的 PWA 模板可能是相关的。我仍在从浏览器运行该应用程序,但启用 PWA 选项似乎可能改变了应用程序的行为,即使在将其作为常规网站运行。

Rya*_*SFT 8

由于你的app是PWA,你可以在navigator.serviceWorker对象中声明一个js文件进行注册。这个my.js文件可以包含一个const CACHE_VERSION = 1.0. 更新此值应强制客户端下载最新文件。有关更多信息,请参阅 Jeremy Likness 的博客文章


szc*_*lak 5

如果有人寻找 Azure Pipelines 和 Azure Static Web App 部署的解决方案,以下是对我有用的方法:

  1. 在 service-worker.published.js 文件顶部添加了以下行。

const CACHE_VERSION = '{#CACHE_VERSION#}'

  1. 将 Bash 步骤添加到 *.yaml 文件,只需相应地更改您的应用程序位置即可。
  - master

pool:
  vmImage: ubuntu-latest

steps:
  - checkout: self
    submodules: true
  - bash: 'sed -i ''s/{#CACHE_VERSION#}/$(Build.BuildId)/'' MathApp/wwwroot/service-worker.published.js'
    
  - task: AzureStaticWebApp@0
    inputs:
      app_location: 'MathApp'
      output_location: 'wwwroot'
      azure_static_web_apps_api_token: $(deployment_token)

Run Code Online (Sandbox Code Playgroud)