我希望使用Workbox来缓存本地和远程映像资产。当前是否支持此功能?
基本上,我希望具有以下功能:
workboxBuild.injectManifest({
swSrc: 'app/sw.js',
swDest: 'build/sw.js',
globDirectory: 'build',
globPatterns: [
'*.css',
'index.html',
'app.js',
'http://remote/image.jpg'
],
如果我手动将远程HTTP资产添加到生成的服务工作者文件中,则可以正常工作(请参阅下文),但是我希望生成该服务工作者文件而不必手动对其进行编辑。
importScripts('https://storage.googleapis.com/workbox-cdn/releases/3.4.1/workbox-sw.js');
if (workbox) {
console.log(`Yay! Workbox is loaded `);
workbox.precaching.precacheAndRoute([
{
"url": "app.css",
"revision": "f8d6a881fb9d586ef6fd676209e1613b"
},
{
"url": "index.html",
"revision": "ce6238d5b3c1e4e559349549c9bd30aa"
},
{
"url": "app.js",
"revision": "4357dbdbcc80dcfbe1f8198ac0313009"
},
{
"url": "http://remote/image.jpg"
}
]);
} else {
console.log(`Boo! Workbox didn't load `);
}
答案 0 :(得分:0)
不支持缓存远程资产。那不可能改变。作为构建过程的一部分,Workbox需要在部署之前对每个资源进行“快照”,以填充和更新其缓存,同时首先为它们提供缓存。从理论上讲,您可以在构建过程中向远程资源发出HTTP请求,但为了获取其版本信息,我们无法保证不会在第一个部署周期的外部重新部署远程资源。党的资产。这可能会使您处于Workbox认为它具有http://example.com/image.jpg
最新版本,而从不获取最新更新的情况。
远程handle third-party的使用方法是将runtime routing与caching strategy一起使用,这可以为您提供适合特定类型资产的新鲜度保证。如果希望在安装服务工作者后立即自动缓存给定资产,则可以添加自己的install
处理程序,该处理程序将为您“启动”运行时缓存。
这看起来像:
// Workbox will continue to precache and keep
// the local assets it knows about up to date.
workbox.precaching.precacheAndRoute([...]);
const cacheName = 'image-cache';
// Make sure that these URLs support CORS!
// Otherwise, the cache.addAll() call will fail,
// and you'll have to explicitly call cache.put()
// for each resource.
const thirdPartyUrls = [
'https://example.com/image.jpg',
// Any other URLs.
];
self.addEventListener('install', (event) => {
event.waitUntil(
caches.open(cacheName)
.then((cache) => cache.addAll(thirdPartyUrls))
);
});
workbox.routing.registerRoute(
new RegExp('^https://example.com/'),
// Use whichever strategy you want.
workbox.strategies.staleWhileRevalidate({
cacheName,
// Use whatever plugins you want.
plugins: [...],
}),
);