คุณสามารถติดตั้งและกำหนดค่าชุดโปรแกรมจำลองภายในของ Firebase สำหรับสภาพแวดล้อมการสร้างต้นแบบและสภาพแวดล้อมการทดสอบที่แตกต่างกันได้ ตั้งแต่เซสชันการสร้างต้นแบบแบบครั้งเดียวไปจนถึงเวิร์กโฟลว์การรวมอย่างต่อเนื่องในระดับการใช้งานจริง
ติดตั้งชุดโปรแกรมจำลองภายใน
ก่อนติดตั้งชุดโปรแกรมจำลอง คุณจะต้องมีสิ่งต่อไปนี้
วิธีติดตั้งชุดโปรแกรมจำลอง
- ติดตั้ง Firebase CLI
หากยังไม่ได้ติดตั้ง Firebase CLI ให้ติดตั้งเลย
คุณจะต้องใช้ CLI เวอร์ชัน 8.14.0 ขึ้นไปเพื่อใช้ชุดโปรแกรมจำลอง คุณตรวจสอบเวอร์ชันที่ติดตั้งได้โดยใช้คำสั่งต่อไปนี้
firebase --version
- หากยังไม่ได้ดำเนินการ ให้เริ่มต้นไดเรกทอรีการทำงานปัจจุบันเป็นโปรเจ็กต์ Firebase โดยทำตามข้อความแจ้งบนหน้าจอเพื่อระบุผลิตภัณฑ์ที่จะใช้ ดังนี้
firebase init
- ตั้งค่าชุดโปรแกรมจำลอง คำสั่งนี้จะเริ่มวิซาร์ดการกำหนดค่าที่ให้คุณเลือกโปรแกรมจำลองที่สนใจ ดาวน์โหลดไฟล์ไบนารีของโปรแกรมจำลองที่เกี่ยวข้อง และตั้งค่าพอร์ตโปรแกรมจำลองหากค่าเริ่มต้นไม่เหมาะสม
firebase init emulators
เมื่อติดตั้งโปรแกรมจำลองแล้ว ระบบจะไม่ตรวจสอบการอัปเดตและจะไม่มีการดาวน์โหลดอัตโนมัติเพิ่มเติมจนกว่าคุณจะอัปเดตเวอร์ชัน Firebase CLI
กำหนดค่าชุดโปรแกรมจำลอง
คุณสามารถเลือกกำหนดค่าพอร์ตเครือข่ายของโปรแกรมจำลองและเส้นทางไปยังคำจำกัดความของกฎความปลอดภัยในไฟล์ firebase.json ได้ดังนี้
- เปลี่ยนพอร์ตโปรแกรมจำลองโดยเรียกใช้
firebase init emulatorsหรือแก้ไขfirebase.jsonด้วยตนเอง - เปลี่ยนเส้นทางไปยังคำจำกัดความของกฎความปลอดภัยโดยแก้ไข
firebase.jsonด้วยตนเอง
หากคุณไม่กำหนดการตั้งค่าเหล่านี้ โปรแกรมจำลองจะฟังพอร์ตเริ่มต้น และโปรแกรมจำลอง Cloud Firestore, Realtime Database และ Cloud Storage for Firebase จะทำงานโดยใช้ความปลอดภัยข้อมูลแบบเปิด
| คำสั่ง | คำอธิบาย |
|---|---|
| init emulators | เริ่มวิซาร์ดการเริ่มต้นโปรแกรมจำลอง ระบุโปรแกรมจำลองที่จะติดตั้งและระบุการตั้งค่าพอร์ตของโปรแกรมจำลอง (ไม่บังคับ) init emulators จะไม่ทำลายข้อมูล การยอมรับค่าเริ่มต้นจะคงการกำหนดค่าโปรแกรมจำลองปัจจุบันไว้ |
การกำหนดค่าพอร์ต
โปรแกรมจำลองแต่ละรายการจะเชื่อมโยงกับพอร์ตอื่นในเครื่องของคุณด้วยค่าเริ่มต้นที่ต้องการ
| โปรแกรมจำลอง | พอร์ตเริ่มต้น |
|---|---|
| Authentication | 9099 |
| App Hosting | 5002 |
| Emulator Suite UI | 4000 |
| Cloud Functions | 5001 |
| Eventarc | 9299 |
| Realtime Database | 9000 |
| Cloud Firestore | 8080 |
| Cloud Storage for Firebase | 9199 |
| Firebase Hosting | 5000 |
| Pub/Sub | 8085 |
การกำหนดค่ารหัสโปรเจ็กต์
คุณอาจเรียกใช้อินสแตนซ์หลายรายการของโปรแกรมจำลองโดยใช้รหัสโปรเจ็กต์ Firebase ที่แตกต่างกัน หรืออินสแตนซ์โปรแกรมจำลองหลายรายการสำหรับรหัสโปรเจ็กต์หนึ่งๆ ทั้งนี้ขึ้นอยู่กับวิธีเรียกใช้โปรแกรมจำลอง ในกรณีเช่นนี้ อินสแตนซ์โปรแกรมจำลองจะทำงานในสภาพแวดล้อมที่แยกต่างหาก
โดยทั่วไปแล้ว แนวทางปฏิบัติแนะนำคือการตั้งค่ารหัสโปรเจ็กต์ 1 รหัสสำหรับการเรียกใช้โปรแกรมจำลองทั้งหมด เพื่อให้ Emulator Suite UI, โปรแกรมจำลองผลิตภัณฑ์ต่างๆ และอินสแตนซ์ที่ทำงานอยู่ทั้งหมดของโปรแกรมจำลองหนึ่งๆ สามารถสื่อสารได้อย่างถูกต้องในทุกกรณี
Local Emulator Suite จะแสดงคำเตือนเมื่อตรวจพบรหัสโปรเจ็กต์หลายรายการในสภาพแวดล้อม แต่คุณสามารถลบล้างลักษณะการทำงานนี้ได้โดยตั้งค่าคีย์ singleProjectMode เป็น false ใน firebase.json
คุณสามารถตรวจสอบการประกาศรหัสโปรเจ็กต์เพื่อหาข้อมูลที่ไม่ตรงกันได้ในส่วนต่อไปนี้
- โปรเจ็กต์เริ่มต้นในบรรทัดคำสั่ง โดยค่าเริ่มต้น ระบบจะนำรหัสโปรเจ็กต์ไปใช้เมื่อเริ่มต้นระบบจากโปรเจ็กต์ที่เลือกด้วย
firebase initหรือfirebase useหากต้องการดูรายการโปรเจ็กต์ (และดูว่าเลือกโปรเจ็กต์ใดไว้) ให้ใช้firebase projects:list - การทำ Unit Test ของกฎ รหัสโปรเจ็กต์มักจะระบุไว้ในการเรียกใช้เมธอดไลบรารีการทำ Unit Test ของกฎ
initializeTestEnvironmentหรือinitializeTestApp - Flag บรรทัดคำสั่ง
--projectการส่งแฟล็ก Firebase CLI--projectจะลบล้างโปรเจ็กต์เริ่มต้น คุณจะต้องตรวจสอบว่าค่าของแฟล็กตรงกับรหัสโปรเจ็กต์ใน Unit Test และการเริ่มต้นแอป
นอกจากนี้ ให้ตรวจสอบการกำหนดค่ารหัสโปรเจ็กต์เฉพาะแพลตฟอร์มที่คุณตั้งค่าไว้ขณะกำหนดค่าโปรเจ็กต์ Apple, Android และเว็บ
การกำหนดค่ากฎความปลอดภัย
โปรแกรมจำลองจะใช้การกำหนดค่ากฎความปลอดภัยจากคีย์การกำหนดค่า database, firestore และ storage ใน firebase.json
{
// Existing firebase configuration ...
"database": {
"rules": "database.rules.json"
},
"firestore": {
"rules": "firestore.rules"
},
"storage": {
"rules": "storage.rules"
}
// ...
// Optional emulator configuration. Default
// values are used if absent.
"emulators": {
"singleProjectMode": false, // do not warn on detection of multiple project IDs
"firestore": {
"port": "8080"
},
"ui": {
"enabled": true, // Default is `true`
"port": 4000 // If unspecified, see CLI log for selected port
},
"auth": {
"port": "9099"
},
"pubsub": {
"port": "8085"
}
}
}
การระบุตัวเลือก Java
โปรแกรมจำลอง Realtime Database, โปรแกรมจำลอง Cloud Firestore และบางส่วนของโปรแกรมจำลอง Cloud Storage for Firebase อิงตาม Java ซึ่งสามารถปรับแต่งด้วยแฟล็ก JVM ผ่านตัวแปรสภาพแวดล้อม JAVA_TOOL_OPTIONS
ตัวอย่างเช่น หากพบข้อผิดพลาดเกี่ยวกับพื้นที่ฮีปของ Java คุณอาจเพิ่มขนาดฮีปสูงสุดของ Java เป็น 4 GB ได้ดังนี้
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
คุณระบุแฟล็กหลายรายการได้ในเครื่องหมายคำพูดที่คั่นด้วยการเว้นวรรค เช่น JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g" แฟล็กจะส่งผลต่อคอมโพเนนต์ที่ใช้ Java ของโปรแกรมจำลองเท่านั้น และไม่มีผลต่อส่วนอื่นๆ ของ Firebase CLI เช่น Emulator Suite UI
เปิดโปรแกรมจำลอง
คุณสามารถเริ่มโปรแกรมจำลองให้ทำงานจนกว่าจะสิ้นสุดด้วยตนเอง หรือให้ทำงานตามระยะเวลาของสคริปต์ทดสอบที่กำหนดแล้วปิดระบบโดยอัตโนมัติ
| คำสั่ง | คำอธิบาย | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
emulators:start
|
เริ่มโปรแกรมจำลองสำหรับผลิตภัณฑ์ Firebase ที่กำหนดค่าไว้ใน
|
||||||||||||||
emulators:exec PATH/TO/SCRIPT
|
เรียกใช้สคริปต์ที่ PATH/TO/SCRIPT หลังจากเริ่มโปรแกรมจำลองสำหรับผลิตภัณฑ์ Firebase ที่กำหนดค่าไว้ใน
|
โดยทั่วไปแล้ว วิธี firebase emulators:exec จะเหมาะกับเวิร์กโฟลว์การรวมอย่างต่อเนื่องมากกว่า
ส่งออกและนำเข้าข้อมูลโปรแกรมจำลอง
คุณสามารถส่งออกข้อมูลจากโปรแกรมจำลอง Authentication, Cloud Firestore, Realtime Database และ Cloud Storage for Firebase เพื่อใช้เป็นชุดข้อมูลพื้นฐานทั่วไปที่แชร์ได้ คุณนำเข้าชุดข้อมูลเหล่านี้ได้โดยใช้แฟล็ก --import ตามที่อธิบายไว้ข้างต้น
| emulators:export export_directory |
โปรแกรมจำลอง Authentication, Cloud Firestore, Realtime Database หรือ Cloud Storage for Firebase
ส่งออกข้อมูลจากอินสแตนซ์โปรแกรมจำลอง Cloud Firestore, Realtime Database หรือ Cloud Storage for Firebase ที่ทำงานอยู่ ระบบจะสร้าง
คุณสามารถสั่งให้โปรแกรมจำลองส่งออกข้อมูลโดยอัตโนมัติเมื่อปิดเครื่องโดยใช้แฟล็ก |
ผสานรวมกับระบบ CI
การเรียกใช้อิมเมจชุดโปรแกรมจำลองที่สร้างโดยใช้คอนเทนเนอร์
การติดตั้งและกำหนดค่าชุดโปรแกรมจำลองด้วยคอนเทนเนอร์ในการตั้งค่า CI ทั่วไปนั้นทำได้ง่ายๆ
ปัญหาที่ควรทราบมีดังนี้
ระบบจะติดตั้งและแคชไฟล์ JAR ไว้ที่
~/.cache/firebase/emulators/- คุณอาจต้องเพิ่มเส้นทางนี้ลงในการกำหนดค่าแคช CI เพื่อหลีกเลี่ยงการดาวน์โหลดซ้ำ
หากไม่มีไฟล์
firebase.jsonในที่เก็บ คุณต้องเพิ่มอาร์กิวเมนต์บรรทัดคำสั่งลงในคำสั่งemulators:startหรือemulators:execเพื่อระบุว่าควรเริ่มโปรแกรมจำลองใด เช่น--only functions,firestore
สร้างโทเค็นการตรวจสอบสิทธิ์ (โปรแกรมจำลอง Hosting เท่านั้น)
หากเวิร์กโฟลว์การรวมอย่างต่อเนื่องของคุณใช้ Firebase Hosting คุณจะต้องเข้าสู่ระบบโดยใช้โทเค็นเพื่อเรียกใช้ firebase emulators:exec โปรแกรมจำลองอื่นๆ ไม่จำเป็นต้องเข้าสู่ระบบ
หากต้องการสร้างโทเค็น ให้เรียกใช้ firebase login:ci ในสภาพแวดล้อมในเครื่อง ซึ่งไม่ควรดำเนินการจากระบบ CI ทำตามวิธีการเพื่อตรวจสอบสิทธิ์ คุณควรทำขั้นตอนนี้เพียงครั้งเดียวต่อโปรเจ็กต์ เนื่องจากโทเค็นจะใช้ได้กับทุกบิลด์ คุณควรเก็บโทเค็นไว้เป็นความลับเช่นเดียวกับรหัสผ่าน
หากสภาพแวดล้อม CI อนุญาตให้คุณระบุตัวแปรสภาพแวดล้อมที่ใช้ในสคริปต์บิลด์ได้ เพียงสร้างตัวแปรสภาพแวดล้อมชื่อ FIREBASE_TOKEN โดยมีค่าเป็นสตริงโทเค็นเพื่อการเข้าถึง Firebase CLI จะเลือกตัวแปรสภาพแวดล้อม FIREBASE_TOKEN โดยอัตโนมัติ และโปรแกรมจำลองจะเริ่มทำงานอย่างถูกต้อง
วิธีสุดท้ายคือคุณสามารถใส่โทเค็นในสคริปต์บิลด์ได้ แต่ต้องตรวจสอบว่าบุคคลที่ไม่น่าเชื่อถือไม่มีสิทธิ์เข้าถึง สำหรับแนวทางแบบฮาร์ดโค้ดนี้ คุณสามารถเพิ่ม --token "YOUR_TOKEN_STRING_HERE" ลงในคำสั่ง firebase emulators:exec ได้
ใช้ Emulator Hub REST API
แสดงรายการโปรแกรมจำลองที่ทำงานอยู่
หากต้องการแสดงรายการโปรแกรมจำลองที่ทำงานอยู่ในปัจจุบัน ให้ส่งคำขอ GET ไปยังปลายทาง /emulators ของ Emulator Hub
curl localhost:4400/emulatorsผลลัพธ์จะเป็นออบเจ็กต์ JSON ที่แสดงรายการโปรแกรมจำลองที่ทำงานอยู่ทั้งหมดและการกำหนดค่าโฮสต์/พอร์ต เช่น
{
"hub":{
"name": "hub",
"host": "localhost",
"port": 4400
},
"functions": {
"name": "functions",
"host": "localhost",
"port": 5001
}
"firestore": {
"name": "firestore",
"host": "localhost",
"port": 8080
}
}
เปิด/ปิดใช้ทริกเกอร์ฟังก์ชันเบื้องหลัง
ในบางสถานการณ์ คุณจะต้องปิดใช้ทริกเกอร์ฟังก์ชันและส่วนขยายในเครื่องชั่วคราว ตัวอย่างเช่น คุณอาจต้องการลบข้อมูลทั้งหมดในโปรแกรมจำลอง Cloud Firestore โดยไม่ทริกเกอร์ฟังก์ชัน onDelete ที่ทำงานในโปรแกรมจำลอง Cloud Functions หรือ Extensions
หากต้องการปิดใช้ทริกเกอร์ฟังก์ชันในเครื่องชั่วคราว ให้ส่งคำขอ PUT ไปยังปลายทาง /functions/disableBackgroundTriggers ของ Emulator Hub
curl -X PUT localhost:4400/functions/disableBackgroundTriggersผลลัพธ์จะเป็นออบเจ็กต์ JSON ที่แสดงรายละเอียดสถานะปัจจุบัน
{
"enabled": false
}
หากต้องการเปิดใช้ทริกเกอร์ฟังก์ชันในเครื่องหลังจากปิดใช้แล้ว ให้ส่งคำขอ PUT ไปยังปลายทาง /functions/enableBackgroundTriggers ของ Emulator Hub
curl -X PUT localhost:4400/functions/enableBackgroundTriggersผลลัพธ์จะเป็นออบเจ็กต์ JSON ที่แสดงรายละเอียดสถานะปัจจุบัน
{
"enabled": true
}
การผสานรวม SDK ของโปรแกรมจำลอง
ตารางในส่วนนี้จะระบุว่าโปรแกรมจำลองใดบ้างที่ SDK ของไคลเอ็นต์และ Admin SDK รองรับ ในอนาคต หมายความว่าเราวางแผนที่จะรองรับโปรแกรมจำลอง แต่ยังไม่พร้อมให้บริการ
ความพร้อมใช้งานของ SDK ของไคลเอ็นต์
| Android | แพลตฟอร์ม Apple | เว็บ |
Firebase UI Android |
Firebase UI iOS |
Firebase UI Web |
|
|---|---|---|---|---|---|---|
| Realtime Database | 19.4.0 | 7.2.0 | 8.0.0 | 6.4.0 | อนาคต | ไม่มี |
| Cloud Firestore | 21.6.0 | 7.2.0 | 8.0.0 | 6.4.0 | อนาคต | ไม่มี |
| Authentication | 20.0.0 | 7.0.0 | 8.0.0 | 7.0.0 | อนาคต | 4.7.2 |
| Cloud Storage for Firebase | 20.0.0 | 8.0.0 | 8.4.0 | 7.0.0 | 11.0.0 | ไม่มี |
| Cloud Functions | 19.1.0 | 7.2.0 | 8.0.0 | ไม่มี | ไม่มี | ไม่มี |
| Hosting | ไม่มี | ไม่มี | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
| Extensions | ไม่มี | ไม่มี | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
ความพร้อมใช้งานของ Admin SDK
| โหนด | Java | Python | Go | |
|---|---|---|---|---|
| Realtime Database | 8.6.0 | 6.10.0 | 2.18.0 | อนาคต |
| Cloud Firestore | 8.0.0 | 6.10.0 | 3.0.0 | 1.0.0 |
| Authentication | 9.3.0 | 7.2.0 | 5.0.0 | 4.2.0 |
| Cloud Storage for Firebase | 9.8.0 | อนาคต | อนาคต | อนาคต |
| Cloud Functions | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
| Hosting | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
| Extensions | ไม่มี | ไม่มี | ไม่มี | ไม่มี |