Workbox 采用模块化设计,让开发者可以选择要使用的部分,而无需强制下载单个文件中的所有内容。
不过,模块之间存在重叠,例如,每个模块都需要与控制台交互、抛出有意义的错误,以及使用网络或缓存。为避免每个模块都实现相同的逻辑,workbox-core
包含每个模块都依赖的此通用代码。
此模块确实会向开发者提供一些功能,但除了日志级别和缓存之外,workbox-core
还会向每个模块(而非最终开发者)提供内部逻辑。
查看和更改默认缓存名称
Workbox 通过 cacheNames
定义其缓存:
import {cacheNames} from 'workbox-core';
console.log(cacheNames.precache);
console.log(cacheNames.runtime);
console.log(cacheNames.googleAnalytics);
这些缓存名称采用前缀、名称和后缀的格式构建,其中名称会根据缓存的使用情况而变化。
<prefix>-<cache-id>-<suffix>
您可以通过更改传递给 setCacheNameDetails()
的所有或部分值来更改这些默认名称。
import {cacheNames, setCacheNameDetails} from 'workbox-core';
setCacheNameDetails({
prefix: 'my-app',
suffix: 'v1',
precache: 'install-time',
runtime: 'run-time',
googleAnalytics: 'ga',
});
// Will print 'my-app-install-time-v1'
console.log(cacheNames.precache);
// Will print 'my-app-run-time-v1'
console.log(cacheNames.runtime);
// Will print 'my-app-ga-v1'
console.log(cacheNames.googleAnalytics);
前缀和后缀的主要用例是,如果您为多个项目使用 Workbox,并为每个项目使用相同的 localhost 端口,为每个模块设置自定义前缀可防止缓存相互冲突。
客户声明
有些开发者希望能够发布新的服务工作线程,并让其在激活后立即控制已打开的网页,而这在默认情况下不会发生。
如果您需要这种行为,workbox-core
提供了一个辅助方法:
import {clientsClaim} from 'workbox-core';
// This clientsClaim() should be at the top level
// of your service worker, not inside of, e.g.,
// an event handler.
clientsClaim();
workbox-core
中的 clientsClaim()
方法会自动向您的服务工作器添加 activate
事件监听器,并在其中调用 self.clients.claim()
。在当前服务 worker 激活之前调用 self.clients.claim()
会导致运行时异常,而 workbox-core
的封装容器有助于确保您在正确的时间调用它。
skipWaiting 封装容器已废弃
在 Workbox v6 之前,我们还建议开发者使用 workbox-core
中的 skipWaiting()
方法。不过,除了开发者通过显式调用 self.skipWaiting()
获得的好处之外,此方法提供的好处很少。
由于旧版 workbox-core
封装容器还注册了一个调用 self.skipWaiting()
的 install
事件处理脚本,因此如果在安装完成后,在其他事件处理脚本(例如 message
)中调用该封装容器,其行为将不符合预期。
因此,workbox-core
的 skipWaiting()
已废弃,开发者应改为直接调用 self.skipWaiting()
。与 self.clients.claim()
不同,如果在“错误”时间调用 self.skipWaiting()
,它不会抛出异常,因此无需将其封装在事件处理程序中。
类型
CacheDidUpdateCallback()
workbox-core.CacheDidUpdateCallback(
param: CacheDidUpdateCallbackParam,
)
参数
返回
-
Promise<void>
CacheDidUpdateCallbackParam
属性
-
cacheName
字符串
-
事件
ExtendableEvent
-
newResponse
响应
-
oldResponse
响应(可选)
-
request
请求
-
州
MapLikeObject(可选)
CachedResponseWillBeUsedCallback()
workbox-core.CachedResponseWillBeUsedCallback(
param: CachedResponseWillBeUsedCallbackParam,
)
返回
-
Promise<void | Response>
CachedResponseWillBeUsedCallbackParam
属性
-
cacheName
字符串
-
cachedResponse
响应(可选)
-
事件
ExtendableEvent
-
matchOptions
CacheQueryOptions(可选)
-
request
请求
-
州
MapLikeObject(可选)
CacheKeyWillBeUsedCallback()
workbox-core.CacheKeyWillBeUsedCallback(
param: CacheKeyWillBeUsedCallbackParam,
)
参数
返回
-
Promise<string | Request>
CacheKeyWillBeUsedCallbackParam
属性
-
事件
ExtendableEvent
-
模式
字符串
-
params
任意(可选)
-
request
请求
-
州
MapLikeObject(可选)
CacheWillUpdateCallback()
workbox-core.CacheWillUpdateCallback(
param: CacheWillUpdateCallbackParam,
)
参数
返回
-
Promise<void | Response>
CacheWillUpdateCallbackParam
属性
-
事件
ExtendableEvent
-
request
请求
-
Response
响应
-
州
MapLikeObject(可选)
FetchDidFailCallback()
workbox-core.FetchDidFailCallback(
param: FetchDidFailCallbackParam,
)
参数
返回
-
Promise<void>
FetchDidFailCallbackParam
属性
-
错误
错误
-
事件
ExtendableEvent
-
originalRequest
请求
-
request
请求
-
州
MapLikeObject(可选)
FetchDidSucceedCallback()
workbox-core.FetchDidSucceedCallback(
param: FetchDidSucceedCallbackParam,
)
参数
返回
-
Promise<Response>
FetchDidSucceedCallbackParam
属性
-
事件
ExtendableEvent
-
request
请求
-
Response
响应
-
州
MapLikeObject(可选)
HandlerCallbackOptions
HandlerDidCompleteCallback()
workbox-core.HandlerDidCompleteCallback(
param: HandlerDidCompleteCallbackParam,
)
参数
返回
-
Promise<void>
HandlerDidCompleteCallbackParam
属性
-
错误
错误 可选
-
事件
ExtendableEvent
-
request
请求
-
Response
响应(可选)
-
州
MapLikeObject(可选)
HandlerDidErrorCallback()
workbox-core.HandlerDidErrorCallback(
param: HandlerDidErrorCallbackParam,
)
参数
返回
-
Promise<Response>
HandlerDidErrorCallbackParam
属性
-
错误
错误
-
事件
ExtendableEvent
-
request
请求
-
州
MapLikeObject(可选)
HandlerDidRespondCallback()
workbox-core.HandlerDidRespondCallback(
param: HandlerDidRespondCallbackParam,
)
参数
返回
-
Promise<void>
HandlerDidRespondCallbackParam
属性
-
事件
ExtendableEvent
-
request
请求
-
Response
响应(可选)
-
州
MapLikeObject(可选)
HandlerWillRespondCallback()
workbox-core.HandlerWillRespondCallback(
param: HandlerWillRespondCallbackParam,
)
参数
返回
-
Promise<Response>
HandlerWillRespondCallbackParam
属性
-
事件
ExtendableEvent
-
request
请求
-
Response
响应
-
州
MapLikeObject(可选)
HandlerWillStartCallback()
workbox-core.HandlerWillStartCallback(
param: HandlerWillStartCallbackParam,
)
参数
返回
-
Promise<void>
HandlerWillStartCallbackParam
属性
-
事件
ExtendableEvent
-
request
请求
-
州
MapLikeObject(可选)
ManualHandlerCallback()
workbox-core.ManualHandlerCallback(
options: ManualHandlerCallbackOptions,
)
每当 Router
通过其 RouteMatchCallback
将网址/请求与 Route
匹配时,系统都会调用“handler”回调。此处理程序回调应返回一个使用 Response
进行解析的 Promise
。
如果 RouteMatchCallback
返回非空数组或对象,则会将其作为此处理程序的 options.params
参数传入。
返回
-
Promise<Response>
ManualHandlerCallbackOptions
传递给 ManualHandlerCallback
函数的选项。
属性
-
事件
ExtendableEvent
-
request
字符串 | 请求
MapLikeObject
PluginState
目前使用普通的 MapLikeObject
,但将来可能会扩展/限制此功能。
RequestWillFetchCallback()
workbox-core.RequestWillFetchCallback(
param: RequestWillFetchCallbackParam,
)
参数
返回
-
Promise<Request>
RequestWillFetchCallbackParam
属性
-
事件
ExtendableEvent
-
request
请求
-
州
MapLikeObject(可选)
RouteHandler
RouteHandlerCallback
或 RouteHandlerObject
。
workbox-routing
中接受路线处理程序的大多数 API 都接受这两者。
RouteHandlerCallback()
workbox-core.RouteHandlerCallback(
options: RouteHandlerCallbackOptions,
)
每当 Router
通过其 RouteMatchCallback
将网址/请求与 Route
匹配时,系统都会调用“handler”回调。此处理程序回调应返回一个使用 Response
进行解析的 Promise
。
如果 RouteMatchCallback
返回非空数组或对象,则会将其作为此处理程序的 options.params
参数传入。
返回
-
Promise<Response>
RouteHandlerCallbackOptions
传递给 RouteHandlerCallback
函数的选项。
属性
-
事件
ExtendableEvent
-
params
string[] | MapLikeObject 可选
-
request
请求
-
网址
网址
RouteHandlerObject
具有类型为 RouteHandlerCallback
的 handle
方法的对象。
Route
对象可以使用 RouteHandlerCallback
函数或此 RouteHandler
对象创建。RouteHandler
的好处在于,它可以扩展(就像 workbox-strategies
软件包所做的那样)。
属性
RouteMatchCallback()
workbox-core.RouteMatchCallback(
options: RouteMatchCallbackOptions,
)
“match”回调用于确定是否应针对特定网址和请求应用 Route
。在响应来自客户端的提取事件时发生匹配时,系统还会提供 event
对象。不过,由于匹配回调可以在提取事件之外调用,因此匹配逻辑不应假定 event
对象始终可用。如果匹配回调返回真值,系统会立即调用匹配路线的 RouteHandlerCallback
。如果返回的值是非空数组或对象,则该值将设置在处理程序的 options.params
参数上。
返回
-
任意
RouteMatchCallbackOptions
传递给 RouteMatchCallback
函数的选项。
属性
-
事件
ExtendableEvent
-
request
请求
-
sameOrigin
布尔值
-
网址
网址
WorkboxPlugin
一个对象,其中包含用于提取和缓存操作的可选生命周期回调属性。
属性
-
cacheDidUpdate
-
cacheKeyWillBeUsed
-
cacheWillUpdate
-
cachedResponseWillBeUsed
-
fetchDidFail
-
fetchDidSucceed
-
handlerDidComplete
-
handlerDidError
-
handlerDidRespond
-
handlerWillRespond
-
handlerWillStart
-
requestWillFetch
WorkboxPluginCallbackParam
属性
-
cacheDidUpdate
-
cacheKeyWillBeUsed
-
cacheWillUpdate
-
cachedResponseWillBeUsed
-
fetchDidFail
-
fetchDidSucceed
-
handlerDidComplete
-
handlerDidError
-
handlerDidRespond
-
handlerWillRespond
-
handlerWillStart
-
requestWillFetch
属性
cacheNames
获取 Workbox 使用的当前缓存名称和前缀/后缀。
cacheNames.precache
用于预缓存的资源,cacheNames.googleAnalytics
由 workbox-google-analytics
用于存储 analytics.js
,cacheNames.runtime
用于所有其他内容。
cacheNames.prefix
可用于仅检索当前前缀值。cacheNames.suffix
可用于仅检索当前后缀值。
类型
对象
属性
-
googleAnalytics
字符串
-
预缓存
字符串
-
前缀
字符串
-
运行时
字符串
-
后缀
字符串
方法
clientsClaim()
workbox-core.clientsClaim()
在服务工件变为活跃状态后,声明所有当前可用的客户端。它通常与 skipWaiting()
结合使用。
copyResponse()
workbox-core.copyResponse(
response: Response,
modifier?: function,
)
允许开发者复制响应并修改其 headers
、status
或 statusText
值(可通过构造函数中的 [ResponseInit
]https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#Syntax
对象设置的值)。如需修改这些值,请将函数作为第二个参数传递。系统将使用包含响应属性 {headers, status, statusText}
的单个对象调用该函数。此函数的返回值将用作新 Response
的 ResponseInit
。如需更改值,请修改传递的参数并返回该参数,或返回一个全新的对象。
无论是否使用了 CORS,此方法都被特意限制为仅限同源响应。
参数
-
Response
响应
-
修饰符
函数(可选)
modifier
参数如下所示:(responseInit: ResponseInit) => ResponseInit
-
responseInit
ResponseInit
-
返回
ResponseInit
-
返回
-
Promise<Response>
registerQuotaErrorCallback()
workbox-core.registerQuotaErrorCallback(
callback: Function,
)
将函数添加到 quotaErrorCallbacks 集合中,以便在发生配额错误时执行该函数。
参数
-
callback
函数
setCacheNameDetails()
workbox-core.setCacheNameDetails(
details: PartialCacheNameDetails,
)
修改 Workbox 软件包使用的默认缓存名称。
缓存名称以 <prefix>-<Cache Name>-<suffix>
的形式生成。
参数
-
详细信息
PartialCacheNameDetails
skipWaiting()
workbox-core.skipWaiting()
此方法已废弃,将在 Workbox v7 中移除。
调用 self.skipWaiting() 等效于此,应改为使用此方法。