工作框核心

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-coreskipWaiting() 已废弃,开发者应改为直接调用 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

RouteHandlerCallbackRouteHandlerObjectworkbox-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

具有类型为 RouteHandlerCallbackhandle 方法的对象。

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

一个对象,其中包含用于提取和缓存操作的可选生命周期回调属性。

属性

WorkboxPluginCallbackParam

属性

cacheNames

获取 Workbox 使用的当前缓存名称和前缀/后缀。

cacheNames.precache 用于预缓存的资源,cacheNames.googleAnalyticsworkbox-google-analytics 用于存储 analytics.jscacheNames.runtime 用于所有其他内容。

cacheNames.prefix 可用于仅检索当前前缀值。cacheNames.suffix 可用于仅检索当前后缀值。

类型

对象

属性

  • googleAnalytics

    字符串

  • 预缓存

    字符串

  • 前缀

    字符串

  • 运行时

    字符串

  • 后缀

    字符串

方法

clientsClaim()

workbox-core.clientsClaim()

在服务工件变为活跃状态后,声明所有当前可用的客户端。它通常与 skipWaiting() 结合使用。

copyResponse()

workbox-core.copyResponse(
  response: Response,
  modifier?: function,
)

允许开发者复制响应并修改其 headersstatusstatusText 值(可通过构造函数中的 [ResponseInit]https://developer.mozilla.org/en-US/docs/Web/API/Response/Response#Syntax 对象设置的值)。如需修改这些值,请将函数作为第二个参数传递。系统将使用包含响应属性 {headers, status, statusText} 的单个对象调用该函数。此函数的返回值将用作新 ResponseResponseInit。如需更改值,请修改传递的参数并返回该参数,或返回一个全新的对象。

无论是否使用了 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() 等效于此,应改为使用此方法。