service-worker - 如何使用 Workbox-build 为 Service Worker 生成带有版本控制的预定义清单
问题描述
我正在尝试配置workbox-build以创建服务工作者(generateSW )或根据预定义的 URL 列表而不是模式匹配向现有服务工作者注入清单(injectManifest ),以便在应用程序加载时预缓存特定资源.
不是这样的:
const { generateSW } = require('workbox-build');
const swDest = 'app/cache-sw.js';
generateSW({
globDirectory: "app/",
globPatterns: [
"**/*.{html,js,png,css,json,txt,ico,config}"
]
swDest
}).then(({ count, size }) => {
console.log(`Generated ${swDest}, which will precache ${count} files, totaling ${size} bytes.`);
});
但像这样:
const { generateSW } = require('workbox-build');
const swDest = 'app/cache-sw.js';
generateSW({
globDirectory: "app/",
manifestURLs: [
"/index.html",
"/favicon.ico",
"/info.txt",
...
],
swDest
}).then(({ count, size }) => {
console.log(`Generated ${swDest}, which will precache ${count} files, totaling ${size} bytes.`);
});
这样自动生成的 service worker 就会包含一个类似这样的清单:
[
{
"url": "/index.html",
"revision": "487659b6e9c542e7cd8227e0e9d0bed1"
},
{
"url": "/favicon.ico",
"revision": "29459c5d9c542e7cd8227e0e9d0if83"
},
{
"url": "/info.txt",
"revision": "73932c5d9c542e7cd8227e0e9z7el19"
},
...
]
并且在构建期间资源更改时会更新修订,以便下次加载时浏览器中的缓存无效。
提前致谢!
解决方案
没有任何通配符的glob
模式应该匹配文字文件名。您应该能够通过使用这些文件名作为传递给的值来完成您描述的内容globPatterns
:
const { generateSW } = require('workbox-build');
const swDest = 'app/cache-sw.js';
generateSW({
globDirectory: "app/",
globPatterns: [
"index.html",
"favicon.ico",
"info.txt",
...
]
swDest
}).then(({ count, size }) => {
console.log(`Generated ${swDest}, which will precache ${count} files, totaling ${size} bytes.`);
});
推荐阅读
- python-3.x - 查询 S3 存储桶文件日期的 Boto3 脚本速度很慢
- python - 调用随机方法时,MagicMock 如何避免抛出 AttributeError?
- c - 当我尝试重新创建管道/分叉一个新进程时,进程卡住了
- excel - Excel VBA:将单元格中的分隔字符串与值列进行比较
- java - 使用 KafkaListenerEndpointRegistry 注册 kafkalistenerContainers
- sql-server - 为什么数据库和 SQL 查询使用相同的排序规则问题?
- angular - ngrx/store@6.1.0 在升级到 Angular 7 时需要 @angular/core@^6.0.0 的同级
- android - 如何访问片段中的当前位置?
- sas - 使用 PROC SQL 计数独特的患者和整体观察
- java - 如何在 Spring Data JDBC 中编写自定义 @Query?