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

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

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

與 Service Worker 互動

register-service-worker npm 套件作為依賴項新增至您的 package.json 檔案中(如果尚未存在)。

/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 會指示 Vite 為您自動產生 SSL 憑證。然而,如果您想要為您的 localhost 建立自己的憑證,請查看 Filippo 的這篇部落格文章。然後您的 quasar.config file > devServer > https 應該看起來像這樣

/quasar.config 檔案

devServer: {
  https: {
    // Use ABSOLUTE paths or path.join(__dirname, 'root/relative/path')
    // https://node.dev.org.tw/api/https.html#https_https_createserver_options_requestlistener
    key: "/path/to/server.key",
    pfx: "/path/to/server.pfx",
    cert: "/path/to/server.crt",
    ca: "/path/to/ca.pem",
    passphrase: 'vite-dev-server' // do you need it?
  }
}

關於 Vite 和 HTTPS 的更多資訊請參閱 這裡

重要的託管設定

重要的是您不要允許瀏覽器快取 Service Worker 檔案 (預設為:sw.js)。因為否則,對於從快取載入 service-worker 的瀏覽器來說,此檔案或您的應用程式的更新可能會被忽略。

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

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

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