Workbox มีปลั๊กอิน Webpack จำนวน 2 ปลั๊กอิน โดยปลั๊กอินหนึ่งจะสร้าง Service Worker ที่สมบูรณ์ให้คุณ และอีกปลั๊กอินหนึ่งที่จะสร้างรายการเนื้อหาเพื่อแคชล่วงหน้าที่จะแทรกลงในไฟล์ Service Worker
ปลั๊กอินติดตั้งใช้งานเป็น 2 คลาสในโมดูล workbox-webpack-plugin
ที่มีชื่อว่า GenerateSW
และ InjectManifest
คำตอบของคําถามต่อไปนี้จะช่วยคุณเลือกปลั๊กอินและการกำหนดค่าที่เหมาะสม
ปลั๊กอินที่ควรใช้
GenerateSW
ปลั๊กอิน GenerateSW
จะสร้างไฟล์ Service Worker ให้คุณและเพิ่มลงในไปป์ไลน์ชิ้นงาน webpack
กรณีที่ควรใช้ GenerateSW
- คุณต้องการแคชไฟล์ไว้ล่วงหน้า
- คุณต้องใช้แคชรันไทม์แบบง่าย
ไม่ควรใช้ GenerateSW
เมื่อใด
- คุณต้องการใช้ฟีเจอร์อื่นๆ ของ Service Worker (เช่น Web Push)
- คุณต้องการนําเข้าสคริปต์เพิ่มเติม หรือเพิ่มตรรกะเพิ่มเติมสําหรับกลยุทธ์การแคชที่กําหนดเอง
InjectManifest
ปลั๊กอิน InjectManifest
จะสร้างรายการ URL ที่จะแคชล่วงหน้าและเพิ่มไฟล์ Manifest แคชล่วงหน้านั้นลงในไฟล์ Service Worker ที่มีอยู่ มิเช่นนั้นระบบจะปล่อยไฟล์ไว้เหมือนเดิม
กรณีที่ควรใช้ InjectManifest
- คุณต้องการควบคุม Service Worker ได้มากขึ้น
- คุณต้องการแคชไฟล์ไว้ล่วงหน้า
- คุณต้องปรับแต่งการกำหนดเส้นทางและกลยุทธ์
- คุณต้องการใช้ Service Worker กับฟีเจอร์อื่นๆ ของแพลตฟอร์ม (เช่น Web Push)
ไม่ควรใช้ InjectManifest
เมื่อใด
- คุณต้องการวิธีที่ง่ายที่สุดในการเพิ่ม Service 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: '...',
}),
],
};
ซึ่งจะสร้างไฟล์ Manifest สำหรับการแคชล่วงหน้าโดยอิงตามชิ้นงาน webpack ที่การกําหนดค่าของคุณเลือกไว้ และแทรกลงในไฟล์ Service Worker ที่คอมไพล์และรวมไว้แล้ว
ดูตัวเลือกการกำหนดค่าทั้งชุดได้ในเอกสารประกอบอ้างอิง
ข้อมูลเพิ่มเติม
ดูคําแนะนําเกี่ยวกับการใช้ปลั๊กอินในบริบทของบิลด์ webpack ขนาดใหญ่ได้ในส่วน "Progressive Web Application" ของเอกสารประกอบ webpack
ประเภท
GenerateSW
คลาสนี้รองรับการสร้างไฟล์ Service Worker ใหม่ที่ใช้ได้ทันที ซึ่งเป็นส่วนหนึ่งของกระบวนการคอมไพล์ 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
โมฆะ
สร้างอินสแตนซ์ของ GenerateSW
ฟังก์ชัน
constructor
มีรูปแบบดังนี้(config?: GenerateSWConfig) => {...}
-
การกำหนดค่า
GenerateSWConfig ไม่บังคับ
-
returns
-
-
การกำหนดค่า
GenerateSWConfig
พร็อพเพอร์ตี้
-
additionalManifestEntries
(string | ManifestEntry)[] ไม่บังคับ
รายการรายการที่จะแคชไว้ล่วงหน้า นอกเหนือจากรายการที่สร้างขึ้นเป็นส่วนหนึ่งของการกำหนดค่าบิลด์
-
babelPresetEnvTargets
string[] ไม่บังคับ
ค่าเริ่มต้นคือ ["chrome >= 56"]
เป้าหมายที่จะส่งให้กับ
babel-preset-env
เมื่อแปลงไฟล์ Service Worker Bundle -
cacheId
สตริง ไม่บังคับ
รหัสที่ไม่บังคับที่จะใส่ไว้ก่อนชื่อแคช การดำเนินการนี้มีประโยชน์อย่างยิ่งสําหรับการพัฒนาในเครื่องซึ่งอาจมีการแสดงเว็บไซต์หลายแห่งจาก
http://localhost:port
ต้นทางเดียวกัน -
ชิ้นส่วน
string[] ไม่บังคับ
ชื่อกลุ่มอย่างน้อย 1 รายการที่ควรรวมไฟล์เอาต์พุตที่เกี่ยวข้องไว้ในไฟล์ Manifest สำหรับการแคชล่วงหน้า
-
cleanupOutdatedCaches
บูลีน ไม่บังคับ
ค่าเริ่มต้นคือ false
ระบุว่า Workbox ควรพยายามระบุและลบแคชล่วงหน้าที่สร้างขึ้นโดยเวอร์ชันเก่าที่เข้ากันไม่ได้หรือไม่
-
clientsClaim
บูลีน ไม่บังคับ
ค่าเริ่มต้นคือ false
กำหนดว่า Service Worker ควรเริ่มควบคุมไคลเอ็นต์ที่มีอยู่ทันทีที่เปิดใช้งานหรือไม่
-
directoryIndex
สตริง ไม่บังคับ
หากคำขอไปยัง URL ที่ลงท้ายด้วย
/
ไม่ตรงกับ URL ที่แคชไว้ล่วงหน้า ระบบจะเพิ่มค่านี้ต่อท้าย URL แล้วตรวจสอบการจับคู่กับแคชล่วงหน้า ค่านี้ควรตั้งค่าเป็นค่าที่เว็บเซิร์ฟเวอร์ใช้สำหรับดัชนีไดเรกทอรี -
disableDevLogs
บูลีน ไม่บังคับ
ค่าเริ่มต้นคือ false
-
dontCacheBustURLsMatching
RegExp ไม่บังคับ
ระบบจะถือว่าชิ้นงานที่ตรงกับค่านี้มีเวอร์ชันที่ไม่ซ้ำกันผ่าน URL และยกเว้นจากการป้องกันแคช HTTP ปกติที่ดำเนินการเมื่อป้อนข้อมูลแคชล่วงหน้า แม้ว่าจะไม่บังคับ แต่เราขอแนะนำให้คุณระบุนิพจน์ทั่วไปที่จะตรวจหาค่า
[hash]
ในชื่อไฟล์แต่ละรายการ หากกระบวนการสร้างที่มีอยู่แทรกค่า[hash]
ไว้ในชื่อไฟล์แต่ละรายการอยู่แล้ว เนื่องจากจะช่วยประหยัดแบนด์วิดท์ที่ใช้เมื่อแคชล่วงหน้า -
ยกเว้น
(สตริง | นิพจน์ทั่วไป | ฟังก์ชัน)[] ไม่บังคับ
ตัวระบุอย่างน้อย 1 รายการที่ใช้ยกเว้นเนื้อหาจากไฟล์ Manifest สำหรับการแคชล่วงหน้า ระบบจะตีความตามกฎเดียวกันกับตัวเลือก
exclude
มาตรฐานของwebpack
หากไม่ได้ระบุ ค่าเริ่มต้นจะเป็น[/\.map$/, /^manifest.*\.js$]
-
excludeChunks
string[] ไม่บังคับ
ชื่อกลุ่มอย่างน้อย 1 รายการที่ควรยกเว้นไฟล์เอาต์พุตที่เกี่ยวข้องจากไฟล์ Manifest สำหรับการแคชล่วงหน้า
-
ignoreURLParametersMatching
RegExp[] ไม่บังคับ
ระบบจะนำชื่อพารามิเตอร์การค้นหาที่ตรงกับนิพจน์ทั่วไปรายการใดรายการหนึ่งในอาร์เรย์นี้ออกก่อนที่จะมองหาการจับคู่การแคชล่วงหน้า ซึ่งจะมีประโยชน์ในกรณีที่ผู้ใช้อาจขอ URL ที่มีพารามิเตอร์ของ URL ที่ใช้ติดตามแหล่งที่มาของการเข้าชม หากไม่ได้ระบุ ค่าเริ่มต้นจะเป็น
[/^utm_/, /^fbclid$/]
-
importScripts
string[] ไม่บังคับ
รายการไฟล์ JavaScript ที่ควรส่งไปยัง
importScripts()
ภายในไฟล์ Service Worker ที่สร้างขึ้น ซึ่งจะมีประโยชน์เมื่อคุณต้องการให้ Workbox สร้างไฟล์ Service Worker ระดับบนสุด แต่ต้องการรวมโค้ดเพิ่มเติม เช่น โปรแกรมรับฟังเหตุการณ์ Push -
importScriptsViaChunks
string[] ไม่บังคับ
ชื่อของกลุ่ม webpack อย่างน้อย 1 รายการ เนื้อหาของข้อมูลโค้ดเหล่านั้นจะรวมอยู่ใน Service Worker ที่สร้างขึ้นผ่านการเรียกใช้
importScripts()
-
รวม
(string | RegExp | function)[] ไม่บังคับ
ตัวระบุอย่างน้อย 1 รายการที่ใช้ใส่เนื้อหาในไฟล์ Manifest ของแคชล่วงหน้า ระบบจะตีความตามกฎเดียวกันกับตัวเลือก
include
มาตรฐานของwebpack
-
inlineWorkboxRuntime
บูลีน ไม่บังคับ
ค่าเริ่มต้นคือ false
ระบุว่าควรรวมโค้ดรันไทม์สำหรับไลบรารี Workbox ไว้ใน Service Worker ระดับบนสุด หรือแยกเป็นไฟล์แยกต่างหากที่ต้องนำไปใช้งานควบคู่ไปกับ Service Worker การแยกรันไทม์หมายความว่าผู้ใช้ไม่จำเป็นต้องดาวน์โหลดโค้ด Workbox ซ้ำทุกครั้งที่มีการเปลี่ยนแปลง Service Worker ระดับบนสุด
-
manifestEntries
ManifestEntry[] ไม่บังคับ
-
manifestTransforms
ManifestTransform[] ไม่บังคับ
ฟังก์ชันอย่างน้อย 1 รายการที่จะนําไปใช้กับไฟล์ Manifest ที่สร้างขึ้นตามลําดับ หากระบุ
modifyURLPrefix
หรือdontCacheBustURLsMatching
ด้วย ระบบจะใช้การเปลี่ยนรูปแบบที่เกี่ยวข้องก่อน -
maximumFileSizeToCacheInBytes
ตัวเลข ไม่บังคับ
ค่าเริ่มต้นคือ 2097152
ค่านี้ใช้เพื่อกำหนดขนาดไฟล์สูงสุดที่จะแคชไว้ล่วงหน้าได้ วิธีนี้จะช่วยป้องกันไม่ให้คุณแคชไฟล์ขนาดใหญ่มากล่วงหน้าโดยไม่ได้ตั้งใจ ซึ่งอาจตรงกับรูปแบบใดรูปแบบหนึ่งของคุณโดยไม่ตั้งใจ
-
โหมด
สตริง ไม่บังคับ
หากตั้งค่าเป็น "production" ระบบจะสร้าง Service Worker Bundle ที่เพิ่มประสิทธิภาพซึ่งไม่รวมข้อมูลการแก้ไขข้อบกพร่อง หากไม่ได้กําหนดค่าอย่างชัดเจนที่นี่ ระบบจะใช้ค่า
mode
ที่กําหนดค่าไว้ในการคอมไพล์webpack
ปัจจุบัน -
modifyURLPrefix
ออบเจ็กต์ ไม่บังคับ
สตริงการแมปออบเจ็กต์จะใส่คำนำหน้าสตริงค่าการแทนที่ เพื่อนำมาใช้ เช่น นำคำนำหน้าเส้นทางออกหรือเพิ่มคำนำหน้าเส้นทางจากรายการไฟล์ Manifest หากการตั้งค่าเว็บโฮสติ้งไม่ตรงกับการตั้งค่าระบบไฟล์ในเครื่อง ทั้งนี้เป็นทางเลือกที่มีความยืดหยุ่นมากขึ้น คุณสามารถใช้ตัวเลือก
manifestTransforms
และให้ฟังก์ชันที่แก้ไขรายการในไฟล์ Manifest โดยใช้ตรรกะที่คุณระบุตัวอย่างการใช้งาน
// Replace a '/dist/' prefix with '/', and also prepend // '/static' to every URL. modifyURLPrefix: { '/dist/': '/', '': '/static', }
-
สตริง ไม่บังคับ
ค่าเริ่มต้นคือ null
หากระบุไว้ คำขอไปยังส่วนต่างๆ ทั้งหมดสำหรับ URL ที่ไม่ได้แคชไว้ล่วงหน้าจะได้รับการตอบสนองด้วย HTML ที่ URL ที่ระบุ คุณต้องส่ง URL ของเอกสาร HTML ที่แสดงในไฟล์ Manifest สำหรับการแคชล่วงหน้า ตัวเลือกนี้มีไว้สำหรับใช้ในสถานการณ์แอปหน้าเดียว ซึ่งคุณต้องการให้การนำทางทั้งหมดใช้ App Shell HTML เดียวกัน
-
RegExp[] ไม่บังคับ
อาร์เรย์นิพจน์ทั่วไปที่ไม่บังคับซึ่งจํากัด URL ที่ลักษณะการทํางาน
navigateFallback
ที่กําหนดค่าไว้มีผล วิธีนี้มีประโยชน์หากควรถือว่า URL ของเว็บไซต์เพียงส่วนหนึ่งส่วนใดเป็นส่วนหนึ่งของแอปหน้าเดียว หากมีการกำหนดค่าทั้งnavigateFallbackDenylist
และnavigateFallbackAllowlist
ไว้ รายการที่ไม่อนุญาตจะมีผลก่อนหมายเหตุ: ระบบอาจประเมินนิพจน์ทั่วไปเหล่านี้กับ URL ปลายทางทุกรายการในระหว่างการนําทาง หลีกเลี่ยงการใช้ RegExps ซับซ้อน ไม่เช่นนั้นผู้ใช้อาจเห็นความล่าช้าเมื่อไปยังส่วนต่างๆ ของเว็บไซต์
-
RegExp[] ไม่บังคับ
อาร์เรย์นิพจน์ทั่วไปที่ไม่บังคับซึ่งจํากัด URL ที่ลักษณะการทํางาน
navigateFallback
ที่กําหนดค่าไว้มีผล ซึ่งจะมีประโยชน์ในกรณีที่ควรถือว่า URL ของเว็บไซต์เพียงบางส่วนเป็นส่วนหนึ่งของแอปหน้าเว็บเดียวเท่านั้น หากกําหนดค่าทั้งnavigateFallbackDenylist
และnavigateFallbackAllowlist
ไว้ รายการที่ปฏิเสธจะมีลําดับความสําคัญเหนือกว่าหมายเหตุ: ระบบอาจประเมินนิพจน์ทั่วไปเหล่านี้กับ URL ปลายทางทุกรายการในระหว่างการนําทาง หลีกเลี่ยงการใช้ RegExps ซับซ้อน ไม่เช่นนั้นผู้ใช้อาจเห็นความล่าช้าเมื่อไปยังส่วนต่างๆ ของเว็บไซต์
-
บูลีน ไม่บังคับ
ค่าเริ่มต้นคือ false
การเปิดใช้การโหลดนำทางล่วงหน้าใน Service Worker ที่สร้างขึ้นหรือไม่ เมื่อตั้งค่าเป็น "จริง" คุณต้องใส่
runtimeCaching
เพื่อตั้งค่ากลยุทธ์การตอบกลับที่เหมาะสมซึ่งจะจับคู่กับคำขอการนําทาง และใช้การตอบกลับที่โหลดไว้ล่วงหน้า -
offlineGoogleAnalytics
บูลีน | GoogleAnalyticsInitializeOptions ไม่บังคับ
ค่าเริ่มต้นคือ false
ควบคุมว่าจะรวมการรองรับ Google Analytics ออฟไลน์ หรือไม่ เมื่อ
true
ระบบจะเพิ่มการเรียกinitialize()
ของworkbox-google-analytics
ลงใน Service Worker ที่สร้างขึ้น เมื่อตั้งค่าเป็นObject
ระบบจะส่งออบเจ็กต์นั้นไปยังการเรียกinitialize()
ซึ่งจะช่วยให้คุณปรับแต่งลักษณะการทํางานได้ -
runtimeCaching
RuntimeCaching[] ไม่บังคับ
เมื่อใช้เครื่องมือสร้างของ Workbox เพื่อสร้าง Service Worker คุณจะระบุการกำหนดค่าการแคชรันไทม์ได้อย่างน้อย 1 รายการ จากนั้นระบบจะแปลเป็นคําเรียก
workbox-routing.registerRoute
โดยใช้การกําหนดค่าการจับคู่และตัวแฮนเดิลที่คุณกําหนดโปรดดูตัวเลือกทั้งหมดในเอกสารของ
workbox-build.RuntimeCaching
ตัวอย่างด้านล่างแสดงการกำหนดค่าโดยทั่วไปซึ่งมีการกำหนดเส้นทางรันไทม์ 2 เส้นทาง -
skipWaiting
บูลีน ไม่บังคับ
ค่าเริ่มต้นคือ false
เพิ่มการเรียก
skipWaiting()
แบบไม่มีเงื่อนไขไปยัง Service Worker ที่สร้างขึ้นหรือไม่ หากเป็นfalse
ระบบจะเพิ่มmessage
Listener แทน ซึ่งจะช่วยให้หน้าไคลเอ็นต์ทริกเกอร์skipWaiting()
ได้โดยเรียกใช้postMessage({type: 'SKIP_WAITING'})
ใน Service Worker ที่รออยู่ -
sourcemap
บูลีน ไม่บังคับ
ค่าเริ่มต้นคือ true
การสร้าง Sourcemap สําหรับไฟล์ Service Worker ที่สร้างขึ้น
-
swDest
string ไม่บังคับ
ค่าเริ่มต้นคือ "service-worker.js"
ชื่อเนื้อหาของไฟล์ Service Worker ที่สร้างโดยปลั๊กอินนี้
InjectManifest
คลาสนี้รองรับการคอมไพล์ไฟล์ Service Worker ที่ให้ไว้ผ่าน swSrc
และแทรกรายการ URL และข้อมูลการแก้ไขสำหรับการแคชล่วงหน้าตามไปป์ไลน์เนื้อหาของ Webpack ลงในโปรแกรมทำงานของบริการ
ใช้อินสแตนซ์ของ InjectManifest
ในอาร์เรย์ plugins
ของการกำหนดค่า webpack
นอกจากการแทรกไฟล์ Manifest แล้ว ปลั๊กอินนี้จะทำการคอมไพล์ไฟล์ 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
โมฆะ
สร้างอินสแตนซ์ของ InjectManifest
ฟังก์ชัน
constructor
มีลักษณะดังนี้(config: WebpackInjectManifestOptions) => {...}
-
การกำหนดค่า
-
returns
-
-
การกำหนดค่า
พร็อพเพอร์ตี้
default
ประเภท
ออบเจ็กต์
พร็อพเพอร์ตี้
-
GenerateSW
query
-
InjectManifest
query