مهاجرت از sw-precache یا sw-toolbox، مهاجرت از sw-precache یا sw-toolbox

توسعه‌دهندگانی که قبلاً از sw-precache و/یا sw-toolbox استفاده کرده‌اند، مسیر ارتقای ساده‌ای به کتابخانه‌های خانواده Workbox دارند. ارتقاء به Workbox یک تجربه خدمتکار مدرن و توسعه‌یافته با بهبود اشکال‌زدایی و ارگونومی توسعه‌دهنده ارائه می‌دهد.

تغییرات در پیکربندی موجود شما

اگر از sw-precache استفاده می‌کنید که با هر یک از گزینه‌های زیر پیکربندی شده است، باید تغییرات زیر را هنگام انتقال به Workbox در نظر بگیرید.

گزینه های تغییر نام یافته

پارامتر پیکربندی dynamicUrlToDependencies به templatedURLs تغییر نام داده است.

پارامتر پیکربندی staticFileGlobs به globPatterns تغییر نام داده است.

پارامتر پیکربندی runtimeCaching مجموعه‌ای از گزینه‌های به‌روز شده را می‌گیرد که مربوط به نام‌های مورد استفاده در ماژول‌های Workbox است. برای نشان دادن چیزی که تغییر نام داده است، این پیکربندی sw-precache :

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

معادل این پیکربندی Workbox است:

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,
    },
  },
}],

گزینه های منسوخ شده

مسیرهای عام به سبک اکسپرس دیگر پشتیبانی نمی شوند. اگر از مسیرهای حروف عام به سبک Express در پیکربندی runtimeCaching یا مستقیماً در sw-toolbox استفاده می‌کردید، هنگام استفاده از Workbox به یک مسیر عبارت معمولی معادل مهاجرت کنید.

مهاجرت های sw-precache

از sw-precache CLI تا workbox-cli

توسعه دهندگانی که از رابط خط فرمان sw-precache استفاده می کنند، چه فرمان را به صورت دستی یا به عنوان بخشی از فرآیند ساخت مبتنی بر npm scripts اجرا می کنند، استفاده از ماژول workbox-cli را ساده ترین راه برای مهاجرت می دانند. نصب workbox-cli به شما امکان دسترسی به یک باینری به نام workbox را می دهد.

در حالی که sw-precache CLI از پیکربندی از طریق پرچم‌های خط فرمان یا یک فایل پیکربندی پشتیبانی می‌کند ، CLI workbox نیاز دارد که همه گزینه‌های پیکربندی در یک فایل پیکربندی با استفاده از CommonJS module.exports ارائه شوند.

workbox CLI از تعدادی حالت مختلف پشتیبانی می کند. (از workbox --help برای دیدن همه آنها استفاده کنید.) اما حالتی که بیشتر با عملکرد sw-precache مطابقت دارد generateSW است. بنابراین یک تماس به

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

را می توان به صورت بیان کرد

$ workbox generateSW workbox-config.js

از ماژول گره sw-precache گرفته تا ماژول گره ساخت جعبه کاری

توسعه‌دهندگانی که از node API برای sw-precache استفاده می‌کنند، چه به‌عنوان بخشی از یک گردش کار gulp / Grunt یا فقط در یک اسکریپت ساخت node سفارشی، می‌توانند با جابجایی به node workbox-build مهاجرت کنند.

تابع generateSW() ماژول workbox-build بیشترین تطابق را با تابع write() ماژول sw-precache دارد. یک تفاوت کلیدی این است که generateSW() همیشه یک Promise را برمی گرداند، در حالی که تابع write() قدیمی هم از یک callback و هم یک رابط مبتنی بر Promise پشتیبانی می کند.

استفاده gulp در امتداد خطوط

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

قابل تغییر است به

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

از پلاگین sw-precache-webpack-plugin تا افزونه Workbox webpack

توسعه دهندگانی که از پلاگین sw-precache-webpack-plugin به عنوان بخشی از فرآیند ساخت پک وب خود استفاده می کنند، می توانند با جابجایی به کلاس GenerateSW در ماژول workbox-webpack-plugin مهاجرت کنند.

workbox-webpack-plugin مستقیماً با فرآیند ساخت پک وب ادغام می‌شود و در مورد تمام دارایی‌های تولید شده توسط یک کامپایل مشخص می‌داند. این بدان معناست که برای بسیاری از موارد استفاده، می‌توانید به رفتار پیش‌فرض workbox-webpack-plugin بدون پیکربندی اضافی تکیه کنید و یک سرویس‌کار معادل با آنچه sw-precache-webpack-plugin ارائه می‌دهد دریافت کنید.

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

قابل تغییر است به

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

مهاجرت های sw-toolbox

از جعبه ابزار دست ساز sw به workbox-sw مهاجرت کنید

اگر مستقیماً از sw-toolbox استفاده می کردید (به جای استفاده ضمنی از طریق گزینه runtimeCaching sw-precache )، پس انتقال به Workbox به تنظیمات دستی نیاز دارد تا رفتار معادل را به دست آورد. برای زمینه بیشتر، مطالعه مستندات مربوط به ماژول‌های workbox-routing و ماژول‌های workbox-strategies می‌تواند به ارائه زمینه بیشتر کمک کند.

در اینجا چند قطعه کد برای کمک به هدایت مهاجرت آورده شده است. این کد sw-toolbox :

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;

معادل این کد Workbox است:

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());

کمک گرفتن

ما پیش‌بینی می‌کنیم که بیشتر مهاجرت‌ها به Workbox ساده باشد. اگر با مشکلاتی مواجه شدید که در این راهنما پوشش داده نشده است، لطفاً با باز کردن مشکلی در GitHub به ما اطلاع دهید.