我从上周开始对 PWA 进行研究我发现 Workbox 是一个很好的实现选择,我尝试使用 React+worbox+webpack 实现 PWA 我能够创建 App 图标,缓存 GET apis 数据但无法缓存服务器端用户图像和 POST api。如果有人发现这种方法不正确,请建议我实现 PWA 的最佳方法。我正在寻求帮助或指导,以帮助我完成最后期限。感谢您的帮助。提前致谢
包.json
"workbox-webpack-plugin": "^3.2.0"
webpack.config.js
var workboxPlugin = require('workbox-webpack-plugin');
plugins: [
new cleanPlugin([dist]),
new CopyWebpackPlugin([
// {output}/to/file.txt
{ from: path.join(__dirname,'/index.html'), to: path.join(__dirname, '', 'www'), },
{ from: path.join(__dirname,'/manifest.json'), to: path.join(__dirname, '', 'www'), },
{ from: path.join(__dirname,'/.htaccess'), to: path.join(__dirname, '', 'www'), },
{ from: path.join(__dirname,'/src/assets'), to: path.join(__dirname, '', 'www/src/assets') },
]),
new UglifyJSPlugin(),
new workboxPlugin.GenerateSW({
swDest: 'service-workers.js',
clientsClaim: true,
skipWaiting: true,
globDirectory: dist,
globPatterns: ['**/*.{html,js,css,png,svg,jpg,gif,json}'],
globIgnores: [
"**/node_modules/**/*"
],
runtimeCaching: [{
urlPattern: new RegExp('https://serverURl/api'),
handler: 'networkFirst',
options: {
cacheName: 'helloOne-api-cache',
networkTimeoutSeconds: 10
}
},
{
urlPattern: 'https://serverURl/images/users/(.*)',
handler: 'cacheFirst',
options: {
cacheName: 'helloOne-mk-images-cache',
expiration: {
maxEntries: 2,
maxAgeSeconds: 7 * 24 * 60 * 60,
}
}
}
]
})
]
]
索引.html
<link rel="manifest" href="manifest.json">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
清单.json
{
"short_name": "Welcome",
"name": "Welcome One",
"description": "WelcomeOne preproduction",
"icons": [
{
"src": "src/assets/images/apps/appicon_60x60.png",
"sizes": "60x60",
"type": "image/png"
},
{
"src": "src/assets/images/apps/appicon_72x72.png",
"sizes": "72x72",
"type": "image/png"
},
{
"src": "src/assets/images/apps/appicon_48x48.png",
"sizes": "48x48",
"type": "image/png"
},
{
"src": "src/assets/images/apps/appicon_36x36.png",
"sizes": "36x36",
"type": "image/png"
},
{
"src": "src/assets/images/apps/appicon_76x76.png",
"sizes": "76x76",
"type": "image/png"
},
{
"src": "src/assets/images/apps/appicon_96x96.png",
"sizes": "96x96",
"type": "image/png"
},
{
"src": "src/assets/images/apps/appicon_120x120.png",
"sizes": "120x120",
"type": "image/png"
},
{
"src": "src/assets/images/apps/appicon_152x152.png",
"sizes": "152x152",
"type": "image/png"
},
{
"src": "src/assets/images/apps/appicon_180x180.png",
"sizes": "180x180",
"type": "image/png"
},
{
"src": "src/assets/images/apps/appicon_512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"start_url": ".",
"display": "standalone",
"background_color": "#415160",
"theme_color": "#415160",
"gcm_sender_id": "103953800507"
}