生成 service-worker 时,获得所需策略的最简单方法是使用sw-precache
with sw-toolbox
。
使用 生成新的 service-worker 时sw-precache
,您还可以sw-toolbox
通过传递正确的配置选项来获取生成文件末尾的代码。
根据sw-precache 文档:
该sw-precache
模块能够将sw-toolbox
代码和配置与自己的配置一起包含在内。使用(见下文runtimeCaching
)中的配置选项是一种快捷方式,可以通过导入Service Worker 并编写自己的路由规则来完成您可以手动执行的操作。sw-precache
sw-toolbox
这是文档runtimeCaching
中显示的选项的示例:sw-precache
runtimeCaching: [{
urlPattern: /^https:\/\/example\.com\/api/,
handler: 'networkFirst'
}, {
urlPattern: /\/articles\//,
handler: 'fastest',
options: {
cache: {
maxEntries: 10,
name: 'articles-cache'
}
}
}]
您可以将此选项与您选择的配置一起使用。
例如,您可以使用文档中所述的配置文件:
支持使用 --config 传递复杂的配置。文件中的任何选项都可以通过命令行标志覆盖。我们强烈建议通过 module.exports 将定义配置的外部 JavaScript 文件传递给它。例如,假设有一个 path/to/sw-precache-config.js 文件,其中包含:
module.exports = {
staticFileGlobs: [
'app/css/**.css',
'app/**.html',
'app/images/**.*',
'app/js/**.js'
],
stripPrefix: 'app/',
runtimeCaching: [{
urlPattern: /this\\.is\\.a\\.regex/,
handler: 'networkFirst'
}]
};
该文件可以传递到命令行界面,同时还可以设置详细选项,通过
$ sw-precache --config=path/to/sw-precache-config.js --verbose
这提供了最大的灵活性,例如为 runtimeCaching.urlPattern 选项提供正则表达式。
或者您可以使用 JSON 文件:
我们还支持为 --config 传递 JSON 文件,尽管这提供的灵活性较低:
{
"staticFileGlobs": [
"app/css/**.css",
"app/**.html",
"app/images/**.*",
"app/js/**.js"
],
"stripPrefix": "app/",
"runtimeCaching": [{
"urlPattern": "/express/style/path/(.*)",
"handler": "networkFirst"
}]
}
此示例使用 JS 文件作为配置选项:
$ sw-precache --config=path/to/sw-precache-config.js --verbose
执行命令并使用此配置生成 service-worker 后,您可以比仅使用sw-precache
.
您可以直接在文件中配置策略,也可以在 service-worker 代码的底部手动添加它们。
以下是生成代码底部的示例:
//sw-precache generated code...
// *** Start of auto-included sw-toolbox code. ***
/*
Copyright 2016 Google Inc. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
//(!function(e){if("object"==typeof exports&&"undefined"!=typeof module))...
// *** End of auto-included sw-toolbox code. ***
// Runtime cache configuration, using the sw-toolbox library.
toolbox.router.get(/this\\.is\\.a\\.regex/, toolbox.networkFirst, {});
toolbox.options.debug = true;
//Here you can configure your precache:
toolbox.precache([
'/',
'/assets/background.png',
'/assets/logo.png',
'/assets/application.css',
]);
//And here you can configure your policies for any route and asset:
toolbox.router.get('/', toolbox.fastest);
toolbox.router.get('/assets/background.png', toolbox.fastest);
toolbox.router.get('/assets/logo.png', toolbox.fastest);
//Here is the Network First example
toolbox.router.get('/myapp/index.html', toolbox.networkFirst);
我发现这比仅使用sw-precache
.
在这里您可以找到sw-toolbox 使用指南以获取有关配置的更多信息。