首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防火墙宿主(角8+服务工作人员)不更新刷新

防火墙宿主(角8+服务工作人员)不更新刷新
EN

Stack Overflow用户
提问于 2019-12-23 15:25:29
回答 1查看 1.6K关注 0票数 1

我拥有quackr.io,并且遇到了一些麻烦,用户没有看到我的代码的新版本。quackr是部署到Firebase主机上的PWA (角SSR +服务工作人员)。

每当我部署一个新版本时,任何以前看过该站点的人都会看到旧版本。如果您进行了严格的刷新,您将看到新的版本。但是,如果您进行另一次正常的页面刷新,它将恢复到旧版本。

  • 页面刷新:接收旧版本
  • 硬刷新:接收新版本(但当我再次进行正常刷新时立即获得旧版本)
  • 在chrome中取消注册服务工作人员并执行正常刷新:接收新版本(但在我进行第二次刷新时也会得到旧版本)。
  • 我已经清除了所有的浏览器缓存,cookie和存储。同样,这也适用于初始刷新,但不适用于任何后续刷新。

下面是我的firebase.json (我希望在服务工作器js中添加无缓存,它在部署时会失效,但它没有工作):

代码语言:javascript
复制
{
  "hosting": {
    "public": "dist/browser",
    "headers": [
    {
      "source": "/@(ngsw-worker.js|ngsw.json)",
      "headers": [
        {
          "key": "Cache-Control",
          "value": "no-cache"
        }
      ]
  } 
  ],
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "function": "ssr"
      }
    ]
  },
  "functions": {
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run lint",
      "npm --prefix \"$RESOURCE_DIR\" run build"
    ]
  }
}

ngsw-config.json:

代码语言:javascript
复制
{
  "index": "/index.html",
  "appData": {
    "name": "quackr.io",
    "description": "v2.0"
  },
  "assetGroups": [{
    "name": "app",
    "installMode": "prefetch",
    "resources": {
      "files": [
        "/favicon.ico",
        "/index.html",
        "/*.css",
        "/*.js"
      ]
    }
  }, {
    "name": "assets",
    "installMode": "lazy",
    "updateMode": "prefetch",
    "resources": {
      "files": [
        "/assets/**"
      ]
    }
  },
  {
    "name": "fonts",
    "resources": {
      "urls": [
        "https://fonts.googleapis.com/**"
      ]
    }
  }]
}

https://quackr.io/ngsw-worker.js

任何帮助都将不胜感激,谢谢各位!

EN

回答 1

Stack Overflow用户

发布于 2019-12-23 15:34:11

您将需要使用Angular的服务工作人员更新功能,该功能将监视应用程序中的任何新更改,然后刷新页面或通知用户更新,并给予他们刷新自己的选项:

参见此示例:

代码语言:javascript
复制
constructor(
        private swUpdate: SwUpdate,
        private snackbar: MatSnackBar
    ) {
        this.swUpdate.available.subscribe(evt => {
            const snack: any = this.snackbar.open(`Updates Available`, 'Reload');

            snack.onAction().subscribe(() => {
                window.location.reload();
            });

            snack.setTimeout(() => {
                snack.dismiss();
            }, 6000);
        });
    }

原始文件:

https://angular.io/api/service-worker/SwUpdate

更多信息:

https://alligator.io/angular/service-worker-updates/

这是我的Firebase.json文件

代码语言:javascript
复制
{
  "hosting": {
    "public": "dist/myApp",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "headers": [
      {
        "source": "**/*.@(eot|otf|ttf|ttc|woff|woff2|font.css)",
        "headers": [
          {
            "key": "Access-Control-Allow-Origin",
            "value": "max-age=31557600"
          }
        ]
      },
      {
        "source": "**/*.@(js|css)",
        "headers": [
          {
            "key": "Cache-Control",
            "value": "max-age=31557600"
          }
        ]
      },
      {
        "source": "**/*.@(svg|ico|json|mp3)",
        "headers": [
          {
            "key": "Cache-Control",
            "value": "max-age=31557600"
          }
        ]
      }
    ],
    "rewrites": [
      {
        "source": "**",
        "function": "ssr"
      }
    ]
  },
  "functions": {
    "predeploy": [
      "npm --prefix %RESOURCE_DIR% run lint",
      "npm --prefix %RESOURCE_DIR% run build"
    ],
    "source": "functions"
  },
  "emulators": {
    "functions": {
      "port": "5005"
    }
  },
  "firestore": {
    "rules": "firestore.rules",
    "indexes": "firestore.indexes.json"
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59457689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档