Angular 6 service worker 正在缓存 font-awesome 图标,无法在离线模式下检索它们

Angular 6 service worker is caching font-awesome icons, can't retrieve them in offline mode

我对 font-awesome 和 PWA 离线模式有疑问。当我的应用程序加载时,它会缓存构建的生产包中的所有内容,以及超棒的字体文件。

当我切换到 "offline" 模式时出现问题,然后所有 font-awesome 文件都收到 504 网关超时错误,尽管它们缓存在服务工作者中。

Font awesome css 是从节点模块导入的。

ngsw-config.json 构建前

{
"index": "/index.html",
"assetGroups": [
    {
        "name": "blackboard-app",
        "installMode": "prefetch",
        "resources": {
            "files": [
                "/fontawesome-webfont*",
                "/favicon.ico", 
                "/index.html",
                "/*.js",
                "/*.css",
                "/*.bundle.css", 
                "/*.bundle.js", 
                "/*.chunk.js",
                "/!main*.js"
            ],
            "urls": ["https://fonts.googleapis.com/icon?family=Material+Icons"]
        }
    },
    {
        "name": "assets",
        "installMode": "prefetch",
        "updateMode": "prefetch",
        "resources": {
            "files": [
                "/assets/**",
                "/assets/logo/*",
                "/assets/logo/logo.svg",
                "/*.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)"
            ]
        }
    }
]
}

ngsw-config.json 构建后

  {
"configVersion": 1,
"index": "/index.html",
"assetGroups": [
  {
    "name": "blackboard-app",
    "installMode": "prefetch",
    "updateMode": "prefetch",
    "urls": [
      "/12.25bb4625035aa983286c.js",
      "/13.493b0945aa3e48329f0c.js",
      "/14.2fc43f30a2a3b5c66cc6.js",
      "/15.3f977c68e010d85b993e.js",
      "/16.f3761394d6b60e948cc1.js",
      "/17.eab8f1a5c9827a594f1a.js",
      "/18.111d970245c46f8c6e27.js",
      "/19.f405adc50755f6bc8feb.js",
      "/2.6976c64cb62cd456d4bd.js",
      "/20.f7980e50fde809527317.js",
      "/21.4915c7ddea43587e6614.js",
      "/22.11c6cecea349cd960e2b.js",
      "/3.e753f18ca29a1c70a074.js",
      "/4.342862d374ddf89b8767.js",
      "/5.04c193b1fe7a4b549c88.js",
      "/6.82ca647ade8c794f0fc5.js",
      "/7.7069b7766f8363eb04e9.js",
      "/common.68d2f017a7dae628e8c5.js",
      "/es2015-polyfills.1c08ca914fb3a70a67ba.js",
      "/favicon.ico",
      "/fontawesome-webfont.674f50d287a8c48dc19b.eot",
      "/fontawesome-webfont.912ec66d7572ff821749.svg",
      "/fontawesome-webfont.af7ae505a9eed503f8b8.woff2",
      "/fontawesome-webfont.b06871f281fee6b241d6.ttf",
      "/fontawesome-webfont.fee66e712a8a08eef580.woff",
      "/index.html",
      "/main.f08efb7a056c489b1b70.js",
      "/polyfills.e93ae6dbbd46cede4a3a.js",
      "/runtime.593a2fc9b4061ec94713.js",
      "/scripts.ccad1d9b2f6939a49dad.js",
      "/styles.1b1d0abb44dcb4d40a0d.css"
    ],
    "patterns": [
      "https:\/\/fonts\.googleapis\.com\/icon\?family=Material\+Icons"
    ]
  },
  {
    "name": "assets",
    "installMode": "prefetch",
    "updateMode": "prefetch",
    "urls": [
      "/assets/bg/bg.png",
      "/assets/button/new.png",
      "/assets/button/new.svg",
      "/assets/button/watch-white.svg",
      "/assets/button/watch.svg",
      "/assets/icon/Absence_1.svg",
      "/assets/icon/Absence_2.svg",
      "/assets/icon/Absence_3.svg",
      "/assets/icon/Absence_4.svg",
      "/assets/icon/eating_0.svg",
      "/assets/icon/eating_0_empty.svg",
      "/assets/icon/eating_1.svg",
      "/assets/icon/eating_1_empty.svg",
      "/assets/icon/eating_2.svg",
      "/assets/icon/eating_2_empty.svg",
      "/assets/icon/eating_3.svg",
      "/assets/icon/eating_3_empty.svg",
      "/assets/icon/eating_4.svg",
      "/assets/icon/eating_4_empty.svg",
      "/assets/images/g_logo.png",
      "/assets/images/karta_numer_min1.png",
      "/assets/images/karta_numer_min_thumb.png",
      "/assets/logo/logo.png",
      "/assets/logo/logo.svg",
      "/assets/logo/logo_kids.png",
      "/assets/manifest/ep-192x192.png",
      "/assets/manifest/ep-192x192_alternative.png",
      "/assets/manifest/ep-192x192_white.png"
    ],
    "patterns": []
  }
],
"dataGroups": [],
"hashTable": {
  "/12.25bb4625035aa983286c.js": "d85b3e1aca84a87856a4c8c3d4ffc74be4abba3d",
  "/13.493b0945aa3e48329f0c.js": "276e65200141c59d50dac5cb33adda22d2a6bcc6",
  "/14.2fc43f30a2a3b5c66cc6.js": "2e16036ee67b768cc564993337057def3acccc58",
  "/15.3f977c68e010d85b993e.js": "39a8ba74f671f6b24e5ab6d35f21a164f77866c0",
  "/16.f3761394d6b60e948cc1.js": "87eff94c9c15daaaf6c4619a372a60fae9994552",
  "/17.eab8f1a5c9827a594f1a.js": "cda7bfdd20014ebe5e13b3f141cd31415a1e3ffd",
  "/18.111d970245c46f8c6e27.js": "55fd5e02d80e8b3385e1aa335dc597cdd3fa0e36",
  "/19.f405adc50755f6bc8feb.js": "18600d2bd1448a9b6c0e9475e83895a3d37becc9",
  "/2.6976c64cb62cd456d4bd.js": "1c71d12f908cc42d9b5267be1da747c5cf0cd0d2",
  "/20.f7980e50fde809527317.js": "f6f6c10b30d62e54c2a2ad1bd66f8f3e41661393",
  "/21.4915c7ddea43587e6614.js": "1dcaf73e75071a69bc0a3beec886d8d68b1853a5",
  "/22.11c6cecea349cd960e2b.js": "9dc64f5af2110a1c199b005d6e32cc55b7cc78cb",
  "/3.e753f18ca29a1c70a074.js": "329a5e0394cf14ed8c8be106bdd219f44545a3a7",
  "/4.342862d374ddf89b8767.js": "e4198adff93d1f1687d23880bb86db75117301e6",
  "/5.04c193b1fe7a4b549c88.js": "245c18593d1166323ec2c0a800db49ab6da53cf6",
  "/6.82ca647ade8c794f0fc5.js": "a1aa9fc0c2b1665982f8b2875d283d0551990656",
  "/7.7069b7766f8363eb04e9.js": "80816daee7e4f7517566b15280d4bce6106dc271",
  "/assets/bg/bg.png": "e49d1e8293172e0d48713a93e2235abbd12555a2",
  "/assets/button/new.png": "65829ad4727b2fc5dc2b3bc062e0ed635acf5723",
  "/assets/button/new.svg": "b56b744cf78fbb60b5fad3cc98982ee84e090e22",
  "/assets/button/watch-white.svg": "85c53dabf87c6436033bee3f8bf3baf94503610c",
  "/assets/button/watch.svg": "850222e29dedf53834bafca514f9d6817d2d446e",
  "/assets/icon/Absence_1.svg": "2db1ea93dae300caebfc527acb9fa0fbafb3bd9c",
  "/assets/icon/Absence_2.svg": "f6dbaf15186913cd22ca94fe4e31cdcdde1b43a3",
  "/assets/icon/Absence_3.svg": "f72b5e22de3956bc02a636ee7984f4ab120ffee9",
  "/assets/icon/Absence_4.svg": "355888cfb00f0a9a6b616c2da355e80cdc3c6d85",
  "/assets/icon/eating_0.svg": "c47672f723507317e3e1434efaa5a01fe4154d32",
  "/assets/icon/eating_0_empty.svg": "e8f045fcc76d24cd8fb06c80d31f10320e1e1ae8",
  "/assets/icon/eating_1.svg": "df226958df581c8d06e4d5b82f1edca35cbd5d4b",
  "/assets/icon/eating_1_empty.svg": "d4773117471e5a60c59dfcbc5e54059880206554",
  "/assets/icon/eating_2.svg": "8b9c5f654e2f172f26f797d69e9c2617cc2dab14",
  "/assets/icon/eating_2_empty.svg": "eb92371a392eecd4dc3aa97b7c8dd904e0c9a573",
  "/assets/icon/eating_3.svg": "5ae77a1a1a6fa303800d14548ef8df0172c0cf0c",
  "/assets/icon/eating_3_empty.svg": "109a44345bf6b60feb64e21810733b00f2743f71",
  "/assets/icon/eating_4.svg": "bab3d743c997daa5c3a4947f6de2a55cfa1b804c",
  "/assets/icon/eating_4_empty.svg": "111abf9d2f66eb751ceb54932f783141aad24267",
  "/assets/images/g_logo.png": "03f0aafffea0bd629d4f6165a10d715c511cc8b8",
  "/assets/images/karta_numer_min1.png": "75bdd569752728ae4d9f01346dc3b4e60c6afde0",
  "/assets/images/karta_numer_min_thumb.png": "afa37cf8bdcee35d0848c45ce6ec3aec78af7259",
  "/assets/logo/logo.png": "c7511c629524498d06c1ba92253ee746138174f9",
  "/assets/logo/logo.svg": "200ab18c82fdc093c77d8a0b6025ae65c1c6dcf9",
  "/assets/logo/logo_kids.png": "8b8a0098b22e5b6a35486cc2712b6c52021e7053",
  "/assets/manifest/ep-192x192.png": "ef3ddf5e16da1eb36a4422c228d74a3d3f42bd51",
  "/assets/manifest/ep-192x192_alternative.png": "03d4da1ddd197187eb6c44b9a3dbb23222fd3824",
  "/assets/manifest/ep-192x192_white.png": "1c3bc28f1f65a898afab961e469c2466e8223c92",
  "/common.68d2f017a7dae628e8c5.js": "ab6f881f1c78238eadad9853ff10e55965285311",
  "/es2015-polyfills.1c08ca914fb3a70a67ba.js": "05a1a4e4b56c2b2f44ef68df1a3ce7b6c967bcd4",
  "/favicon.ico": "0bd4abdc42baf6ddbc290b0141ea9454ae9b5c9d",
  "/fontawesome-webfont.674f50d287a8c48dc19b.eot": "d980c2ce873dc43af460d4d572d441304499f400",
  "/fontawesome-webfont.912ec66d7572ff821749.svg": "98a8aa5cf7d62c2eff5f07ede8d844b874ef06ed",
  "/fontawesome-webfont.af7ae505a9eed503f8b8.woff2": "d6f48cba7d076fb6f2fd6ba993a75b9dc1ecbf0c",
  "/fontawesome-webfont.b06871f281fee6b241d6.ttf": "13b1eab65a983c7a73bc7997c479d66943f7c6cb",
  "/fontawesome-webfont.fee66e712a8a08eef580.woff": "28b782240b3e76db824e12c02754a9731a167527",
  "/index.html": "d269d3ad97704bb1d9ec0697b982d5d81354c9c5",
  "/main.f08efb7a056c489b1b70.js": "8d4e5835f4090a1756f72d0a48a0a0e1f12f427b",
  "/polyfills.e93ae6dbbd46cede4a3a.js": "4cdade4d3cfbdb7268ac6be842fd9fe6c1aa022f",
  "/runtime.593a2fc9b4061ec94713.js": "238d319c42f8c621a7423d356b293ef616a2e55c",
  "/scripts.ccad1d9b2f6939a49dad.js": "9352e22b1253460ed54cc39e6df658a4e4c6bc54",
  "/styles.1b1d0abb44dcb4d40a0d.css": "d2972a867b27577a39a9c1625d50e98f43bef461"
},
"navigationUrls": [
  {
    "positive": true,
    "regex": "^\/.*$"
  },
  {
    "positive": false,
    "regex": "^\/(?:.+\/)?[^/]*\.[^/]*$"
  },
  {
    "positive": false,
    "regex": "^\/(?:.+\/)?[^/]*__[^/]*$"
  },
  {
    "positive": false,
    "regex": "^\/(?:.+\/)?[^/]*__[^/]*\/.*$"
  }
]
}

来自缓存的开发工具屏幕

我进入离线模式的实际错误

您需要允许所有以 fontawesome-webfont 开头的网址,如下面的代码所示。

将此添加到您的 ngsw-config.json 文件

    {
  "name": "assets",
  "installMode": "prefetch",
  "updateMode": "prefetch",
  "resources": {
    "files": [
      "/assets/**",
      "/fontawesome-webfont*",
      "/*.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)"
    ]
  }
}

我遇到了和你一样的错误,我无意中发现了这个 post。仔细查看错误后,我注意到 url 末尾有查询参数,用于字体真棒字体。您不必将 "/fontawesome-webfont*" 添加到文件数组。 "/*.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)" 应该已经涵盖了很棒的字体。诀窍是配置 service worker 忽略查询参数,如下所示:

        {
            "name": "assets",
            "installMode": "lazy",
            "updateMode": "prefetch",
            "resources": {
                "files": [
                    "/assets/**",
                    "/*.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)"
                ]
            },
            "cacheQueryOptions": { "ignoreSearch": true }
        }