在 App 中新增服務 Worker

首先,如果你正在諮詢 mobile.angular.io 標誌 - 移動裝置不再起作用。

首先,我們可以建立一個帶有角度 cli 的普通專案。

ng new serviceWorking-example
cd serviceWorking-example

現在重要的是,對於我們想要使用服務工作者的角度 cli 我們需要做的事情:

ng set apps.0.serviceWorker = true

如果由於某種原因你沒有安裝 @ angular / service-worker,你會看到一條訊息:

你的專案配置了 serviceWorker = true,但未安裝 @ angular / service-worker。執行 npm install --save-dev @angular/service-worker 並重試,或在 .angular-cli.json 中執行 ng set apps.0.serviceWorker=false

檢查 .angular-cli.json,你現在應該看到:serviceWorker:true

如果此標誌為 true,則將使用服務工作程式設定生產版本。

將生成一個 ngsw-manifest.json 檔案(或者在我們在專案的根目錄中建立一個 ngsw-manifest.json 的情況下進行擴充,通常這樣做是為了指定路由,將來這可能會自動完成)在 dist / root 中,服務工作者指令碼將被複制到那裡。將在 index.html 中新增一個簡短的指令碼來註冊服務工作者。

現在,如果我們在生產模式下構建應用程式 ng build –prod

件實交件實實件交實實實實似實件實件件件實交似件件實件實實實件交件交件實件件交交件

交交似實交交似實實件實件實實實件實實實交交交交實實件實件實件實件實件實實似似實件

  • 工人 basic.min.js
  • SW-register.HASH.bundle.js
  • NGSW-的 manifest.json

此外,index.html 現在包含這個 sw-register 指令碼,它為我們註冊一個 Angular Service Worker(ASW)

在瀏覽器中重新整理頁面(由 Web Server for Chrome 提供服務)

開啟開發者工具。實件實交交交交實實似實似似交交交實似

StackOverflow 文件

好現在服務工作者正在執行!

現在我們的應用程式應該載入更快,我們應該可以離線使用該應用程式。

現在,如果你在 chrome 控制檯中啟用了離線模式,你應該會看到 http:// localhost:4200 / index.html 中的應用程式無法連線到 Internet。

但是在 http:// localhost:4200 / 我們遇到問題並且它沒有載入,這是由於靜態內容快取只提供清單中列出的檔案。

例如,如果清單宣告瞭/index.html 的 URL,則快取會回覆對/index.html 的請求,但是對/或/ some / route 的請求將轉到網路。

這就是路由重定向外掛的用武之地。它從清單中讀取路由配置,並將配置的路由重定向到指定的索引路由。

目前,這部分配置必須是手寫的(19-7-2017)。最終,它將從應用程式源中存在的路由配置生成。

所以如果現在我們在專案的根目錄中建立或者 ngsw-manifest.json

{
  "routing": {
    "routes": {
      "/": {
        "prefix": false
      }
    },
    "index": "/index.html"
  }
}

我們再次構建我們的應用程式,現在當我們轉到 http:// localhost:4200 /時 ,我們應該重定向到 http:// localhost:4200 / index.html

有關路由的更多資訊,請閱讀此處官方文件

在這裡你可以找到有關服務人員的更多文件:

https://developers.google.com/web/fundamentals/getting-started/primers/service-workers

https://docs.google.com/document/d/19S5ozevWighny788nI99worpcIMDnwWVmaJDGf_RoDY/edit#

在這裡,你可以看到使用 SW 預快取庫實現服務的另一種方法:

https://coryrylan.com/blog/fast-offline-angular-apps-with-service-workers