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
MapLikeObject | string[] 可选
- 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() 等效于此,应改为使用此方法。