为什么捐赠
API 资源管理器
升级指南
NEW!
quasar.config 文件
转换为使用 Webpack 的 CLI
浏览器兼容性
支持 TypeScript
目录结构
命令列表
CSS 预处理器
路由
延迟加载 - 代码拆分
处理资源
启动文件
预取功能
API 代理
处理 Webpack
处理 process.env
使用 Pinia 进行状态管理
使用 Vuex 进行状态管理
代码检查器
测试和审计
开发移动应用
Ajax 请求
向公众开放开发服务器
Quasar CLI with Webpack - @quasar/app-webpack
处理服务工作者

在这里,您将了解如何在网站/应用程序空间内与服务工作者进行交互。请记住,**服务工作者必须通过 HTTPS 提供服务**。

重要的是要注意,服务工作者(由 Workbox 自动生成 - 或者您已配置 Quasar CLI 使用自定义的服务工作者)在单独的线程中运行。但是,您可以在 /src-pwa/register-service-worker.js 文件的应用程序空间内与它进行交互。

与服务工作者交互

在您的 package.json 文件中添加 register-service-worker npm 包作为依赖项(如果它还没有在那里)。

/src-pwa/register-service-worker.js 文件

import { register } from 'register-service-worker'

register(process.env.SERVICE_WORKER_FILE, {
  ready (registration) {
    console.log('Service worker is active.')
  },

  registered (registration) {
    console.log('Service worker has been registered.')
  },

  cached (registration) {
    console.log('Content has been cached for offline use.')
  },

  updatefound (registration) {
    console.log('New content is downloading.')
  },

  updated (registration) {
    console.log('New content is available; please refresh.')
  },

  offline () {
    console.log('No internet connection found. App is running in offline mode.')
  },

  error (error) {
    console.error('Error during service worker registration:', error)
  }
})

提示

此文件由 Quasar CLI 自动捆绑到您的网站/应用程序中,因为它被视为应用程序空间 /src 的一部分。这意味着您可以使用 ES6,导入其他文件等等。

SSL 证书

您可能会注意到,在某些开发环境中,如果未使用 HTTPS 提供服务 - 即使在 localhost 上,Workbox 也不会在 quasar dev 期间加载您的服务工作者。您将看到有两个脚本无法加载。Chrome 浏览器控制台对此相对沉默,但 Firefox 会告诉您发生了什么。您有三个选择

  • 在 quasar.config 文件中设置 > devServer > https: true
  • 从 localhost 到 127.0.0.1 设置回环(但这并非没有安全隐患)
  • 通过 tunnelmolelocalhost.runngrok 提供 localhost,并使用它们提供的 https 地址。

这是一个 tunnelmole 示例(首先使用 yarn global add tunnelmolenpm i -g tunnelmole 安装它)

$ tmole 80
http://b8ootd-ip-157-211-195-182.tunnelmole.com is forwarding to localhost:80
https://b8ootd-ip-157-211-195-182.tunnelmole.com is forwarding to localhost:80

# ...and use the HTTPS url shown in the output

当您在 /quasar.config 文件中设置 devServer > https: true 时,Quasar 将为您自动生成 SSL 证书。但是,如果您想为自己创建 localhost 的证书,请查看 Filippo 的这篇博文 Filippo。然后,您的 quasar.config 文件 > devServer > https 应该如下所示

/quasar.config 文件

devServer: {
  server: {
    type: 'https', // NECESSARY

    options: {
      // Use ABSOLUTE paths or path.join(__dirname, 'root/relative/path')
      key: "/path/to/server.key",
      pfx: "/path/to/server.pfx",
      cert: "/path/to/server.crt",
      ca: "/path/to/ca.pem",
      passphrase: 'webpack-dev-server' // do you need it?
    }
  }
}

重要的托管配置

重要的是,不要允许浏览器缓存 service-worker.js 文件。因为否则,此文件或您的应用程序的更新可能会从缓存加载服务工作者的浏览器中漏掉。

这就是为什么您必须始终确保通过托管服务向 service-worker.js 文件的标头添加 "Cache-Control": "no-cache"

例如,要在 Google Firebase 中完成此操作,您需要将以下内容添加到 firebase.json 配置中

{
  "hosting": {
    "headers": [
      { "source":"/service-worker.js", "headers": [{"key": "Cache-Control", "value": "no-cache"}] }
    ]
  }
}