Polymer 服务人员:如何建立;新鲜的;每个新部署的网站版本? 问题

Polymer 服务人员:如何建立;新鲜的;每个新部署的网站版本? 问题,polymer,service-worker,firebase-polymer,polymer-cli,sw-precache,Polymer,Service Worker,Firebase Polymer,Polymer Cli,Sw Precache,我在生产中遇到了一个网站(使用模板构建)的问题,该网站提供旧版本的代码,尽管我进行了新的和改进的部署 我正在使用Polymer CLI$Polymer build命令以及Firebase Tools$Firebase deploy命令来推动对Firebase主机的更改。部署完成后,我导航到该网站,只看到未更新的更改: Chrome:我首先看到网站的旧版本,必须“硬刷新”才能显示更改 FireFox:我首先看到了网站的旧版本,必须“硬刷新”才能显示更改 以下是拍摄前和拍摄后的照片: 服务

我在生产中遇到了一个网站(使用模板构建)的问题,该网站提供旧版本的代码,尽管我进行了新的和改进的部署

我正在使用Polymer CLI
$Polymer build
命令以及Firebase Tools
$Firebase deploy
命令来推动对Firebase主机的更改。部署完成后,我导航到该网站,只看到未更新的更改:

  • Chrome:我首先看到网站的旧版本,必须“硬刷新”才能显示更改

  • FireFox:我首先看到了网站的旧版本,必须“硬刷新”才能显示更改


以下是拍摄前和拍摄后的照片:


服务人员工作流? 我正试图找出最好的工作流程是什么。我想设置一些东西,以便每次我进行新的部署时,整个站点都会被清除,服务人员会通过互联网站重置自己,我将100%确保现有用户将获得新部署的体验

无需硬刷新或使用匿名模式


我应该。。。
  • 删除service worker并部署没有它的新版本(坏主意)
  • 在Firebase控制台中创建“新项目”并重新链接自定义域(繁琐)
  • 找到“魔术按钮”按下Firebase控制台内部重置(是否存在)
  • 编辑
    sw precache config.js
    文件(不确定如何编辑)
  • $polymer build
    中处理此问题,以配置
    sw precache
    (不确定如何配置)
  • 一些很棒的东西,甚至连
    都不知道\_(ツ)_/“

我知道问题存在于
sw precache config.js
文件中,但我不确定这是否是我应该解决的地方



服务人员是一个了不起的工具,我绝对希望在我的项目中使用它。我只需要学习如何驯服野兽。

我不知道聚合物,但这是我通常与服务人员一起使用的流程。
-在客户端,我检查是否有更新,如果用户想要更新,应用程序会通知用户。
-用户接受新版本,然后客户端向sw发送一条消息,发送至skipWating
client.js:

navigator.serviceWorker.register('/serviceWorker.js').then(function(reg) {
    reg.addEventListener('updatefound', function() {

      reg.installing.addEventListener('statechange', function() {

        if (reg.installing.state == 'installed') {
          // Notify the user, there is a app new version.
          // User accept
           reg.installing.postMessage({msg: 'skipwaiting'});
        }
      });
    });
});
-在“服务人员”对话框中,倾听消息,如果用户接受新版本,则跳过。
serviceWorker.js:

self.addEventListener('message', function(event) {
  if (event.data.msg === 'skipwaiting') {
    self.skipWaiting();
  }
});
let refreshing;

navigator.serviceWorker.addEventListener('controllerchange', function() {
    if (refreshing) 
    return;
    window.location.reload();
    refreshing = true;
});
客户端在服务工作人员更改状态后刷新应用程序。 client.js:

self.addEventListener('message', function(event) {
  if (event.data.msg === 'skipwaiting') {
    self.skipWaiting();
  }
});
let refreshing;

navigator.serviceWorker.addEventListener('controllerchange', function() {
    if (refreshing) 
    return;
    window.location.reload();
    refreshing = true;
});

也许这可以给你一个主意。

我最后设置了两个处理程序:“网络优先”,它解决了这个问题。这一直是我的计划……但在我开始转动旋钮之前,我想问几个问题