offline-plugin 可以把我们的多页面应用进行缓存,即使这些html文件时独立的。
npm install offline --save-dev
在webpack打包的webpck.config.js中使用offline-plugin
const OfflinePlugin = require('offline-plugin');
module.exports = {
...
output:{
filename : ...
path: ...
publicPath: 'http://localhost:8080/'
}
plugins:[{
new OfflinePlugin({caches : 'all'})
}]
}
官方说一般情况下将offline-plugin作为最后一个. 需要指定publicPath 绝对路径。
在程序中安装runtime
const runtime = require('offline-plugin/runtime')
runtime.install();
runtime.applyUpdate();
之后打包出来的应用即使有多个页面,也只需请求一次 , 由ServiceWorker进行缓存, 每次我们在浏览器中进入这个网站时,浏览器都会检查有没有对应的ServiceWorker文件,如果有则将加载并启动ServiceWorker。
如果我们不进行 applyUpdate
那么本地缓存的资源将永远得不到更新直到清除浏览器缓存,显然是我们所不希望的。
假设我们用nginx服务,首先开启nginx,打开我们的页面,即使里面包含多个独立的html,打开完毕后关闭nginx,这时候我们点击网页剩余部分仍然可以请求,也就是仍然可用的假象。 这时候我们关闭这个页面而不退出浏览器,新建个tab再次请求这个页面,发现仍然可以请求。也就是我们的整个应用都被浏览器给缓存了。