问题
我在生产中遇到了一个网站(构建的w/ 聚合物车间模板)的问题,尽管我的新部署和改进了的部署,它仍然在为旧版本的代码提供服务。
我使用Polymer $ polymer build
命令沿w/ Firebase Tools $ firebase deploy
命令将更改推到Firebase宿主。部署完成后,我导航到网站,只会看到未更新的更改:
以下是拍摄前n‘之后的照片:
服务工作流程?
我想弄清楚什么是最好的工作流程。我想设置好这样,每次我进行新的部署时,整个站点都被清除干净,服务人员通过网际网重新设置自己,我将100%地确定现有用户将获得新部署的体验。
无需硬刷新或使用隐名模式。
我该不该..。
sw-precache-config.js
文件(不确定如何编辑)?$ polymer build
中处理此操作以配置sw-precache
(不确定如何配置)?¯\_(ツ)_/¯
的东西?我知道sw-precache-config.js
文件中存在问题,但我不确定这是否应该修复这个问题。
module.exports = {
staticFileGlobs: [
'/index.html',
'/manifest.json',
'/bower_components/webcomponentsjs/webcomponents-lite.min.js',
'/images/*'
],
navigateFallback: '/index.html',
navigateFallbackWhitelist: [/^(?!.*\.html$|\/data\/).*/],
runtimeCaching: [
{
urlPattern: /\/data\/images\/.*/,
handler: 'cacheFirst',
options: {
cache: {
maxEntries: 200,
name: 'items-cache'
}
}
},
{
urlPattern: /\/data\/.*json/,
handler: 'fastest',
options: {
cache: {
maxEntries: 100,
name: 'data-cache'
}
}
}
]
};
服务人员是一个了不起的工具,我绝对希望它在我的项目。我只需要学习如何驯服野兽。
发布于 2016-11-05 21:55:12
我不知道聚合物,但这是我通常做的服务人员的流程。
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'});
}
});
});
});
-In --如果用户接受新版本,服务工作者将侦听消息、和skipWating。
serviceWorker.js:
self.addEventListener('message', function(event) {
if (event.data.msg === 'skipwaiting') {
self.skipWaiting();
}
});
客户端在服务工作人员具有更改状态后刷新应用程序。client.js:
let refreshing;
navigator.serviceWorker.addEventListener('controllerchange', function() {
if (refreshing)
return;
window.location.reload();
refreshing = true;
});
也许这能给你个主意。
https://stackoverflow.com/questions/40446098
复制相似问题