Angular CLI PWA-仅ngsw-config缓存CSS中引用的图像

时间:2019-09-19 08:03:45

标签: caching angular-cli progressive-web-apps angular-service-worker ng-build

所以这是一个奇怪的问题,我似乎无法找到任何在线参考。希望这里的人可以阐明以下内容以及可能的解决方法-

我有一个符合Google PWA要求的Angular CLI应用程序。一切都按预期工作,但是某些图像不会被服务工作者缓存。

这是我的ngsw-config.json-

    {
  "$schema": "./node_modules/@angular/service-worker/config/schema.json",
  "index": "/index.html",
  "assetGroups": [
    {
      "name": "app",
      "installMode": "prefetch",
      "resources": {
        "files": [
          "/favicon.ico",
          "/index.html",
          "/*.css",
          "/*.js",
          "../assets/signalR/appHub.js",
          "../admin/images/**",
          "../manifest/manifest.json"
        ],
        "urls": [
          "/api/WhoAmI",
          "/api/GetApps"
        ]
      }
    }, {
      "name": "assets",
      "installMode": "lazy",
      "updateMode": "prefetch",
      "resources": {
        "files": [
          "/assets/**",
          "/*.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)",
          "../admin/images/**"
        ]
      }
    }
  ]
}

在admin / images文件夹中,有一些背景图像,徽标,微调器,图标等。 但是,当我运行'ng-build --prod'时,唯一被缓存的图像是CSS中引用的图像(背景图像)。放在页面本身上的任何内容都将被忽略。

这将导致没有徽标或图标的离线页面。

查看生成的“ dist”文件夹,将“工作”图像文件复制并赋予一个随机后缀。 Generated image files

在生成的ngsw.json文件中,这些是唯一引用的图像,没有提及丢失的徽标等。

{
  "configVersion": 1,
  "timestamp": 1568879436433,
  "index": "/index.html",
  "assetGroups": [
    {
      "name": "app",
      "installMode": "prefetch",
      "updateMode": "prefetch",
      "urls": [
        "/favicon.ico",
        "/index.html",
        "/main-es2015.b125878abf05e7d82b63.js",
        "/main-es5.6e9e620d3fbd96496f98.js",
        "/polyfills-es2015.4d31cca2afc45cfd85b5.js",
        "/polyfills-es5.2219c87348e60efc0076.js",
        "/runtime-es2015.703a23e48ad83c851e49.js",
        "/runtime-es5.465c2333d355155ec5f3.js",
        "/scripts.f616c8c0191ed4649bce.js",
        "/styles.a4be089a70c69f63e366.css"
      ],
      "patterns": [
        "\\/api\\/WhoAmI",
        "\\/api\\/GetApps"
      ]
    },
    {
      "name": "assets",
      "installMode": "lazy",
      "updateMode": "prefetch",
      "urls": [
        "/assets/signalR/appHub.js",
        "/bgrounds-geometric-black.8d983f6875c006eda992.png",
        "/bgrounds-geometric-red.1484266e3058319624bd.png",
        "/block-spinner-dark.20f05a2ddef506c61f4d.gif",
        ...
    }
    ...
}

有人能揭开这个神秘面纱吗?

很抱歉,这个问题很长,但是,如果您到此为止,谢谢:)

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

通过弄乱一些不同的东西,我发现了一种解决方法-不能解释为什么它最初不能正常工作。

似乎我的文件夹从admin/images重命名为assets/images并更新了相关的resource > files paths使其正常工作。

如果有人偶然发现了更多有关此原因的见解,请告诉我。

谢谢, 罗布

答案 1 :(得分:-1)

我在 ngsw-config.json 中添加了以下行

"/runtime*",
"/main*",
"/style*",
"/polyfill*"

之后是这个样子

{
  "index": "/index.html",
  "assetGroups": [
    {
      "name": "app",
      "installMode": "prefetch",
      "resources": {
        "files": [
          "/runtime*",
          "/main*",
          "/style*",
          "/polyfill*",
          "/favicon.ico",
          "/index.html",
          "/css",
          "/js"
        ]
      }
    }, {

然后就成功了。