这是我的任务:
gulp.task('service-worker', ['clean:sw'], function (cb) {
swPrecache.write(path.join(global.config.offlineRoot, 'sw.js'), {
staticFileGlobs: [
global.config.offlineRoot + '/offline/**/*.{js,html,css,png,jpg,jpeg,gif,svg,ttf,woff,woff2}',
global.config.offlineRoot + '/manifest.json'
],
dynamicUrlToDependencies: {
'/app-shell': ['lib/views/layouts/app-shell.hbs'],
'/': [
'lib/views/layouts/main-layout.hbs',
'lib/views/index.hbs'
]
},
runtimeCaching: [
{
// See https://github.com/GoogleChrome/sw-toolbox#methods
urlPattern: /^\/(?!login|admin)/,
handler: 'networkOnly'
}
],
stripPrefix: global.config.offlineRoot,
stripPrefixMulti: {
"node_modules/": 'scripts/'
},
navigateFallback: '/app-shell',
navigateFallbackWhitelist: [/^\/(?!login|admin)/],
cacheId: "nodebeats",
// importScripts: ['scripts/sw-toolbox/sw-toolbox.js'],
verbose: true,
maximumFileSizeToCacheInBytes: 3097152, //3mb
handleFetch: true//(global.config.env === 'prod')
})
.then(cb)
.catch(function () {
cb();
});});
从上面的配置中,登录和管理路由仅使用网络获取,索引路由首先从缓存中提供,但我希望它首先是网络,因为我是从服务器端绑定我的页面。
发布于 2016-09-07 01:08:22
对于需要在服务器上动态呈现web内容的用例,我不认为sw-precache是一个很好的选择。对于服务器呈现的资源的certain types,sw-precache可以派上用场,但只有当服务器呈现的内容依赖于一个或多个随后在服务器上组合的本地部分/模板时,才能派上用场。(您可以通过dynamicUrlToDependencies设置该映射。)
对于服务器呈现的内容依赖于本地模板/部分之外的其他内容的情况,比如它依赖于当前登录的用户,sw-precache将不会有太大帮助。如果您愿意,您可以直接使用sw-toolbox来处理这种类型的动态内容-类似于networkFirst策略的东西在网络连接时提供新的响应与在网络不可用时回退到先前缓存的响应之间取得了平衡。
https://stackoverflow.com/questions/39351426
复制相似问题