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: ...,
});
พร็อพเพอร์ตี้
-
เครื่องมือสร้าง
void
สร้างอินสแตนซ์ของ GenerateSW
ฟังก์ชัน
constructor
มีลักษณะดังนี้(config?: GenerateSWConfig) => {...}
-
การกำหนดค่า
GenerateSWConfig ไม่บังคับ
-
returns
-
-
การกำหนดค่า
GenerateSWConfig
พร็อพเพอร์ตี้
-
additionalManifestEntries
(สตริง | ไฟล์ Manifest)[] ไม่บังคับ
รายการข้อมูลที่จะแคชล่วงหน้าเพิ่มเติมนอกเหนือจากรายการที่สร้างขึ้นเป็นส่วนหนึ่งของการกำหนดค่าบิลด์
-
babelPresetEnvTargets
string[] ไม่บังคับ
ค่าเริ่มต้นคือ ["chrome >= 56"]
เป้าหมายที่จะส่งต่อไปยัง
babel-preset-env
เมื่อแปลแพ็กเกจ Service Worker -
cacheId
string ไม่บังคับ
รหัสที่ไม่บังคับที่จะใส่ไว้ข้างหน้าชื่อแคช การดำเนินการนี้มีประโยชน์เป็นหลักสำหรับการพัฒนาในท้องถิ่นซึ่งอาจมีการแสดงโฆษณาหลายเว็บไซต์จากต้นทาง
http://localhost:port
เดียวกัน -
เป็นท่อน
string[] ไม่บังคับ
ชื่อกลุ่มอย่างน้อย 1 ชื่อซึ่งควรรวมไฟล์เอาต์พุตที่เกี่ยวข้องไว้ในไฟล์ Manifest สำหรับแคชล่วงหน้า
-
cleanupOutdatedCaches
บูลีน ไม่บังคับ
ค่าเริ่มต้นคือ false
Workbox ควรพยายามระบุและลบแคชล่วงหน้าที่สร้างขึ้นโดยเวอร์ชันเก่าที่เข้ากันไม่ได้หรือไม่
-
clientsClaim
บูลีน ไม่บังคับ
ค่าเริ่มต้นคือ false
โปรแกรมทำงานของบริการควรเริ่มควบคุมไคลเอ็นต์ที่มีอยู่ทันทีที่เรียกใช้งานหรือไม่
-
directoryIndex
string ไม่บังคับ
หากคำขอการนำทางสำหรับ URL ที่ลงท้ายด้วย
/
ไม่ตรงกับ URL ที่แคชไว้ล่วงหน้า ระบบจะเพิ่มค่านี้ต่อท้าย URL และจะต้องมีการตรวจสอบการจับคู่แคชล่วงหน้า ซึ่งควรตั้งค่าเป็นสิ่งที่เว็บเซิร์ฟเวอร์ของคุณใช้สำหรับดัชนีไดเรกทอรี -
disableDevLogs
บูลีน ไม่บังคับ
ค่าเริ่มต้นคือ false
-
dontCacheBustURLsMatching
นิพจน์ทั่วไป ไม่บังคับ
เนื้อหาที่ตรงกับที่ระบุนี้จะมีเวอร์ชันไม่ซ้ำกันผ่าน URL และได้รับการยกเว้นจากการป้องกันการใช้ข้อมูลในแคช HTTP ปกติที่ทำเมื่อป้อนข้อมูลแคชล่วงหน้า ถึงแม้จะไม่บังคับ แต่ขอแนะนำว่าหากกระบวนการบิลด์ที่มีอยู่แทรกค่า
[hash]
ในชื่อไฟล์แต่ละชื่อแล้ว คุณต้องระบุ RegExp ที่จะตรวจพบเหตุการณ์ดังกล่าว เนื่องจากจะช่วยลดแบนด์วิดท์ที่ใช้เมื่อแคชล่วงหน้า -
ไม่รวม
(สตริง | RegExp | function)[] ไม่บังคับ
ตัวระบุอย่างน้อย 1 รายการใช้เพื่อยกเว้นเนื้อหาจากไฟล์ Manifest สำหรับแคชล่วงหน้า ซึ่งระบบจะตีความตามกฎเดียวกันกับตัวเลือก
exclude
มาตรฐานของwebpack
หากไม่ได้ระบุไว้ ค่าเริ่มต้นจะเป็น[/\.map$/, /^manifest.*\.js$]
-
excludeChunks
string[] ไม่บังคับ
ชื่อกลุ่มอย่างน้อย 1 ชื่อซึ่งควรยกเว้นไฟล์เอาต์พุตที่เกี่ยวข้องจากไฟล์ Manifest สำหรับแคชล่วงหน้า
-
ignoreURLParametersMatching
RegExp[] ไม่บังคับ
ระบบจะนำชื่อพารามิเตอร์การค้นหาที่ตรงกับ RegExp ในอาร์เรย์นี้ออกก่อนที่จะค้นหาการจับคู่สำหรับแคชล่วงหน้า ซึ่งจะเป็นประโยชน์หากผู้ใช้อาจขอ URL ที่มีพารามิเตอร์ของ URL ที่ใช้ติดตามแหล่งที่มาของการเข้าชม เป็นต้น หากไม่ได้ระบุไว้ ค่าเริ่มต้นจะเป็น
[/^utm_/, /^fbclid$/]
-
importScripts
string[] ไม่บังคับ
รายการไฟล์ JavaScript ที่ควรส่งไปยัง
importScripts()
ภายในไฟล์ Service Worker ที่สร้างขึ้น ซึ่งจะมีประโยชน์เมื่อคุณต้องการให้ Workbox สร้างไฟล์ Service Worker ระดับบนสุด แต่ต้องการใส่โค้ดเพิ่มเติมบางอย่าง เช่น Listener เหตุการณ์พุช -
importScriptsViaChunks
string[] ไม่บังคับ
ชื่อของกลุ่ม Webpack อย่างน้อย 1 ชื่อ เนื้อหาของส่วนดังกล่าวจะรวมอยู่ใน Service Worker ที่สร้างขึ้นผ่านการโทรไปยัง
importScripts()
-
รวม
(สตริง | 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
ค่านี้จะใช้เพื่อกำหนดขนาดสูงสุดของไฟล์ที่จะแคชล่วงหน้า วิธีนี้จะช่วยป้องกันไม่ให้คุณแคชไฟล์ขนาดใหญ่มากๆ ไว้ล่วงหน้าโดยไม่ได้ตั้งใจ ซึ่งอาจตรงกับรูปแบบใดรูปแบบหนึ่งของคุณโดยไม่ตั้งใจ
-
โหมด
string ไม่บังคับ
หากตั้งค่าเป็น "เวอร์ชันที่ใช้งานจริง" ระบบจะสร้างแพ็กเกจ Service Worker ที่เพิ่มประสิทธิภาพซึ่งไม่รวมข้อมูลการแก้ไขข้อบกพร่อง หากไม่ได้กำหนดค่าไว้อย่างชัดเจนที่นี่ ระบบจะใช้ค่า
mode
ที่กำหนดค่าในการคอมไพล์webpack
ปัจจุบัน -
modifyURLPrefix
ออบเจ็กต์ ไม่บังคับ
คำนำหน้าสตริงการแมปออบเจ็กต์จะนำค่าสตริงมาแทนที่ ซึ่งอาจนำมาใช้ได้ เช่น นำคำนำหน้าเส้นทางออกหรือเพิ่มคำนำหน้าเส้นทางจากรายการไฟล์ Manifest หากการตั้งค่าเว็บโฮสติ้งไม่ตรงกับการตั้งค่าระบบไฟล์ในเครื่อง คุณอาจใช้ตัวเลือก
manifestTransforms
และให้ฟังก์ชันที่แก้ไขรายการในไฟล์ Manifest โดยใช้ตรรกะใดก็ได้ที่คุณระบุ ให้มีความยืดหยุ่นมากขึ้นตัวอย่างการใช้:
// Replace a '/dist/' prefix with '/', and also prepend // '/static' to every URL. modifyURLPrefix: { '/dist/': '/', '': '/static', }
-
string ไม่บังคับ
ค่าเริ่มต้นคือ null
หากระบุไว้ คำขอการนำทางทั้งหมดสำหรับ URL ที่ไม่ได้แคชล่วงหน้าจะได้รับการเติมเต็มด้วย HTML ที่ URL ที่ระบุ คุณต้องส่งผ่าน URL ของเอกสาร HTML ที่แสดงอยู่ในไฟล์ Manifest สำหรับแคชล่วงหน้า การดำเนินการนี้มีไว้เพื่อใช้ในสถานการณ์ของแอปหน้าเดียว ซึ่งคุณต้องการให้การนำทางทั้งหมดใช้ App Shell HTML ทั่วไป
-
RegExp[] ไม่บังคับ
อาร์เรย์ทางเลือกของนิพจน์ทั่วไปที่จํากัด URL ที่จะใช้กับลักษณะการทำงานของ
navigateFallback
ที่กำหนดค่าไว้ ซึ่งจะมีประโยชน์หากระบบควรถือว่า URL ส่วนย่อยของเว็บไซต์เป็นส่วนหนึ่งของแอปหน้าเดียวเท่านั้น หากมีการกำหนดค่าทั้งnavigateFallbackDenylist
และnavigateFallbackAllowlist
รายการที่ไม่อนุญาตจะมีผลเหนือกว่าหมายเหตุ: ระบบอาจประเมินนิพจน์ทั่วไปเหล่านี้เทียบกับ URL ปลายทางทั้งหมดในระหว่างการนําทาง หลีกเลี่ยงการใช้ นิพจน์ทั่วไปที่ซับซ้อน ไม่เช่นนั้นผู้ใช้อาจเห็นความล่าช้าเมื่อไปยังส่วนต่างๆ ในเว็บไซต์
-
RegExp[] ไม่บังคับ
อาร์เรย์ทางเลือกของนิพจน์ทั่วไปที่จํากัด URL ที่จะใช้กับลักษณะการทำงานของ
navigateFallback
ที่กำหนดค่าไว้ ซึ่งจะมีประโยชน์หากระบบควรถือว่า URL ส่วนย่อยของเว็บไซต์เป็นส่วนหนึ่งของแอปหน้าเดียวเท่านั้น หากกำหนดค่าทั้งnavigateFallbackDenylist
และnavigateFallbackAllowlist
รายการที่ไม่อนุญาตจะมีความสำคัญเหนือกว่าหมายเหตุ: ระบบอาจประเมินนิพจน์ทั่วไปเหล่านี้เทียบกับ URL ปลายทางทั้งหมดในระหว่างการนําทาง หลีกเลี่ยงการใช้ นิพจน์ทั่วไปที่ซับซ้อน ไม่เช่นนั้นผู้ใช้อาจเห็นความล่าช้าเมื่อไปยังส่วนต่างๆ ในเว็บไซต์
-
บูลีน ไม่บังคับ
ค่าเริ่มต้นคือ 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
ระบบจะเพิ่ม Listenermessage
แทน ซึ่งทำให้หน้าไคลเอ็นต์ทริกเกอร์skipWaiting()
โดยการเรียกใช้postMessage({type: 'SKIP_WAITING'})
ในโปรแกรมทำงานของบริการรอ -
การแมปแหล่งที่มา
บูลีน ไม่บังคับ
ค่าเริ่มต้นคือ true
เลือกว่าจะสร้างการแมปแหล่งที่มาสำหรับไฟล์ 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: '...',
});
พร็อพเพอร์ตี้
-
เครื่องมือสร้าง
void
สร้างอินสแตนซ์ของ InjectManifest
ฟังก์ชัน
constructor
มีลักษณะดังนี้(config: WebpackInjectManifestOptions) => {...}
-
การกำหนดค่า
WebpackInjectManifestOptions
-
returns
-
-
การกำหนดค่า
WebpackInjectManifestOptions
พร็อพเพอร์ตี้
default
ประเภท
ออบเจ็กต์
พร็อพเพอร์ตี้
-
GenerateSW
query
-
InjectManifest
query