Workbox به اندازه کافی منعطف است تا تقریباً فرآیند ساخت هر پروژه را در خود جای دهد. این بدان معناست که بیش از یک راه برای استفاده از Workbox وجود دارد که به شما امکان می دهد ادغام مناسب برای پروژه خود را انتخاب کنید. صرف نظر از نحوه ادغام با Workbox، ابزارهای مختلف API مشابهی را ارائه می دهند.
generateSW
در مقابل injectManifest
شما به یکی از دو روش اصلی ابزارهای ساخت Workbox تکیه خواهید کرد: generateSW
یا injectManifest
. اینکه کدام یک را باید استفاده کنید به میزان انعطافی که نیاز دارید بستگی دارد. generateSW
سهولت استفاده و سادگی را به قیمت انعطاف پذیری در اولویت قرار می دهد و به شما امکان می دهد مجموعه ای از گزینه های پیکربندی را اعلام کنید و در ازای آن یک سرویس دهنده کاملاً کاربردی به شما ارائه دهد.
injectManifest
از انعطافپذیری بیشتر به قیمت سادگی استفاده میکند، زیرا شما در نهایت کد را برای کارمند خدمات خود مینویسید، با injectManifest
یک مانیفست پیش کش ارائه میکند که میتواند توسط روشهای پیش کش Workbox استفاده شود.
زمان استفاده از generateSW
شما باید از generateSW
استفاده کنید اگر:
- شما میخواهید فایلهای مرتبط با فرآیند ساخت خود را پیش کش کنید، از جمله فایلهایی که URL آنها حاوی هشهایی هستند که ممکن است از قبل آنها را نشناسید.
- شما نیازهای ذخیره سازی در زمان اجرا ساده دارید که می تواند از طریق گزینه های
generateSW
پیکربندی شود.
چه زمانی از generateSW
استفاده نکنید
از طرف دیگر، شما نباید از generateSW
استفاده کنید اگر:
- میخواهید از سایر ویژگیهای Service Worker (مانند Web Push ) استفاده کنید.
- برای وارد کردن اسکریپتهای اضافی یا استفاده از ماژولهای Workbox خاص برای تنظیم دقیق سرویسکار بر اساس نیازهای برنامهتان، به انعطافپذیری بیشتری نیاز دارید.
زمان استفاده از injectManifest
شما باید از injectManifest
استفاده کنید اگر:
- میخواهید فایلها را پیش کش کنید، اما میخواهید Service Worker خودتان را بنویسید.
- شما نیازهای پیچیده ای برای ذخیره سازی یا مسیریابی دارید که نمی توان آنها را از طریق گزینه های پیکربندی
generateSW
بیان کرد. - شما می خواهید از API های دیگر در سرویس کار خود (مانند Web Push) استفاده کنید.
injectManifest
با generateSW
تفاوت دارد زیرا از شما میخواهد یک فایل منبع سرویس کارگر را مشخص کنید. در این گردش کار، فایل کارگر منبع سرویس باید یک self.__WB_MANIFEST
تا injectManifest
بتواند آن را با مانیفست پیش کش جایگزین کند .
چه زمانی از injectManifest
استفاده نکنید
شما نباید از injectManifest
استفاده کنید اگر:
- شما نمی خواهید از precaching در سرویس دهنده خود استفاده کنید.
- نیازهای کارگر سرویس ما به اندازه کافی ساده است که بتوان آن را با آنچه
generateSW
و گزینه های پیکربندی آن ارائه می کند پوشش داد. - شما سهولت استفاده را بر انعطاف پذیری اولویت می دهید.
از ابزارهای Build Workbox استفاده کنید
اگر به دنبال راهی برای استفاده از Workbox در فرآیند ساخت خود هستید، سه گزینه دارید:
-
workbox-cli
-
workbox-build
. ابزار خط فرمان - استفاده از باندلر (مانند
workbox-webpack-plugin
).
هر یک از این ابزارهای ساخت، هر دو حالت generateSW
و injectManifest
را با مجموعهای از گزینههای مشابه ارائه میدهند. همه اینها انتخاب های خوبی هستند وقتی که نمی خواهید سرویس کار مجهز به Workbox خود را به یک چارچوب خاص گره بزنید. برای اینکه بدانید کدام یک از این گزینه ها مناسب تر است، اجازه دهید نگاهی گذرا به هر یک بیندازیم.
workbox-cli
اگر به دنبال کمترین مانع ممکن برای ورود با Workbox هستید، CLI برای شما مناسب است:
npm install workbox-cli --save-dev
برای شروع استفاده از CLI، ویزارد را با npx workbox wizard
اجرا کنید. جادوگر چند سوال می پرسد و از پاسخ به آن سوالات برای راه اندازی یک پروژه با فایل workbox-config.js
استفاده می شود که می توانید آن را مطابق با نیاز خود سفارشی کنید. چیزی شبیه به این خواهد بود:
// A config for `generateSW`
export default {
globDirectory: 'dist/',
globPatterns: [
'**/*.{css,woff2,png,svg,jpg,js}'
],
swDest: 'dist/sw.js'
};
هنگامی که فایل پیکربندی شما ایجاد شد، CLI می تواند متدهای generateSW
یا injectManifest
را برای شما اجرا کند. متن راهنمای CLI اطلاعات و نمونههایی از کاربرد بیشتری دارد.
workbox-build
workbox-cli
یک بسته بندی در اطراف ماژول workbox-build
است و یک جایگزین آن استفاده مستقیم از workbox-build
است. هنگام استفاده از workbox-build
، بهجای تعیین گزینهها با استفاده از فایل workbox-config.js
، از متدهای generateSW
یا injectManifest
مستقیماً به عنوان بخشی از اسکریپت Node استفاده میکنید که مجموعهای از گزینههای مشابه را ارسال میکند:
// build-sw.mjs
import {generateSW} from 'workbox-build';
generateSW({
globDirectory: 'dist/',
globPatterns: [
'**/*.{css,woff2,png,svg,jpg,js}'
],
swDest: 'dist/sw.js'
});
در مثال بالا، workbox-build
هنگامی که دستور node build-sw.mjs
اجرا می شود، سرویس کارگر تولید شده را در پوشه dist
می نویسد.
استفاده از باندلر
بستهکنندههای مختلف افزونههای Workbox خود را دارند، اما تنها باندلری که بهطور رسمی توسط تیم Workbox پشتیبانی میشود، webpack است، از طریق workbox-webpack-plugin
. مانند workbox-cli
و workbox-build
، workbox-webpack-plugin
متدهای generateSW
یا injectManifest
را اجرا میکند، به جز اینکه افزونه نام این روشها را بهعنوان GenerateSW
یا InjectManifest
به حروف بزرگ در میآورد. در غیر این صورت، استفاده مشابه workbox-build
است:
// webpack.config.js
import {GenerateSW} from 'workbox-webpack-plugin';
export default {
// Other webpack config options omitted for brevity...
plugins: [
new GenerateSW({
swDest: './dist/sw.js'
})
]
};
گزینههایی که به GenerateSW
یا InjectManifest
ارسال میکنید مانند generateSW
یا injectManifest
نیستند، اما همپوشانی قابل توجهی وجود دارد. به طور خاص، شما نه نیازی به تعیین یک گزینه globDirectory
برای GenerateSW
ندارید - و نه می توانید - زیرا وب پک از قبل می داند که دارایی های تولید شما در کجا قرار دارند.
از یک چارچوب استفاده کنید
همه چیزهایی که در این مورد پوشش داده شده است، بر استفاده از Workbox بدون در نظر گرفتن ترجیحات چارچوب تمرکز دارد. با این حال، در صورتی که توسعه را آسانتر کند، میتوان از Workbox در چارچوب خاصی استفاده کرد. برای مثال، create-react-app
به صورت پیشفرض با Workbox ارسال میشود . ادغام های مختلف چارچوب با Workbox بعداً در مقاله بعدی پوشش داده می شود .
شایان ذکر است که این ادغامهای Workbox خاص چارچوب ممکن است توانایی شما را برای پیکربندی Workbox به روشی که میخواهید محدود کند. در مواردی مانند این، همیشه می توانید به روش هایی که در اینجا بحث شده است بازگردید.
اگر فرآیند ساخت نداشته باشم چه می شود؟
این سند فرض میکند که پروژه شما یک فرآیند ساخت دارد، اما پروژه شما در واقع ممکن است نداشته باشد. اگر وضعیت شما را توصیف میکند، همچنان میتوانید از Workbox با ماژول workbox-sw
استفاده کنید. با workbox-sw
، میتوانید زمان اجرا Workbox را از CDN یا محلی بارگیری کنید و سرویسکار خود را بنویسید.
نتیجه گیری
انعطافپذیری Workbox تضمین میکند که میتوانید تقریباً در هر پروژهای از آن استفاده کنید، صرف نظر از اولویتهای چارچوب یا زنجیره ابزار آن. همه این راهها به شما امکان میدهند تا با استفاده از چند روش، پیش کش و ذخیرهسازی زمان اجرا را انجام دهید، در حالی که به انعطافپذیری بیشتری برای ایجاد سرویسدهندگان با ویژگیهای پیشرفتهتر در صورت نیاز اجازه میدهد.