為何捐款
API 瀏覽器
升級指南
NEW!
quasar.config 檔案
轉換為搭配 Webpack 的 CLI
瀏覽器相容性
支援 TypeScript
目錄結構
命令列表
CSS 預處理器
路由
延遲載入 - 代碼分割
處理資源
啟動檔案
預取功能
API 代理
處理 Webpack
處理 process.env
使用 Pinia 的狀態管理
使用 Vuex 的狀態管理
Linter
測試與稽核
開發行動應用程式
Ajax 請求
對外公開開發伺服器
Quasar CLI with Webpack - @quasar/app-webpack
處理 Service Worker

在這裡,您將學習如何從您的網站/應用程式空間內與 Service Worker 互動。請記住,Service Worker 必須透過 HTTPS 提供服務

重要的是要注意,Service Worker(由 Workbox 自動產生,或者您已將 Quasar CLI 設定為使用您的自訂 Service Worker)在單獨的執行緒中執行。但是,您可以從應用程式空間內,從 /src-pwa/register-service-worker.js 檔案中與其互動。

與 Service Worker 互動

在您的 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 期間載入您的 Service Worker。您會看到有兩個腳本無法載入。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 的瀏覽器,對此檔案或您的應用程式的更新可能會被忽略。

這就是為什麼您必須始終確保將 "Cache-Control": "no-cache" 新增到透過您的託管服務提供的 service-worker.js 檔案的標頭中。

作為 Google Firebase 如何完成此操作的範例,您可以將以下內容新增到 firebase.json 設定中

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