إطار العمل مرن بما يكفي لاستيعاب أي عملية إنشاء مشروع. هذا يعني أنّ هناك أكثر من طريقة لاستخدام Workbox، ما يسمح لك باختيار الدمج المناسب لمشروعك. بغض النظر عن كيفية الدمج مع Workbox، توفر الأدوات المختلفة واجهة برمجة تطبيقات مشابهة.
"generateSW
" ضد "injectManifest
"
ستعتمد على إحدى الطريقتين الأساسيتين في أدوات إنشاء Workbox: generateSW
أو injectManifest
. يعتمد الخيار الذي يجب عليك استخدامه على مقدار المرونة التي تحتاجها. يعطي generateSW
الأولوية لسهولة الاستخدام والبساطة على حساب المرونة، ما يسمح لك بتوضيح مجموعة من خيارات الإعداد ويمنحك في المقابل عامل خدمة يعمل بكامل وظائفه.
يفضّل injectManifest
مرونة أكبر مقابل بعض البساطة، إذ يمكنك في النهاية كتابة الرمز لمشغّل الخدمات بنفسك، مع injectManifest
الذي يوفّر بيانًا في ذاكرة التخزين المؤقت يمكن استخدامه من خلال طرق التخزين المؤقت في Workbox.
حالات استخدام "generateSW
"
عليك استخدام generateSW
في الحالات التالية:
- عليك تخزين الملفات المرتبطة بعملية التصميم مؤقتًا، بما في ذلك الملفات التي تحتوي عناوين URL الخاصة بها على علامات تجزئة قد لا تعرفها مسبقًا.
- لديك احتياجات بسيطة للتخزين المؤقت في وقت التشغيل ويمكن ضبطها باستخدام خيارات
generateSW
.
الحالات التي لا يتم فيها استخدام generateSW
ومن ناحية أخرى، يجب عدم استخدام generateSW
في الحالات التالية:
- كنت تريد استخدام ميزات مشغّل الخدمات الأخرى (مثل Web Push).
- تحتاج إلى مرونة إضافية لاستيراد نصوص برمجية إضافية أو استخدام وحدات Workspace معيّنة من أجل ضبط مشغّل الخدمات بما يتناسب مع احتياجات تطبيقك.
حالات استخدام "injectManifest
"
عليك استخدام injectManifest
في الحالات التالية:
- وتريد تخزين الملفات مؤقتًا بشكل مسبق، ولكنك تريد كتابة مشغّل الخدمات الخاص بك.
- لديك احتياجات معقّدة في التخزين المؤقت أو التوجيه لا يمكن التعبير عنها من خلال خيارات إعداد
generateSW
- لنفترض أنّك تريد استخدام واجهات برمجة تطبيقات أخرى في مشغّل الخدمات (مثل Web Push).
تختلف الدالة injectManifest
عن generateSW
من حيث أنّها تتطلب منك تحديد ملف مشغّل خدمات مصدر. في سير العمل هذا، يجب أن يتضمّن ملف مشغّل الخدمات المصدر سلسلة self.__WB_MANIFEST
خاصة ليتمكّن injectManifest
من استبداله باستخدام بيان التخزين المؤقت.
الحالات التي لا يتم فيها استخدام injectManifest
يجب عدم استخدام injectManifest
في الحالات التالية:
- ولا تريد استخدام التخزين المؤقت في مشغّل الخدمات لديك.
- متطلبات مشغّلي الخدمات لدينا بسيطة بما يكفي لتغطية كل ما يمكن أن يوفره
generateSW
وخيارات الإعداد. - أنت تعطي الأولوية لسهولة الاستخدام على المرونة.
استخدام أدوات إنشاء مربع العمل
إذا كنت تبحث عن طريقة غير مرتبطة بإطار العمل لاستخدام Workbox في عملية التصميم، فلديك ثلاثة خيارات:
workbox-cli
workbox-build
أداة سطر الأوامر.- استخدام أداة تجميع (مثل
workbox-webpack-plugin
)
توفّر كل أداة من أدوات التصميم هذه الوضعَين generateSW
وinjectManifest
، مع مجموعة متشابهة من الخيارات. هذه كلها خيارات جيدة إذا كنت لا تريد ربط مشغّل الخدمات الذي يدعمه Workbox بإطار عمل معين. لمعرفة أيّ من هذه الخيارات هو الأنسب، لنلقي نظرة سريعة على كل خيار.
workbox-cli
إذا كنت تبحث عن أقل حاجز ممكن للدخول إلى Workbox، فإن واجهة سطر الأوامر (CLI) هي الخيار المناسب لك:
npm install workbox-cli --save-dev
لبدء استخدام واجهة سطر الأوامر، شغِّل المعالج باستخدام 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'
};
بعد إنشاء ملف الإعداد، يمكن لواجهة سطر الأوامر تشغيل طريقة generateSW
أو injectManifest
نيابة عنك. يمكنك الاطّلاع على مزيد من المعلومات والأمثلة على الاستخدام في نص المساعدة الخاص بواجهة سطر الأوامر.
workbox-build
إنّ workbox-cli
هو برنامج تضمين وحدة workbox-build
، ويمكن استخدام workbox-build
مباشرةً بدلاً من ذلك. عند استخدام workbox-build
، بدلاً من تحديد الخيارات باستخدام ملف workbox-config.js
، ستستخدم الطريقة generateSW
أو injectManifest
مباشرةً كجزء من نص برمجي للعقدة، ما يؤدي إلى تمرير مجموعة مشابهة من الخيارات:
// build-sw.mjs
import {generateSW} from 'workbox-build';
generateSW({
globDirectory: 'dist/',
globPatterns: [
'**/*.{css,woff2,png,svg,jpg,js}'
],
swDest: 'dist/sw.js'
});
في المثال أعلاه، سيكتب workbox-build
مشغِّل الخدمات الذي تم إنشاؤه في الدليل dist
عند تشغيل الأمر node build-sw.mjs
.
استخدام حزمة
تتضمّن العديد من برامج الحزم مكونات إضافية خاصة بها في Workbox، إلا أنّ حزمة الويب هي حزمة الويب الوحيدة التي يستخدمها فريق Workbox، وذلك عبر 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
لأنّ webpack تعرف مسبقًا الأماكن التي يتم تجميع أصول الإنتاج فيها.
استخدام إطار عمل
يركّز كل ما يتم تناوله في هذه النقطة على استخدام Workbox بغض النظر عن تفضيلات إطار العمل. ومع ذلك، من الممكن استخدام Workbox ضمن إطار عمل محدّد إذا كان عملية التطوير أسهل. على سبيل المثال، يتم شحن create-react-app
تلقائيًا مع Workbox. سنتحدّث لاحقًا عن عمليات دمج أُطر العمل المختلفة مع Workbox في مقالة لاحقة.
وتجدر الإشارة إلى أنّ عمليات الدمج هذه الخاصة بإطار العمل في Workbox قد تحدّ من قدرتك على ضبط Workbox بالطريقة التي تريدها. في مثل هذه الحالات، يمكنك دائمًا الرجوع إلى الطرق التي تمت مناقشتها هنا.
ماذا لو لم يكن لديّ عملية تصميم؟
يفترض هذا المستند أن مشروعك يتضمن عملية تصميم، لكن مشروعك قد لا يكون كذلك في الواقع. إذا كان ذلك يصف حالتك، لا يزال بإمكانك استخدام Workbox مع وحدة workbox-sw
. باستخدام workbox-sw
، يمكنك تحميل بيئة تشغيل Workbox من شبكة توصيل للمحتوى (CDN) أو على الجهاز وإنشاء مشغّل الخدمات الخاص بك.
الخاتمة
وتضمن مرونة Workbox إمكانية استخدامه في أي مشروع تقريبًا، بغض النظر عن إطار العمل أو الإعدادات المفضّلة لسلسلة الأدوات. ستتيح لك جميع هذه الوسائل تنفيذ التخزين المؤقت والتخزين المؤقت في وقت التشغيل باستخدام طريقتين، مع توفير مرونة أكبر لمنح العاملين في الخدمة المزيد من الميزات المتقدمة عند الحاجة.