תיבת העבודה גמישה מספיק בשביל להכיל כמעט כל תהליך build של פרויקט. המשמעות היא שיש יותר מדרך אחת להשתמש ב-Workbox, כדי שתוכלו לבחור את השילוב המתאים לפרויקט. לא משנה איך אתם משתלבים עם Workbox, הכלים השונים מציעים ממשק API דומה.
generateSW
מול injectManifest
עליך להשתמש באחת משתי שיטות הליבה בכלי ה-build של Workbox: generateSW
או injectManifest
. בחירת הפורמט שבו כדאי להשתמש תלויה במידת הגמישות הדרושה. ב-generateSW
תינתן עדיפות לפשטות השימוש ולפשטות במחיר הגמישות, כך שאתם יכולים להצהיר על קבוצת אפשרויות הגדרה ולהחזיר לכם כלי שירות שפועל באופן מלא.
ב-injectManifest
יש העדפה לגמישות רבה יותר תמורת פשטות מסוימת, כי בסופו של דבר אתם תכתובו את הקוד בעצמכם ל-Service Worker, כש-injectManifest
יספק מניפסט מטמון מראש שאפשר להשתמש בו בשיטות השמירה מראש של Workbox.
מתי להשתמש במאפיין generateSW
כדאי להשתמש ב-generateSW
אם:
- כדאי לשמור מראש קבצים שמשויכים לתהליך ה-build, כולל קבצים שכתובות ה-URL שלהם מכילות גיבובים שייתכן שאתם לא יודעים מראש.
- יש לך צרכים פשוטים לשמירה במטמון של זמן ריצה, ואפשר להגדיר אותם באמצעות האפשרויות של
generateSW
.
מתי לא להשתמש בgenerateSW
מצד שני, לא כדאי להשתמש ב-generateSW
אם:
- רוצים להשתמש בתכונות אחרות של Service Worker (כמו Web Push).
- נדרשת גמישות נוספת כדי לייבא סקריפטים נוספים או להשתמש במודולים ספציפיים של Workbox כדי להתאים את Service Worker לצרכים של האפליקציה שלכם.
מתי להשתמש במאפיין injectManifest
כדאי להשתמש ב-injectManifest
אם:
- אתם רוצים לשמור קבצים במטמון, אבל רוצים לכתוב Service Worker משלכם.
- יש לך צורכי שמירה מורכבים במטמון או בניתוב שאי אפשר לבטא באמצעות אפשרויות ההגדרה של
generateSW
- אתם רוצים להשתמש בממשקי API אחרים ב-Service Worker (כמו Web Push).
השיטה injectManifest
שונה מ-generateSW
בכך שהיא מחייבת לציין קובץ worker של שירות מקור. בתהליך העבודה הזה, קובץ ה-method של שירות המקור צריך לכלול מחרוזת self.__WB_MANIFEST
מיוחדת כדי ש-injectManifest
יוכל להחליף אותו במניפסט של המטמון מראש.
מתי לא להשתמש בinjectManifest
לא כדאי להשתמש בתכונה injectManifest
אם:
- אתם לא רוצים להשתמש בהשהיה מראש במטמון ב-Service Worker.
- דרישות קובצי השירות שלנו פשוטות מספיק כדי לענות על הצרכים של
generateSW
ואפשרויות ההגדרה שלו. - יותר קל להשתמש בגמישות, יותר מאשר בגמישות.
שימוש בכלי ה-build של Workbox
אם אתם מחפשים דרך ללא שיוך (framework) לשימוש ב-Workbox בתהליך ה-build, יש לכם שלוש אפשרויות:
workbox-cli
workbox-build
כלי שורת הפקודה.- שימוש ב-Bundler (כמו
workbox-webpack-plugin
).
כל אחד מכלי ה-build האלה מציע את המצב generateSW
וגם את המצב injectManifest
, עם קבוצת אפשרויות דומה. אלו כל האפשרויות המומלצות אם לא רוצים לקשר את קובץ השירות (service worker) המופעל על ידי Workbox ל-framework מסוים. כדי לדעת איזו מהאפשרויות האלה היא המתאימה ביותר, בואו נסתכל על כל אחת מהן.
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
הוא wrapper במסגרת המודול 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'
});
בדוגמה שלמעלה, ה-Service Worker שנוצר ייכתב בספרייה dist
על ידי workbox-build
כשמריצים את הפקודה node build-sw.mjs
.
שימוש ב-bundler
ל-Bunders שונים יש יישומי פלאגין משלהם ל-Workbox, אבל ה-bundler היחיד שנתמך באופן רשמי על ידי צוות Workbox הוא webpack, דרך workbox-webpack-plugin
. בדומה ל-workbox-cli
ול-workbox-build
, גם workbox-webpack-plugin
יפעיל את ה-methods 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 כבר יודע איפה מקובצים נכסי הייצור שלכם.
שימוש ב-framework
כל מה שנאמר כאן מתמקד בשימוש ב-Workbox, בלי קשר להעדפות של מסגרת העבודה. אבל אפשר להשתמש ב-Workbox ב-framework ספציפי אם זה מקל על הפיתוח. לדוגמה, המשלוח של create-react-app
כולל את Workbox כברירת מחדל. בהמשך המאמר הזה מוסבר על שילובים שונים של framework עם Workbox.
חשוב לציין שהשילובים האלה של Workbox ספציפיים למסגרת עשויים להגביל את היכולת שלכם להגדיר את Workbox באופן הרצוי לכם. במקרים כאלה, תמיד אפשר להשתמש בשיטות שמפורטות כאן.
מה לעשות אם אין לי תהליך build?
המסמך הזה מניח שלפרויקט שלכם יש תהליך build, אבל למעשה יכול להיות שבפרויקט שלכם אין תהליך כזה. אם תיאור זה מתאים לכם, עדיין אפשר להשתמש ב-Workbox עם המודול workbox-sw
. באמצעות workbox-sw
תוכלו לטעון את סביבת זמן הריצה של תיבת העבודה מ-CDN או באופן מקומי, וליצור קובץ שירות (service worker) משלכם.
סיכום
הגמישות של ארגז העבודה מבטיחה שאפשר להשתמש בה כמעט בכל פרויקט, ללא קשר להעדפות של ה-framework או של שרשרת הכלים. כל הדרכים האלה יאפשרו לכם לבצע שמירה מראש במטמון ושמירה במטמון בזמן הריצה בשתי שיטות. במקביל, יש לכם יותר גמישות לבניית עובדי שירות עם תכונות מתקדמות יותר בשעת הצורך.