PWA:渐进式网络开发应用程序(离线可访问)
workbox ---> workbox-webpack-plugin
操作步骤
第一步:
npm i workbox-webpack-plugin
第二步:在webpack.config.js中使用
const WorkboxWebpackPlugin = require('workbox-webpack-plugin') module.exports = { plugins:[ new WorkboxWebpackPlugin.GenerateSW({ //1.帮助serviceworker快速启动 //2.删除旧的serviceworker //生成一个 serviceworker 配置文件 clientsClaim:true, skipWaiting:true }) ] }
第三步: 在index.js(入口文件)
分析:判断'serviceworker' 是否在navigator全局变量中,当load全局加载完之后,就去注册构建好的'service-worker.js'
//注册serviceWorker //处理兼容性问题 if('serviceWorker' in navigator) { window.addEventListener('load',() => { navigator.serviceWorker.register('/service-worker.js') .then(()=>{ console.log('sw注册成功了~') }).catch(()=>{ console.log('sw注册失败了') }) }) }
第四步: 会有一点小问题
分析:
1/但是eslint 不认识 window, navigator全局变量
解决:需要修改package.json中eslintConfig配置
"env":{ "browser":true //支持浏览器全局变量 }
2/ sw代码必须运行在服务器上
--> nodejs
-->npm i serve -g
server -s build 启动服务器,将build目录下所有资源作为静态资源暴露出去