Workbox — это мощная библиотека для управления сервис-воркерами в приложениях на JavaScript, которая значительно упрощает реализацию кэширования, стратегий обновления ресурсов и оффлайн-поддержки. Основным способом интеграции Workbox в современный проект является использование npm.
Перед установкой Workbox необходимо убедиться, что проект настроен как npm-пакет. Для этого выполняется команда:
npm init -y
Она создаёт файл package.json с базовыми настройками
проекта, что позволяет управлять зависимостями, скриптами сборки и
другими параметрами.
Workbox доступен как набор отдельных пакетов, каждый из которых отвечает за определённые функции:
workbox-core — базовые утилиты для работы с
сервис-воркерами.workbox-routing — маршрутизация запросов и управление
стратегиями кэширования.workbox-strategies — готовые стратегии кэширования,
такие как NetworkFirst, CacheFirst, StaleWhileRevalidate.workbox-precaching — предварительное кэширование
ресурсов при установке сервис-воркера.workbox-build — генерация манифестов для кэширования и
интеграция с системой сборки.workbox-webpack-plugin — плагин для Webpack,
автоматизирующий работу с precaching.Установка всех основных пакетов производится командой:
npm install workbox-core workbox-routing workbox-strategies workbox-precaching workbox-build workbox-webpack-plugin --save
Флаг --save добавляет пакеты в список зависимостей
проекта.
После установки Workbox структура проекта может выглядеть следующим образом:
project/
├─ src/
│ ├─ index.js
│ └─ service-worker.js
├─ package.json
├─ package-lock.json
└─ node_modules/
src/service-worker.js — основной файл сервис-воркера,
где подключаются модули Workbox.node_modules/ — каталог с установленными пакетами
Workbox и их зависимостями.package-lock.json — фиксирует точные версии всех
установленных пакетов для воспроизводимой сборки.Импорт модулей Workbox в сервис-воркер осуществляется через синтаксис
ES-модулей (если проект поддерживает модульную сборку) или через
глобальный объект workbox при использовании CDN. В
npm-проектах предпочтительно использовать ES-модули:
import { precacheAndRoute } from 'workbox-precaching';
import { registerRoute } from 'workbox-routing';
import { StaleWhileRevalidate } from 'workbox-strategies';
precacheAndRoute() автоматически кэширует ресурсы,
перечисленные в манифесте.registerRoute() позволяет определять маршруты для
сетевых запросов и применять к ним стратегии кэширования.StaleWhileRevalidate — стратегия, которая возвращает
кэшированный ответ мгновенно и одновременно обновляет его из сети.Для проектов на Webpack можно использовать
workbox-webpack-plugin. Установка через npm уже
рассмотрена, подключение плагина выглядит так:
const { GenerateSW } = require('workbox-webpack-plugin');
module.exports = {
// остальная конфигурация Webpack
plugins: [
new GenerateSW({
clientsClaim: true,
skipWaiting: true,
runtimeCaching: [
{
urlPattern: /\.(?:png|jpg|jpeg|svg|gif)$/,
handler: 'CacheFirst',
options: {
cacheName: 'images-cache',
expiration: {
maxEntries: 50,
maxAgeSeconds: 30 * 24 * 60 * 60 // 30 дней
},
},
},
],
}),
],
};
Плагин автоматически генерирует сервис-воркер, добавляет precaching для статических ресурсов и настраивает runtime caching для динамических запросов.
После установки пакетов и настройки сервис-воркера можно проверить работу Workbox с помощью команд:
npx workbox-cli generateSW workbox-config.js
Или запустить проект через локальный сервер и убедиться, что сервис-воркер зарегистрирован и кэширование работает. В DevTools браузера во вкладке Application → Service Workers отображается активный сервис-воркер и список кэшированных ресурсов.
Для обновления пакетов Workbox до последних стабильных версий используется:
npm update workbox-core workbox-routing workbox-strategies workbox-precaching workbox-build workbox-webpack-plugin
Файл package.json фиксирует версии, что позволяет
сохранять совместимость при последующих сборках. Для управления точными
версиями можно использовать символ ^ или ~
перед номером версии.
@types/workbox-*), что позволяет использовать
автодополнение и проверку типов при разработке.