Di chuyển từ sw-precache hoặc sw-toolbox

Những nhà phát triển từng sử dụng sw-precache và/hoặc sw-toolbox có thể dễ dàng nâng cấp lên nhóm thư viện Workbox. Việc nâng cấp lên Workbox sẽ mang đến trải nghiệm trình chạy dịch vụ hiện đại, có thể mở rộng cùng với khả năng gỡ lỗi và công thái học cho nhà phát triển được cải thiện.

Nội dung sửa đổi đối với cấu hình hiện có

Nếu đang sử dụng sw-precache được định cấu hình bằng bất kỳ tuỳ chọn nào sau đây, bạn cần cân nhắc những thay đổi sau khi di chuyển sang Workbox.

Các tuỳ chọn đã đổi tên

Đổi tên tham số cấu hình dynamicUrlToDependencies thành templatedURLs.

Đổi tên tham số cấu hình staticFileGlobs thành globPatterns.

Tham số cấu hình runtimeCaching sẽ lấy một tập hợp các tuỳ chọn đã cập nhật, tương ứng với tên được sử dụng trong các mô-đun Workbox cơ bản. Để minh hoạ những phần đã được đổi tên, cấu hình sw-precache này:

runtimeCaching: [{
  urlPattern: /api/,
  handler: 'fastest',
  options: {
    cache: {
      name: 'my-api-cache',
      maxEntries: 5,
      maxAgeSeconds: 60,
    },
  },
}],

tương đương với cấu hình Workbox này:

runtimeCaching: [{
  urlPattern: /api/,
  // 'fastest' is now 'StaleWhileRevalidate'
  handler: 'StaleWhileRevalidate',
  options: {
    // options.cache.name is now options.cacheName
    cacheName: 'my-api-cache',
    // options.cache is now options.expiration
    expiration: {
      maxEntries: 5,
      maxAgeSeconds: 60,
    },
  },
}],

Tuỳ chọn không dùng nữa

Các tuyến ký tự đại diện kiểu Express không còn được hỗ trợ. Nếu bạn đang sử dụng các tuyến đường ký tự đại diện kiểu Express trong cấu hình runtimeCaching hoặc trực tiếp trong sw-toolbox, hãy di chuyển sang tuyến đường biểu thức chính quy tương đương khi sử dụng Workbox.

Di chuyển sw-precache

Từ CLI sw-precache đến workbox-cli

Các nhà phát triển sử dụng giao diện dòng lệnh sw-precache, chạy lệnh theo cách thủ công hoặc trong quy trình xây dựng dựa trên npm scripts, sẽ thấy việc sử dụng mô-đun workbox-cli là cách dễ nhất để di chuyển. Việc cài đặt workbox-cli sẽ cấp cho bạn quyền truy cập vào một tệp nhị phân có tên là workbox.

Mặc dù sw-precache CLI được hỗ trợ định cấu hình thông qua cờ dòng lệnh hoặc tệp cấu hình, nhưng CLI workbox yêu cầu tất cả các tuỳ chọn cấu hình đều phải được cung cấp trong tệp cấu hình bằng cách sử dụng CommonJS module.exports.

CLI workbox hỗ trợ một số chế độ khác nhau. (Sử dụng workbox --help để xem tất cả các lớp này.) Tuy nhiên, chế độ phù hợp nhất với chức năng của sw-precachegenerateSW. Vì vậy, một cuộc gọi đến

$ sw-precache --config='sw-precache-config.js'

có thể được biểu thị dưới dạng

$ workbox generateSW workbox-config.js

Từ mô-đun nút sw-precache đến mô-đun nút workbox-build

Những nhà phát triển sử dụng API node cho sw-precache, theo quy trình làm việc gulp/Grunt hoặc ngay trong tập lệnh bản dựng node tuỳ chỉnh, đều có thể di chuyển bằng cách chuyển sang mô-đun node workbox-build.

Hàm generateSW() của mô-đun workbox-build gần khớp với hàm write() của mô-đun sw-precache nhất. Một điểm khác biệt chính là generateSW() luôn trả về một Lời hứa, trong khi hàm write() cũ hỗ trợ cả lệnh gọi lại và giao diện dựa trên Lời hứa.

Cách sử dụng gulp theo hướng

const swPrecache = require('sw-precache');
gulp.task('generate-service-worker', function () {
  return swPrecache.write('service-worker.js', {
    // Config options.
  });
});

có thể thay đổi thành

const workboxBuild = require('workbox-build');
gulp.task('generate-service-worker', function () {
  return workboxBuild.generateSW({
    // Config options.
  });
});

Từ trình bổ trợ sw-precache-webpack-plugin sang trình bổ trợ webpack Workbox

Nhà phát triển sử dụng sw-precache-webpack-plugin trong quy trình xây dựng webpack có thể di chuyển bằng cách chuyển sang lớp GenerateSW trong mô-đun workbox-webpack-plugin.

workbox-webpack-plugin tích hợp trực tiếp với quy trình tạo bản dựng webpack và "biết" về tất cả các thành phần do một quá trình biên dịch nhất định tạo ra. Điều này có nghĩa là trong nhiều trường hợp sử dụng, bạn có thể dựa vào hành vi mặc định của workbox-webpack-plugin mà không cần cấu hình bổ sung, sau đó tải một trình chạy dịch vụ tương đương cho những gì sw-precache-webpack-plugin cung cấp.

const SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin');
const webpackConfig = {
  // ...
  plugins: [
    new SWPrecacheWebpackPlugin({
      dontCacheBustUrlsMatching: /\.\w{8}\./,
      filename: 'service-worker.js',
    }),
  ],
};

có thể được thay đổi thành

const {GenerateSW} = require('workbox-webpack-plugin');
const webpackConfig = {
  // ...
  plugins: [
    new GenerateSW({
      // Config options, if needed.
    }),
  ],
};

di chuyển sw-toolbox

Di chuyển từ hộp công cụ sw-toolbox được tạo thủ công sang workbox-sw

Nếu bạn đang sử dụng sw-toolbox trực tiếp (thay vì sử dụng ngầm ẩn thông qua tuỳ chọn runtimeCaching của sw-precache), thì việc di chuyển sang Workbox sẽ yêu cầu một số điều chỉnh thủ công để có được hành vi tương đương. Để biết thêm thông tin, hãy đọc tài liệu về các mô-đun workbox-routingworkbox-strategies để có thêm thông tin.

Dưới đây là một số đoạn mã giúp hướng dẫn di chuyển. Mã sw-toolbox này:

importScripts('path/to/sw-toolbox.js');

// Set up a route that matches HTTP 'GET' requests.
toolbox.router.get(
  // Match any URL that contains 'ytimg.com', regardless of
  // where in the URL that match occurs.
  /\.ytimg\.com\//,

  // Apply a cache-first strategy to anything that matches.
  toolbox.cacheFirst,

  {
    // Configure a custom cache name and expiration policy.
    cache: {
      name: 'youtube-thumbnails',
      maxEntries: 10,
      maxAgeSeconds: 30,
    },
  }
);

// Set a default network-first strategy to use when
// there is no explicit matching route:
toolbox.router.default = toolbox.networkFirst;

tương đương với mã Workbox sau:

importScripts('path/to/workbox-sw.js');

workbox.routing.registerRoute(
  // Match any URL that contains 'ytimg.com'.
  // Unlike in sw-toolbox, in Workbox, a RegExp that matches
  // a cross-origin URL needs to include the initial 'https://'
  // as part of the match.
  new RegExp('^https://.*.ytimg.com'),

  // Apply a cache-first strategy to anything that matches.
  new workbox.strategies.CacheFirst({
    // Configuration options are passed in to the strategy.
    cacheName: 'youtube-thumbnails',
    plugins: [
      new workbox.expiration.ExpirationPlugin({
        maxEntries: 10,
        maxAgeSeconds: 30,
      }),
      // In Workbox, you must explicitly opt-in to caching
      // responses with a status of 0 when using the
      // cache-first strategy.
      new workbox.cacheableResponse.CacheableResponsePlugin({
        statuses: [0, 200],
      }),
    ],
  })
);

// Set a default network-first strategy to use when
// there is no explicit matching route:
workbox.routing.setDefaultHandler(new workbox.strategies.NetworkFirst());

Nhận trợ giúp

Chúng tôi dự kiến hầu hết các quá trình di chuyển sang Workbox sẽ diễn ra suôn sẻ. Nếu bạn gặp phải vấn đề không được đề cập trong hướng dẫn này, vui lòng cho chúng tôi biết bằng cách mở một vấn đề trên GitHub.