Nuxt/pwa更新版本

2024-02-19

我正在使用 nuxt/pwa 模块创建一个 pwa。我设法在工作箱的安装事件中检测到服务工作人员的更改:

plugins/pwa-update.js

export default async (context) => {
  const workbox = await window.$workbox
  if (!workbox) {
    alert("Workbox couldn't be loaded.")
    return
  }

  workbox.addEventListener('installed', (event) => {
    if (!event.isUpdate) {
      alert('The PWA is on the latest version.')
      return
    }
    
    console.log(workbox)

    alert('There is an update for the PWA, reloading...')
    
    window.location.reload()
  })
}

并使用以下命令清除旧的缓存版本:

#static/custom-sw.js

self.addEventListener('activate', (event) => {
    const LATEST_VERSION = 'v0.998'
    if (caches) {
        caches.keys().then((arr) => {
        arr.forEach((key) => {
            if (key.indexOf('app-precache') < -1) {
            caches
                .delete(key)
                .then(() =>
                console.log(
                    `%c Cleared ${key}`,
                    'background: #333; color: #ff0000'
                )
                )
            } else {
            caches.open(key).then((cache) => {
                cache.match('version').then((res) => {
                if (!res) {
                    cache.put(
                    'version',
                    new Response(LATEST_VERSION, {
                        status: 200,
                        statusText: LATEST_VERSION,
                    })
                    )
                } else if (res.statusText !== LATEST_VERSION) {
                    caches
                    .delete(key)
                    .then(() =>
                        console.log(
                        `%c Cleared Cache ${res.statusText}`,
                        'background: #333; color: #ff0000'
                        )
                    )
                } else {
                    console.log(
                    `%c Great you have the latest version ${LATEST_VERSION}`,
                    'background: #333; color: #00ff00'
                    )
                }
                })
            })
            }
        })
        })
    }
})

这是我的nuxt.config.js

export default {
  // Disable server-side rendering: https://go.nuxtjs.dev/ssr-mode
  ssr: false,
  ...,
  plugins: [
    ...,
    { src: '~/plugins/pwa-update.js', ssr: false },
  ],
  pwa: {
    meta: {
      title: 'App',
      description: 'App',
      author: '...',
    },
    icon: {
      source: 'icon2.png',
      fileName: 'icon2.png',
      iconSrc: 'icon2.png',
    },
    manifest: {
      name: 'App',
      short_name: 'App',
      lang: 'it',
      theme_color: '#0ca86c',
      background_color: '#0ca86c',
      useWebmanifestExtension: false,
      display: 'standalone',
      start_url: '/',
    },
    workbox: {
      enabled: true,
      cacheNames: {
        prefix: 'app',
      },
      importScripts: [
        'custom-sw.js',
      ],
    },
  },
}

但是,我真的不明白更新检测是如何工作的。例如,如果我在 custom-sw.js 文件中使用更新版本部署新的服务器端版本,我仍然需要手动重新加载页面来检测更改并显示新版本警报。我没想到用户必须手动重新加载页面。是否可以在不重新加载页面的情况下触发 pwa-update 事件监听器?
例如,通过推送通知?


以下是我如何实施检查新更新的过程。请记住,我还没有使用可安装的应用程序对其进行测试,仅使用网站版本进行测试

  1. 创建静态文件version.txt包含一个随机字符串。该文件在构建时重新生成。这意味着,任何新npm run generate将更改该文件的内容
  2. 我在所有布局中有一个组件负责获取version.txt每隔几分钟归档一次。当它被获取时,我将内容与我保留的一些项目进行比较localStorage, say _app_version。如果该项目不存在于localStorage,这意味着该应用程序是第一次加载。如果它存在并且与新的不同,则意味着服务器具有新代码,并且我强制用户使用阻止/不可关闭的确认模式重新加载应用程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nuxt/pwa更新版本 的相关文章

随机推荐

  • 将所有内容都纳入范围内会影响 Angular 性能吗?

    我想知道是否有人对在模块内部使用 scope 与普通 JavaScript 对象有什么建议 例如 我在控制器中有一些变量 为了方便起见 我将它们附加到 scope 但它们可能只是控制器内的常规对象 没有任何功能差异 我的问题是 当 Angu
  • 颠覆和依赖

    我正在尝试为以下问题找到可行的策略 我们有几个依赖于我们框架的网络项目 所有内容都存储在我们的 SVN 中 并拥有自己的项目和所有必要的目录结构 主干 标签 分支 在一个示例中 我们有项目 webprj01 和 webprj02 并且我们有
  • 如何将 routerLinkActive 与空 routerLink 一起使用

    我有以下选项卡栏链接 第一个应该是空的
  • 如何使用 POCO 通过 HTTP 基本身份验证进行 HTTP Post?

    我正在尝试使用 POCO 进行 HTTP 基本身份验证 明文用户名和密码 的 HTTP Post 我找到了一个 Get 的示例并尝试修改它 但作为一个菜鸟 我认为我已经破坏了它的实用性 有人知道怎么做吗 是的 我已经看到了另一个关于此的问题
  • 使用 ctest/cmake 测试非零退出状态

    感兴趣的应用程序是一个编译器 当它在源代码中遇到错误时 它会返回非零退出代码 编译器的单元测试由故意触发错误的小片段组成 用于添加测试的函数是 function add compiler test test name options add
  • 检测 AngularJS 中自定义过滤器何时完成[重复]

    这个问题在这里已经有答案了 我有一个自定义过滤器函数 我正在调用 ng repeat 指令 div app title div 这显然会影响 appList 中每个应用程序的 assetFilter 函数 过滤完成后 我想运行另一个函数 如
  • Spring AOP中代理的使用

    我正在读一本书 其中谈到启用AspectJSpring AOP 的支持 下面是书中的一段话 要在 Spring IoC 容器中启用 AspectJ 注释支持 您只需定义一个空的 bean 配置文件中的 XML 元素 aop aspectj
  • Azure 表存储 API 是否缓存结果?

    当我对 Azure 表存储多次运行相同的查询时 它是否使用缓存并加速后续查询 换句话说 它是否缓存 HTTP 响应 Azure存储肯定使用缓存 http www scribd com doc 73458371 Windows Azure S
  • 单击 web.py python 中的按钮时下载/导出 csv 文件

    我正在使用Pythonweb py构建小型网络应用程序的框架 它由一个 Home page以 url 作为输入 Reads anchor text and anchor tags从中 将其写入 csv 文件并下载 当我们点击 a 时 就会发
  • Python range() 上的“in”运算符时间复杂度

    我有以下功能 def foo length num return num in range length 这个函数的时间复杂度是多少 注意到range 在Python 3上创建一个Range对象 这个函数的时间复杂度是O 1 还是O N 我
  • wxPython,更改StyledTextCtrl的背景颜色

    我尝试过 但什么也没发生 self txt SetBackgroundColour 255 0 0 正如标题中所述 我正在尝试更改 StyledTextCtrl 的背景颜色 有谁知道可以使用的方法吗 我检查了 API 文档 但似乎找不到 h
  • 如何从 MATLAB 打印出一大堆符号表以形成十字绣图?

    在这个网站上 http www picturecraftwork com 可以从图像创建针迹图表 我正在尝试在 MATLAB 中执行此操作 我已经使用图像处理工具箱实现了所有内容 减少颜色数量 映射到可用纱线颜色的颜色空间 我已经完成了所有
  • DB 记录属性的整数与字符

    假设我有一张包含房地产列表的表格 每个列表都可以是 出售 或 出租 因此 我可以将 出售 映射到 0 将 出租 映射到 1 并将其作为 INT 存储在数据库中 但是 如果我将其存储为 CHAR 类型的字段中的 销售 租赁 则会更具描述性 或
  • 如何在 Python Pandas 中使用循环更改数据帧? [复制]

    这个问题在这里已经有答案了 我有 N 个数据帧 范围从 L1 Ln 我想修改它们以保留与特定条件相关的行 我运行了以下循环 for df in L1 Ln df df ix df Sector Services 然而 当我调出每个数据框时
  • 如何在 Xamarin.Android 中注册我自己的应用程序子类?

    I have public class MyApp Application 在 Java 中 我将在清单中添加一行并向其传递应用程序的命名空间和名称
  • jQuery 只允许一个版本

    我有一个包含 jquery 的第三方脚本 这会导致事情中断 我使用的是 1 6 版本 外部脚本使用的是旧版本 如何强制只加载一个版本的 jquery 并且它是我在页面上的版本而不是外部加载的版本 这实际上很容易做到 使用 jquery no
  • 如何在将多个图像上传到 Firebase 存储时显示进度条?

    我制作了将多个图像上传到存储并将链接保存到文档的功能 但我不知道如何监控进度 const getURLS async gt const promises images images map image gt const storageRef
  • 将阿拉伯文本保存到 MySQL 数据库中

    我有这段阿拉伯文字 当我尝试将其保存在 MySQL 数据库中时 它没有保存 有什么办法可以将其保存为原文吗 确保您的 MySQL 实例和表设置为采用 UTF 8 而不是 latin1 Section 手册9 1 http dev mysql
  • Chrome 中的展开运算符出现意外标记?

    我正在使用以下代码在 Chrome 开发工具中测试某些内容 const one a a b b const two one c c VM417 1 Uncaught SyntaxError Unexpected token 为什么在展开运算
  • Nuxt/pwa更新版本

    我正在使用 nuxt pwa 模块创建一个 pwa 我设法在工作箱的安装事件中检测到服务工作人员的更改 plugins pwa update js export default async context gt const workbox