בתיבת העבודה יש שני יישומי פלאגין מסוג webpack: אחד שיוצר בשבילכם קובץ שירות (service worker) וקובץ אחד שיוצר רשימת נכסים לשמירה מראש שמוחדרת לקובץ של Service Worker.
הפלאגינים מוטמעים בשתי כיתות במודול workbox-webpack-plugin
, שנקראות GenerateSW
ו-InjectManifest
. התשובות לשאלות הבאות יכולות לעזור לכם לבחור את הפלאגין וההגדרות המתאימים לשימוש.
באיזה פלאגין להשתמש
GenerateSW
הפלאגין GenerateSW
ייצור בשבילכם קובץ Service Worker ויוסיף אותו לצינור עיבוד הנתונים של נכסי Webpack.
מתי כדאי להשתמש ב-GenerateSW
- אתם רוצים לשמור קבצים במטמון מראש.
- יש לך צרכים פשוטים לשמירה במטמון של סביבת זמן הריצה.
מתי לא כדאי להשתמש ב-GenerateSW
- אתם רוצים להשתמש בתכונות אחרות של Service Worker (למשל Web Push).
- אתם רוצים לייבא סקריפטים נוספים או להוסיף לוגיקה נוספת לאסטרטגיות שמירת מטמון בהתאמה אישית.
InjectManifest
הפלאגין InjectManifest
ייצור רשימה של כתובות URL לאחסון במטמון מראש, ויוסיף את המניפסט של האחסון במטמון מראש לקובץ קיים של שירות העבודה. אחרת, הקובץ יישאר כפי שהוא.
מתי כדאי להשתמש ב-InjectManifest
- אתם רוצים יותר שליטה על Service Worker.
- רוצים לשמור קבצים מראש במטמון.
- צריך להתאים אישית את הניתוב והאסטרטגיות.
- אתם רוצים להשתמש ב-service worker עם תכונות אחרות בפלטפורמה (למשל Web Push).
מתי לא להשתמש במאפיין InjectManifest
- אתם רוצים להוסיף שירות ל-worker לאתר שלכם בדרך הקלה ביותר.
הפלאגין GenerateSW
אפשר להוסיף את הפלאגין GenerateSW
להגדרות של webpack באופן הבא:
// Inside of webpack.config.js:
const {GenerateSW} = require('workbox-webpack-plugin');
module.exports = {
// Other webpack config...
plugins: [
// Other plugins...
new GenerateSW({
// These are some common options, and not all are required.
// Consult the docs for more info.
exclude: [/.../, '...'],
maximumFileSizeToCacheInBytes: ...,
navigateFallback: '...',
runtimeCaching: [{
// Routing via a matchCallback function:
urlPattern: ({request, url}) => ...,
handler: '...',
options: {
cacheName: '...',
expiration: {
maxEntries: ...,
},
},
}, {
// Routing via a RegExp:
urlPattern: new RegExp('...'),
handler: '...',
options: {
cacheName: '...',
plugins: [..., ...],
},
}],
skipWaiting: ...,
}),
],
};
הפעולה הזו תיצור Service Worker עם הגדרה מראש במטמון לכל נכסי ה-webpack שנבחרו על ידי ההגדרה שלכם, וכללי השמירה במטמון זמן הריצה שסופקו.
קבוצה מלאה של אפשרויות הגדרה מפורטת במסמכי העזרה.
פלאגין InjectManifest
אפשר להוסיף את הפלאגין InjectManifest
להגדרות של webpack באופן הבא:
// Inside of webpack.config.js:
const {InjectManifest} = require('workbox-webpack-plugin');
module.exports = {
// Other webpack config...
plugins: [
// Other plugins...
new InjectManifest({
// These are some common options, and not all are required.
// Consult the docs for more info.
exclude: [/.../, '...'],
maximumFileSizeToCacheInBytes: ...,
swSrc: '...',
}),
],
};
הפעולה הזו תיצור מניפסט מראש במטמון שמבוסס על נכסי ה-webpack שנאספו על ידי ההגדרה שלכם, ותכניס אותו לקובץ השירות (service worker) הכלול בחבילה.
קבוצה מלאה של אפשרויות הגדרה מפורטת במסמכי העזרה.
מידע נוסף
הנחיות לשימוש בפלאגינים בהקשר של build גדול יותר של webpack מפורטות בקטע Progressive Web Application במסמכי התיעוד של webpack.
סוגים
GenerateSW
הכיתה הזו תומכת ביצירת קובץ חדש של שירות עבודה מוכן לשימוש, כחלק מתהליך הידור ה-Webpack.
משתמשים במופע של GenerateSW
במערך plugins
של קובץ ההגדרות של webpack.
// The following lists some common options; see the rest of the documentation
// for the full set of options and defaults.
new GenerateSW({
exclude: [/.../, '...'],
maximumFileSizeToCacheInBytes: ...,
navigateFallback: '...',
runtimeCaching: [{
// Routing via a matchCallback function:
urlPattern: ({request, url}) => ...,
handler: '...',
options: {
cacheName: '...',
expiration: {
maxEntries: ...,
},
},
}, {
// Routing via a RegExp:
urlPattern: new RegExp('...'),
handler: '...',
options: {
cacheName: '...',
plugins: [..., ...],
},
}],
skipWaiting: ...,
});
מאפיינים
-
constructor
void
יצירת מכונה של GenerateSW.
הפונקציה
constructor
נראית כך:(config?: GenerateSWConfig) => {...}
-
config
GenerateSWConfig אופציונלי
-
החזרות
-
-
config
GenerateSWConfig
מאפיינים
-
additionalManifestEntries
(string | ManifestEntry)[] אופציונלי
רשימה של רשומות שיאוחסנו במטמון מראש, בנוסף לכל רשומה שנוצרת כחלק מהגדרת ה-build.
-
babelPresetEnvTargets
string[] אופציונלי
ערך ברירת המחדל הוא: ["chrome >= 56"]
היעדים שצריך להעביר ל-
babel-preset-env
במהלך המרת ה-bundle של ה-service worker. -
cacheId
מחרוזת אופציונלי
מזהה אופציונלי שיצורף מראש לשמות המטמון. האפשרות הזו שימושית בעיקר לפיתוח מקומי, שבו יכול להיות שמוצגים כמה אתרים מאותו מקור
http://localhost:port
. -
גושים
string[] אופציונלי
שם של מקטע אחד או יותר, שקבצי הפלט התואמים שלו צריכים להיכלל במניפסט של האחסון המוקדם.
-
cleanupOutdatedCaches
בוליאני אופציונלי
ערך ברירת המחדל הוא: false
האם ל-Workbox יהיה ניסיון לזהות ולמחוק נתונים שנשמרו מראש על ידי גרסאות ישנות יותר שלא תואמות.
-
clientsClaim
בוליאני אופציונלי
ערך ברירת המחדל הוא: false
אם להתחיל לשלוט בלקוחות קיימים ברגע שה-service worker מופעל.
-
directoryIndex
מחרוזת אופציונלי
אם בקשת ניווט לכתובת URL שמסתיימת ב-
/
לא תואמת לכתובת URL שנשמרה במטמון, הערך הזה יתווסף לכתובת ה-URL וייבדק אם יש התאמה למטמון. צריך להגדיר את השדה הזה לפי השרת של האינטרנט שמשתמש באינדקס הספרייה שלו. -
disableDevLogs
בוליאני אופציונלי
ערך ברירת המחדל הוא: false
-
dontCacheBustURLsMatching
ביטוי רגולרי (RegExp) אופציונלי
נכסים שתואמים לתנאי הזה ייחשבו כנכסים עם גרסה ייחודית באמצעות כתובת ה-URL שלהם, והם פטורים מהפעלת ה-HTTP רגילה לביטול מטמון שמתבצעת בזמן האכלוס של המטמון המוקדם. אומנם לא חובה, אבל מומלץ שאם בתהליך ה-build הקיים כבר יוסיף ערך
[hash]
לכל שם קובץ, תצטרכו לספק RegExp כדי לזהות זאת, כי הוא יצמצם את רוחב הפס שצורך במהלך השמירה למטמון. -
אל תכלול
(string | RegExp | function)[] אופציונלי
מציין אחד או יותר שמשמשים להחרגת נכסים מהמניפסט של המטמון מראש. המשמעות של ההגדרה הזו היא לפי אותם הכללים שמוגדרים לאפשרות
exclude
הרגילה שלwebpack
. אם לא מציינים אותו, ערך ברירת המחדל הוא[/\.map$/, /^manifest.*\.js$]
. -
excludeChunks
string[] אופציונלי
שם של מקטע אחד או יותר, שקבצי הפלט התואמים שלו צריכים להיכלל במניפסט של האחסון המוקדם.
-
ignoreURLParametersMatching
RegExp[] אופציונלי
כל שמות הפרמטרים של החיפוש שתואמים לאחד מהביטויים הרגולריים (RegExp) במערך הזה יוסרו לפני חיפוש התאמה של נתונים שנשמרו במטמון מראש. האפשרות הזו שימושית אם המשתמשים שלכם עשויים לבקש כתובות URL שמכילות, למשל, פרמטרים של כתובות URL שמשמשים למעקב אחר מקור התנועה. אם לא מציינים אותו, ערך ברירת המחדל הוא
[/^utm_/, /^fbclid$/]
. -
importScripts
string[] אופציונלי
רשימה של קובצי JavaScript שצריך להעביר אל
importScripts()
בתוך קובץ ה-service worker שנוצר. האפשרות הזו שימושית אם רוצים לאפשר ל-Workbox ליצור את קובץ ה-service worker ברמה העליונה, אבל רוצים לכלול קוד נוסף, כמו מאזין לאירועי דחיפה. -
importScriptsViaChunks
string[] אופציונלי
שם אחד או יותר של קטעי קוד ב-Webpack. התוכן של הקטעים האלה ייכלל ב-service worker שנוצר, באמצעות קריאה ל-
importScripts()
. -
כוללים
(string | RegExp | function)[] אופציונלי
ספציפי אחד או יותר שמשמש לכלול נכסים במניפסט של האחסון המוקדם. המשמעות של ההגדרה הזו היא לפי אותם כללים כמו האפשרות הרגילה של
webpack
ב-include
. -
inlineWorkboxRuntime
ערך בוליאני אופציונלי
ערך ברירת המחדל הוא: false
האם קוד זמן הריצה של ספריית Workbox צריך להיכלל ב-service worker ברמה העליונה, או לפצל אותו לקובץ נפרד שצריך לפרוס לצד ה-service worker. הפרדה של סביבת זמן הריצה מאפשרת למשתמשים לא להוריד מחדש את הקוד של Workbox בכל פעם שמשתנה ה-service worker ברמה העליונה.
-
manifestEntries
ManifestEntry[] אופציונלי
-
manifestTransforms
ManifestTransform[] אופציונלי
פונקציה אחת או יותר שיחולו ברצף על המניפסט שנוצר. אם מציינים גם את
modifyURLPrefix
או אתdontCacheBustURLsMatching
, הטרנספורמציות התואמות שלהם יחולו קודם. -
maximumFileSizeToCacheInBytes
מספר אופציונלי
ערך ברירת המחדל הוא: 2097152
אפשר להשתמש בערך הזה כדי לקבוע את הגודל המקסימלי של הקבצים שיישמרו מראש במטמון. כך תוכלו למנוע אחסון מראש בטעות של קבצים גדולים מאוד, שיכול להיות שתואמים בטעות לאחד מהדפוסים שלכם.
-
מצב
מחרוזת אופציונלי
אם המדיניות מוגדרת כ-production, המערכת תיצור חבילת Service Worker שעברה אופטימיזציה ולא כוללת מידע על ניפוי באגים. אם לא תגדירו אותו כאן באופן מפורש, המערכת תשתמש בערך
mode
שהוגדר ב-webpack
הנוכחי. -
modifyURLPrefix
אובייקט אופציונלי
אובייקט שממפה תחיליות של מחרוזות לערכים של מחרוזות חלופיות. למשל, אפשר להסיר או להוסיף קידומת של נתיב מרשומת מניפסט, אם ההגדרה של אירוח באינטרנט לא תואמת להגדרה של מערכת הקבצים המקומית. לחלופין, אפשר להשתמש באפשרות
manifestTransforms
ולספק פונקציה שמשנה את הרשומות במניפסט לפי הלוגיקה שסיפקתם.דוגמה לשימוש:
// Replace a '/dist/' prefix with '/', and also prepend // '/static' to every URL. modifyURLPrefix: { '/dist/': '/', '': '/static', }
-
מחרוזת אופציונלי
ערך ברירת המחדל הוא: null
אם מציינים זאת, כל בקשות הניווט לכתובות URL שלא נשמרות מראש ימולאו באמצעות ה-HTML בכתובת ה-URL שסופקה. צריך להעביר את כתובת ה-URL של מסמך HTML שמופיע במניפסט של האחסון המוקדם. האפשרות הזו מיועדת לשימוש בתרחיש של אפליקציה עם דף יחיד, שבו רוצים שכל הניווטים ישתמשו ב-HTML של פגז האפליקציה משותף.
-
RegExp[] אופציונלי
מערך אופציונלי של ביטויים רגולריים שמגביל את כתובות ה-URL שעליהן חלה ההתנהגות של
navigateFallback
שהוגדרה. האפשרות הזו שימושית אם רוצים להתייחס רק לקבוצת משנה של כתובות ה-URL באתר כחלק מאפליקציה של דף יחיד. אם מוגדרות גםnavigateFallbackDenylist
וגםnavigateFallbackAllowlist
, רשימת הדחייה מקבלת עדיפות.הערה: יכול להיות שה-RegExps האלה ייבדקו כנגד כל כתובת URL של יעד במהלך ניווט. מומלץ להימנע משימוש בביטויים רגולריים מורכבים, אחרת המשתמשים עשויים להבחין בעיכובים בזמן הניווט באתר.
-
RegExp[] אופציונלי
מערך אופציונלי של ביטויים רגולריים שמגביל את כתובות ה-URL שאליהם יחול ההתנהגות
navigateFallback
שהוגדרה. האפשרות הזו שימושית אם צריך להתייחס רק לקבוצת משנה של כתובות ה-URL של האתר כחלק מאפליקציה בדף יחיד. אם מגדירים גם אתnavigateFallbackDenylist
וגם אתnavigateFallbackAllowlist
, רשימת הישויות שנחסמו מקבלות קדימות.הערה: יכול להיות שה-RegExps האלה ייבדקו כנגד כל כתובת URL של יעד במהלך ניווט. לא מומלץ להשתמש ב-Complex RegExps, אחרת המשתמשים עשויים לראות עיכובים בזמן הניווט באתר.
-
ערך בוליאני אופציונלי
ערך ברירת המחדל הוא: false
האם להפעיל טעינה מראש של ניווט ב-service worker שנוצר. כשהערך מוגדר כ-true, צריך להשתמש גם ב-
runtimeCaching
כדי להגדיר אסטרטגיית תגובה מתאימה שתתאים לבקשות הניווט, ולהשתמש בתגובה שהוטענה מראש. -
offlineGoogleAnalytics
בוליאני | GoogleAnalyticsInitializeOptions אופציונלי
ערך ברירת המחדל הוא: false
ההגדרה קובעת אם לכלול תמיכה ב-Google Analytics אופליין. בתאריך
true
, הקריאה ל-initialize()
שלworkbox-google-analytics
תתווסף ל-Service Worker שנוצר. כשהאובייקט מוגדר ל-Object
, האובייקט יועבר לקריאהinitialize()
, כך שתוכלו להתאים אישית את ההתנהגות. -
runtimeCaching
RuntimeCaching[] אופציונלי
כשמשתמשים בכלי ה-build של Workbox כדי ליצור את קובץ השירות (service worker), אפשר לציין הגדרה אחת או יותר לשמירה במטמון של סביבת זמן הריצה. לאחר מכן הקריאות האלה מתורגמות לקריאות
workbox-routing.registerRoute
באמצעות הגדרות ההתאמה והטיפול (handler) שתגדירו.למידע על כל האפשרויות, עיינו במשאבי העזרה של
workbox-build.RuntimeCaching
. בדוגמה הבאה אפשר לראות הגדרה אופיינית, עם שני נתיבים של זמן ריצה: -
skipWaiting
ערך בוליאני אופציונלי
ערך ברירת המחדל הוא: false
האם להוסיף קריאה לא מותנית ל-
skipWaiting()
ל-Service Worker שנוצר. אם הערך הואfalse
, במקום זאת יתווסף מאזיןmessage
, שיאפשר לדפי לקוח להפעיל אתskipWaiting()
על ידי קריאה ל-postMessage({type: 'SKIP_WAITING'})
ב-service worker שממתין. -
sourcemap
בוליאני אופציונלי
ערך ברירת המחדל הוא: true
האם ליצור מפת מקור לקובצי ה-service worker שנוצרו.
-
swDest
מחרוזת אופציונלי
ערך ברירת המחדל הוא: "service-worker.js"
שם הנכס של קובץ Service Worker שנוצר על ידי הפלאגין הזה.
InjectManifest
הכיתה הזו תומכת בהידור של קובץ Service Worker שסופק דרך swSrc
, ובהחדרה ל-Service Worker רשימת כתובות URL ופרטי גרסאות לצורך שמירה מראש במטמון על סמך צינור עיבוד הנתונים של נכסי ה-webpack.
משתמשים במופע של InjectManifest
במערך plugins
של קובץ ההגדרה של webpack.
בנוסף להחדרת המניפסט, הפלאגין יבצע הידור של הקובץ swSrc
באמצעות האפשרויות מהתצורה הראשית של webpack.
// The following lists some common options; see the rest of the documentation
// for the full set of options and defaults.
new InjectManifest({
exclude: [/.../, '...'],
maximumFileSizeToCacheInBytes: ...,
swSrc: '...',
});
מאפיינים
-
constructor
void
יצירת מופע של InjectManifest.
הפונקציה
constructor
נראית כך:(config: WebpackInjectManifestOptions) => {...}
-
config
-
החזרות
-
-
config
מאפיינים
default
סוג
אובייקט
מאפיינים
-
GenerateSW
שאילתה
-
InjectManifest
שאילתה