react-juejin
react-juejin copied to clipboard
PWA功能是还有bug?
我用手机打开第二次 必须要网才行?
new SWPrecacheWebpackPlugin({
dontCacheBustUrlsMatching: /\.\w{8}\./,
filename: 'service-worker.js',
minify: true,
navigateFallback: '/', // 无效的
navigateFallbackWhitelist: [/^(?!\/__).*/],
staticFileGlobsIgnorePatterns: [
/\.map$/,
/server\.ejs/,
/asyncCommonCss\.json/,
/react-loadable\.json/,
/page/
],
stripPrefix: 'dist',
staticFileGlobs: [
'dist/' + require('./dll/bundle-conf').base.js
],
mergeStaticsConfig: true,
runtimeCaching: [
{
urlPattern: /static\/(css|js)\/page/,
handler: 'cacheFirst'
},
{
urlPattern: /\/.*/,
handler: 'networkFirst'
}
]
})
那是因为首次进入页面只缓存了initial
入口的静态资源,在staticFileGlobsIgnorePatterns
中配置了忽略资源的规则,/page/
忽略做路由按需加载的文件(我是以page-
开头命名异步chunkname的),之后才在runtimeCaching
中做了动态缓存
{
urlPattern: /static\/(css|js)\/page/,
handler: 'cacheFirst'
},
所以首次进入页面时,该页面需要的资源还没全部加载好,第二次刷新后才能动态缓存到,也就是说第二次刷新了才能离线访问
另外,如果某个页面只是通过前端路由跳转过,而没有刷新过,那只是缓存了这个页面的数据,离线状态下也只能通过前端路由访问,直接刷新是不行的,因为我没有为找不到的url
提供一个默认入口,这是服务端渲染的项目,不像spa
都是以固定的index.html
作为入口,然后可以从index.html
加载文件,解析路由渲染页面,暂时还没有好的解决方法,要是有什么想法的话,可以提出来一起讨论下