Workbox, दो webpack प्लग इन उपलब्ध कराता है: पहला, आपके लिए एक पूरा सर्विस वर्कर जनरेट करता है और दूसरा, पहले से कैश मेमोरी में सेव करने के लिए एसेट की सूची जनरेट करता है. इस सूची को सर्विस वर्कर फ़ाइल में इंजेक्ट किया जाता है.
प्लगिन को workbox-webpack-plugin
मॉड्यूल में, GenerateSW
और InjectManifest
नाम के दो क्लास के तौर पर लागू किया जाता है. नीचे दिए गए सवालों के जवाबों से, आपको सही प्लग इन और कॉन्फ़िगरेशन चुनने में मदद मिल सकती है.
कौनसा प्लग-इन इस्तेमाल करना है
GenerateSW
GenerateSW
प्लग-इन आपके लिए एक सेवा वर्कर फ़ाइल बनाएगा और उसे वेबपैक एसेट पाइपलाइन में जोड़ देगा.
GenerateSW
का इस्तेमाल कब करना चाहिए
- आपको फ़ाइलों को पहले से कैश मेमोरी में सेव करना है.
- आपको रनटाइम कैश मेमोरी से जुड़ी आसान ज़रूरतें हैं.
GenerateSW
का इस्तेमाल कब न करें
- आपको Service Worker की अन्य सुविधाओं (जैसे, वेब पुश) का इस्तेमाल करना है.
- आपको अतिरिक्त स्क्रिप्ट इंपोर्ट करनी हैं या कस्टम कैश मेमोरी से जुड़ी रणनीतियों के लिए अतिरिक्त लॉजिक जोड़ना है.
InjectManifest
InjectManifest
प्लग इन, पहले से कैश मेमोरी में सेव करने के लिए यूआरएल की सूची जनरेट करेगा और उस प्रीकैश मेनिफ़ेस्ट को किसी मौजूदा सेवा वर्कर फ़ाइल में जोड़ देगा. ऐसा न करने पर, फ़ाइल में कोई बदलाव नहीं किया जाएगा.
InjectManifest
का इस्तेमाल कब करना चाहिए
- आपको अपने सेवा वर्कर पर ज़्यादा कंट्रोल चाहिए.
- आप फ़ाइलों को प्रीकैश करना चाहते हैं.
- आपको रूटिंग और रणनीतियां अपने मुताबिक बनानी होंगी.
- आपको अपने सेवा वर्कर का इस्तेमाल, प्लैटफ़ॉर्म की अन्य सुविधाओं (जैसे, वेब पुश) के साथ करना है.
InjectManifest
का इस्तेमाल कब न करें
- आपको अपनी साइट में सेवा वर्कर जोड़ने का सबसे आसान तरीका चाहिए.
GenerateSW प्लग इन
GenerateSW
प्लगिन को अपने वेबपैक कॉन्फ़िगरेशन में इस तरह जोड़ा जा सकता है:
// 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: ...,
}),
],
};
इससे, आपके कॉन्फ़िगरेशन से चुनी गई सभी वेबपैक एसेट और दिए गए रनटाइम कैश मेमोरी से जुड़े नियमों के लिए, पहले से कैश मेमोरी में सेव करने की सुविधा के साथ एक सेवा वर्कर जनरेट होगा.
कॉन्फ़िगरेशन के विकल्पों का पूरा सेट इस रेफ़रंस दस्तावेज़ में मिल सकता है.
InjectManifest
प्लग इन
InjectManifest
प्लगिन को अपने वेबपैक कॉन्फ़िगरेशन में इस तरह जोड़ा जा सकता है:
// 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 बिल्ड के लिए प्लगिन का इस्तेमाल करने के बारे में जानकारी, Webpack दस्तावेज़ के "प्रोग्रेसिव वेब ऐप्लिकेशन" सेक्शन में मिल सकती है.
टाइप
GenerateSW
यह क्लास, webpack कंपाइलेशन प्रोसेस के हिस्से के तौर पर, इस्तेमाल के लिए तैयार नई सेवा वर्कर फ़ाइल बनाने की सुविधा देती है.
webpack कॉन्फ़िगरेशन के plugins
कलेक्शन में, GenerateSW
के किसी इंस्टेंस का इस्तेमाल करें.
// 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
अमान्य
GenerateSW का इंस्टेंस बनाता है.
constructor
फ़ंक्शन इस तरह दिखता है:(config?: GenerateSWConfig) => {...}
-
config
GenerateSWConfig ज़रूरी नहीं
-
returns
-
-
कॉन्फ़िगरेशन
GenerateSWConfig
प्रॉपर्टी
-
additionalManifestEntries
(string | ManifestEntry)[] ज़रूरी नहीं
बिल्ड कॉन्फ़िगरेशन के हिस्से के तौर पर जनरेट की गई एंट्री के साथ-साथ, प्रीकैश मेमोरी में सेव की जाने वाली एंट्री की सूची.
-
babelPresetEnvTargets
स्ट्रिंग[] ज़रूरी नहीं
डिफ़ॉल्ट वैल्यू यह है: ["chrome >= 56"]
सर्विस वर्कर बंडल को ट्रांसपिल करते समय,
babel-preset-env
को पास किए जाने वाले टारगेट. -
cacheId
स्ट्रिंग ज़रूरी नहीं
कैश मेमोरी के नामों के पहले एक वैकल्पिक आईडी जोड़ा जाना चाहिए. यह मुख्य रूप से स्थानीय डेवलपमेंट के लिए फ़ायदेमंद है, जहां एक ही
http://localhost:port
ऑरिजिन से कई साइटें दिखाई जा सकती हैं. -
चंक
string[] ज़रूरी नहीं
एक या उससे ज़्यादा चंक के नाम, जिनसे जुड़ी आउटपुट फ़ाइलों को प्रीकैश मेनिफ़ेस्ट में शामिल किया जाना चाहिए.
-
cleanupOutdatedCaches
बूलियन ज़रूरी नहीं
डिफ़ॉल्ट वैल्यू: false
क्या किसी पुराने और काम न करने वाले वर्शन से बनाए गए प्रीकैश की पहचान करने और उन्हें मिटाने की कोशिश वर्कबॉक्स को करनी चाहिए.
-
clientsClaim
बूलियन ज़रूरी नहीं
डिफ़ॉल्ट वैल्यू: false
सेवा वर्कर के चालू होने के बाद, क्या उसे किसी मौजूदा क्लाइंट को कंट्रोल करना शुरू करना चाहिए या नहीं.
-
directoryIndex
स्ट्रिंग ज़रूरी नहीं
अगर
/
पर खत्म होने वाले यूआरएल का नेविगेशन अनुरोध, पहले से कैश किए गए यूआरएल से मेल नहीं खाता, तो इस वैल्यू को यूआरएल में जोड़ दिया जाएगा. साथ ही, इसकी जांच की जाएगी कि यह पहले से कैश मेमोरी में सेव है या नहीं. इसे इस बात पर सेट करना चाहिए कि आपका वेब सर्वर अपने डायरेक्ट्री इंडेक्स के लिए क्या इस्तेमाल कर रहा है. -
disableDevLogs
बूलियन ज़रूरी नहीं
डिफ़ॉल्ट वैल्यू: false
-
dontCacheBustURLsMatching
रेगुलर एक्सप्रेशन ज़रूरी नहीं है
इससे मैच करने वाली एसेट को उनके यूआरएल के ज़रिए यूनीक वर्शन माना जाएगा. साथ ही, उन्हें प्रीकैश में जानकारी भरते समय, सामान्य एचटीटीपी कैश-बस्टिंग से छूट दी जाएगी. हालांकि, ऐसा करना ज़रूरी नहीं है, लेकिन अगर आपकी मौजूदा बिल्ड प्रोसेस में हर फ़ाइल के नाम में पहले से ही
[hash]
वैल्यू डाली जाती है, तो हमारा सुझाव है कि आप एक रेगुलर एक्सप्रेशन दें. इससे, प्रीकैश करने के दौरान खर्च होने वाले बैंडविड्थ को कम किया जा सकेगा. -
छोड़ें
(string | RegExp | function)[] ज़रूरी नहीं
एक या उससे ज़्यादा स्पेसिफ़ायर, जिनका इस्तेमाल प्रीकैश मेनिफ़ेस्ट से एसेट को बाहर रखने के लिए किया जाता है. इसे
webpack
के स्टैंडर्डexclude
विकल्प के उन ही नियमों के हिसाब से समझा जाता है. अगर कोई वैल्यू नहीं दी जाती है, तो डिफ़ॉल्ट वैल्यू[/\.map$/, /^manifest.*\.js$]
होती है. -
excludeChunks
स्ट्रिंग[] ज़रूरी नहीं
एक या उससे ज़्यादा चंक के नाम, जिनसे जुड़ी आउटपुट फ़ाइलों को प्रीकैश मेनिफ़ेस्ट से बाहर रखा जाना चाहिए.
-
ignoreURLParametersMatching
RegExp[] ज़रूरी नहीं
इस कलेक्शन में मौजूद किसी भी रेगुलर एक्सप्रेशन से मैच होने वाले सर्च पैरामीटर के नाम, प्रीकैश मेल खाने वाले पैरामीटर के नाम ढूंढने से पहले हटा दिए जाएंगे. यह तब काम आता है, जब आपके उपयोगकर्ता ऐसे यूआरएल का अनुरोध कर सकते हैं जिनमें ट्रैफ़िक के सोर्स को ट्रैक करने के लिए इस्तेमाल किए जाने वाले यूआरएल पैरामीटर शामिल हों. अगर यह एट्रिब्यूट सबमिट नहीं किया जाता है, तो डिफ़ॉल्ट वैल्यू के तौर पर
[/^utm_/, /^fbclid$/]
को चुना जाता है. -
importScripts
स्ट्रिंग[] ज़रूरी नहीं
JavaScript फ़ाइलों की सूची, जिन्हें जनरेट की गई सेवा वर्कर फ़ाइल में
importScripts()
के अंदर पास किया जाना चाहिए. यह तब काम आता है, जब आपको Workbox को अपनी टॉप-लेवल सेवा वर्कर फ़ाइल बनाने की अनुमति देनी हो, लेकिन आपको कुछ अतिरिक्त कोड शामिल करना हो, जैसे कि पुश इवेंट सुनने वाला. -
importScriptsViaChunks
string[] ज़रूरी नहीं
वेबपैक चंक के एक या उससे ज़्यादा नाम.
importScripts()
पर कॉल करके, इन हिस्सों का कॉन्टेंट, जनरेट किए गए सर्विस वर्कर में शामिल किया जाएगा. -
शामिल होते हैं
(string | RegExp | function)[] ज़रूरी नहीं
प्रीकैश मेनिफ़ेस्ट में ऐसेट शामिल करने के लिए इस्तेमाल किए जाने वाले एक या एक से ज़्यादा स्पेसिफ़ायर. इसे
webpack
के स्टैंडर्डinclude
विकल्प के उन ही नियमों के हिसाब से समझा जाता है. -
inlineWorkboxRuntime
बूलियन ज़रूरी नहीं
डिफ़ॉल्ट वैल्यू: false
Workbox लाइब्रेरी के लिए रनटाइम कोड को टॉप-लेवल सेवा वर्कर में शामिल किया जाना चाहिए या किसी अलग फ़ाइल में बांटकर, उसे सेवा वर्कर के साथ डिप्लॉय किया जाना चाहिए. रनटाइम को अलग रखने का मतलब है कि जब भी आपका टॉप-लेवल सेवा वर्कर बदलेगा, तब उपयोगकर्ताओं को Workbox कोड को फिर से डाउनलोड नहीं करना पड़ेगा.
-
manifestEntries
ManifestEntry[] ज़रूरी नहीं है
-
manifestTransforms
ManifestTransform[] ज़रूरी नहीं
एक या उससे ज़्यादा फ़ंक्शन, जिन्हें जनरेट किए गए मेनिफ़ेस्ट पर क्रम से लागू किया जाएगा. अगर
modifyURLPrefix
याdontCacheBustURLsMatching
के लिए भी वैल्यू दी गई है, तो पहले उनके लिए ट्रांसफ़ॉर्मेशन लागू किए जाएंगे. -
maximumFileSizeToCacheInBytes
number ज़रूरी नहीं
डिफ़ॉल्ट वैल्यू: 2097152
इस वैल्यू का इस्तेमाल, पहले से कैश मेमोरी में सेव की जाने वाली फ़ाइलों के ज़्यादा से ज़्यादा साइज़ का पता लगाने के लिए किया जा सकता है. इससे, अनजाने में बहुत बड़ी फ़ाइलों को पहले से कैश मेमोरी में सेव होने से रोका जा सकता है. ऐसा तब हो सकता है, जब वे फ़ाइलें आपके किसी पैटर्न से मैच कर रही हों.
-
मोड
स्ट्रिंग ज़रूरी नहीं
अगर इसे 'प्रोडक्शन' पर सेट किया जाता है, तो डीबग करने से जुड़ी जानकारी को हटाकर, ऑप्टिमाइज़ किया गया सेवा वर्कर बंडल बनाया जाएगा. अगर यहां साफ़ तौर पर कॉन्फ़िगर नहीं किया गया है, तो मौजूदा
webpack
कलेक्शन में कॉन्फ़िगर की गईmode
वैल्यू का इस्तेमाल किया जाएगा. -
modifyURLPrefix
ऑब्जेक्ट ज़रूरी नहीं है
ऑब्जेक्ट मैपिंग स्ट्रिंग के प्रीफ़िक्स, स्ट्रिंग की वैल्यू बदलने के प्रीफ़िक्स हैं. इसका इस्तेमाल, मेनिफ़ेस्ट एंट्री से पाथ प्रीफ़िक्स हटाने या जोड़ने के लिए किया जा सकता है. ऐसा तब होगा, जब आपकी वेब होस्टिंग का सेट अप, आपके लोकल फ़ाइल सिस्टम के सेटअप से मैच नहीं करता हो. ज़्यादा सुविधा वाले विकल्प के तौर पर,
manifestTransforms
विकल्प का इस्तेमाल किया जा सकता है. साथ ही, ऐसा फ़ंक्शन दिया जा सकता है जो दिए गए लॉजिक का इस्तेमाल करके, मेनिफ़ेस्ट में एंट्री में बदलाव करता है.इस्तेमाल का उदाहरण:
// Replace a '/dist/' prefix with '/', and also prepend // '/static' to every URL. modifyURLPrefix: { '/dist/': '/', '': '/static', }
-
स्ट्रिंग ज़रूरी नहीं
डिफ़ॉल्ट वैल्यू: null
अगर यह जानकारी दी गई है, तो पहले से कैश मेमोरी में सेव नहीं किए गए यूआरएल के लिए, सभी नेविगेशन अनुरोध, दिए गए यूआरएल पर मौजूद एचटीएमएल से पूरे किए जाएंगे. आपको उस एचटीएमएल दस्तावेज़ का यूआरएल डालना होगा जो आपके प्रीकैश मेनिफ़ेस्ट में शामिल है. इसका इस्तेमाल, एक पेज वाले ऐप्लिकेशन के ऐसे मामले में किया जाता है जहां आपको सभी नेविगेशन के लिए, एक ही ऐप्लिकेशन शेल एचटीएमएल का इस्तेमाल करना हो.
-
RegExp[] ज़रूरी नहीं
रेगुलर एक्सप्रेशन का वैकल्पिक कलेक्शन, जो यह तय करता है कि कॉन्फ़िगर किया गया
navigateFallback
व्यवहार किन यूआरएल पर लागू होगा. यह तब काम आता है, जब आपकी साइट के यूआरएल के सिर्फ़ एक सबसेट को सिंगल पेज ऐप्लिकेशन के हिस्से के तौर पर माना जाना चाहिए. अगरnavigateFallbackDenylist
औरnavigateFallbackAllowlist
, दोनों को कॉन्फ़िगर किया गया है, तो ब्लैकलिस्ट को प्राथमिकता दी जाती है.ध्यान दें: नेविगेशन के दौरान, इन रेगुलर एक्सप्रेशन का आकलन हर डेस्टिनेशन यूआरएल के हिसाब से किया जा सकता है. जटिल रेगुलर एक्सप्रेशन का इस्तेमाल करने से बचें. ऐसा न करने पर, आपके उपयोगकर्ताओं को आपकी साइट पर नेविगेट करने में देरी हो सकती है.
-
RegExp[] ज़रूरी नहीं
रेगुलर एक्सप्रेशन का वैकल्पिक कलेक्शन, जो यह तय करता है कि कॉन्फ़िगर किया गया
navigateFallback
व्यवहार किन यूआरएल पर लागू होगा. यह तब काम आता है, जब आपकी साइट के यूआरएल के सिर्फ़ एक सबसेट को सिंगल पेज ऐप्लिकेशन के हिस्से के तौर पर माना जाना चाहिए. अगरnavigateFallbackDenylist
औरnavigateFallbackAllowlist
, दोनों को कॉन्फ़िगर किया गया है, तो 'पाबंदी वाली सूची' को प्राथमिकता दी जाती है.ध्यान दें: नेविगेशन के दौरान, इन रेगुलर एक्सप्रेशन का आकलन हर डेस्टिनेशन यूआरएल के हिसाब से किया जा सकता है. जटिल रेगुलर एक्सप्रेशन का इस्तेमाल करने से बचें. ऐसा न करने पर, आपके उपयोगकर्ताओं को आपकी साइट पर नेविगेट करने में देरी हो सकती है.
-
बूलियन ज़रूरी नहीं
डिफ़ॉल्ट वैल्यू: false
जनरेट किए गए सर्विस वर्कर में, नेविगेशन को पहले से लोड करने की सुविधा को चालू करना है या नहीं. अगर नीति को 'सही है' पर सेट किया जाता है, तो आपको रिस्पॉन्स की सही रणनीति सेट अप करने के लिए
runtimeCaching
का भी इस्तेमाल करना होगा. यह रणनीति, नेविगेशन के अनुरोधों से मैच करेगी और पहले से लोड किए गए रिस्पॉन्स का इस्तेमाल करेगी. -
offlineGoogleAnalytics
बूलियन | GoogleAnalyticsInitializeOptions ज़रूरी नहीं
डिफ़ॉल्ट वैल्यू: false
इससे यह कंट्रोल होता है कि ऑफ़लाइन Google Analytics के लिए सहायता शामिल की जाए या नहीं.
true
पर,workbox-google-analytics
केinitialize()
को किया गया कॉल, आपके जनरेट किए गए सर्विस वर्कर में जोड़ दिया जाएगा.Object
पर सेट होने पर, उस ऑब्जेक्ट कोinitialize()
कॉल में पास कर दिया जाएगा. इससे, आपको व्यवहार को पसंद के मुताबिक बनाने की सुविधा मिलेगी. -
runtimeCaching
RuntimeCaching[] ज़रूरी नहीं
सर्विस वर्कर जनरेट करने के लिए, Workbox के बिल्ड टूल का इस्तेमाल करते समय, एक या उससे ज़्यादा रनटाइम कैशिंग कॉन्फ़िगरेशन तय किए जा सकते हैं. इसके बाद, आपके तय किए गए मैच और हैंडलर कॉन्फ़िगरेशन का इस्तेमाल करके, इन्हें
workbox-routing.registerRoute
कॉल में बदल दिया जाता है.सभी विकल्पों के लिए,
workbox-build.RuntimeCaching
दस्तावेज़ देखें. नीचे दिए गए उदाहरण में एक सामान्य कॉन्फ़िगरेशन दिखाया गया है, जिसमें दो रनटाइम रूट तय किए गए हैं: -
skipWaiting
बूलियन ज़रूरी नहीं
डिफ़ॉल्ट वैल्यू: false
जनरेट किए गए सेवा वर्कर में,
skipWaiting()
के लिए बिना शर्त वाला कॉल जोड़ना है या नहीं. अगरfalse
, तो इसकी जगह एकmessage
लिसनर जोड़ दिया जाएगा जिससे वेटिंग सर्विस वर्कर कोpostMessage({type: 'SKIP_WAITING'})
कॉल करके क्लाइंट पेजskipWaiting()
को ट्रिगर कर सकेंगे. -
सोर्समैप
बूलियन ज़रूरी नहीं
डिफ़ॉल्ट वैल्यू यह है: true
जनरेट की गई सेवा वर्कर फ़ाइलों के लिए सोर्समैप बनाना है या नहीं.
-
swDest
स्ट्रिंग ज़रूरी नहीं
डिफ़ॉल्ट वैल्यू: "service-worker.js"
इस प्लगिन से बनाई गई सर्विस वर्कर फ़ाइल की ऐसेट का नाम.
InjectManifest
यह क्लास, swSrc
के ज़रिए दी गई सेवा वर्कर फ़ाइल को कॉम्पाइल करने के साथ-साथ, उस सेवा वर्कर में यूआरएल की सूची और बदलाव की जानकारी को इंजेक्ट करने की सुविधा देती है. ऐसा, वेबपैक एसेट पाइपलाइन के आधार पर, पहले से कैश मेमोरी में सेव करने के लिए किया जाता है.
webpack कॉन्फ़िगरेशन के plugins
कलेक्शन में, InjectManifest
के किसी इंस्टेंस का इस्तेमाल करें.
मेनिफ़ेस्ट को इंजेक्ट करने के अलावा, यह प्लग इन मुख्य वेबपैक कॉन्फ़िगरेशन के विकल्पों का इस्तेमाल करके, swSrc
फ़ाइल को कंपाइल करेगा.
// 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
अमान्य
InjectManifest का इंस्टेंस बनाता है.
constructor
फ़ंक्शन इस तरह दिखता है:(config: WebpackInjectManifestOptions) => {...}
-
कॉन्फ़िगरेशन
-
returns
-
-
config
प्रॉपर्टी
default
टाइप
ऑब्जेक्ट
प्रॉपर्टी
-
GenerateSW
क्वेरी
-
InjectManifest
क्वेरी