chapter
├─babel.config.js
├─package-lock.json
├─package.json
├─postcss.config.js
├─src
| ├─index.html
| └index.js
├─build
| ├─webpack.common.js
| ├─webpack.dev.js
| └webpack.prod.js
为了模拟线上的服务器运行环境,我们先来安装一个http-server
。
安装:
$ npm install http-server -D
配置一个脚本命令start
:
"scripts": {
"dev": "webpack serve --config ./build/webpack.common.js",
"build": "webpack --env production --config ./build/webpack.common.js",
"start": "http-server dist"
},
编写一段代码:
console.log("Hello Word!");
这个时候npm run start
编译后控制台就会给我们一个本地服务器的地址,我打开这个地址项目就能看到console.log
了一个字符串。
接着我们把start
的服务终止掉,然后刷新页面就无法继续访问页面了。
我们可以利用workbox-webpack-plugin
(PWA
)来设置项目的缓存,即使服务器停止不能使用了,项目页依然可以运行。
安装:
$ npm install workbox-webpack-plugin -D
配置workbox-webpack-plugin
:
// ...
const { GenerateSW } = require("workbox-webpack-plugin")
module.exports = {
plugins: [
new GenerateSW({
clientsClaim: true,
skipWaiting: true
})
]
}
新增一段代码:
console.log("Hello Word!");
// 如果浏览器支持 serviceWorker
if ("serviceWorker" in navigator) {
window.addEventListener("load", () => {
navigator.serviceWorker.register("/service-worker.js")
.then(registration => {
console.log("service-worker registed")
}).catch(error => {
console.log("service-worker register error")
})
})
}
等配置好Webpack
配置文件后重新运行 npm run build
生成新的业务代码,再运行npm run start
启动服务器,这个时候就能看到页面输出了 service-worker registed
随后我们接着终止start
服务然后刷新页面发现页面依然能输出Hello Word
。