Firebase Local Emulator Suite สามารถติดตั้งและกำหนดค่าสำหรับต้นแบบและสภาพแวดล้อมการทดสอบที่แตกต่างกันได้ อะไรก็ได้ตั้งแต่เซสชันการสร้างต้นแบบแบบครั้งเดียวไปจนถึงเวิร์กโฟลว์การผสานรวมอย่างต่อเนื่องในระดับการผลิต
ติดตั้ง Local Emulator Suite
ก่อนที่จะติดตั้ง Emulator Suite คุณจะต้องมีสิ่งต่อไปนี้:
ในการติดตั้ง Emulator Suite:
- ติดตั้ง Firebase CLI หากคุณยังไม่ได้ติดตั้ง Firebase CLI ให้ติดตั้งทันที คุณจะต้องใช้ CLI เวอร์ชัน 8.14.0 หรือสูงกว่าเพื่อใช้ Emulator Suite คุณสามารถตรวจสอบเวอร์ชันที่คุณติดตั้งได้โดยใช้คำสั่งต่อไปนี้:
firebase --version
- หากคุณยังไม่ได้ดำเนินการ ให้เริ่มต้นไดเร็กทอรีการทำงานปัจจุบันเป็นโปรเจ็กต์ Firebase โดยปฏิบัติตามคำแนะนำบนหน้าจอเพื่อระบุผลิตภัณฑ์ที่จะใช้:
firebase init
- ตั้งค่าชุดโปรแกรมจำลอง คำสั่งนี้จะเริ่มต้นวิซาร์ดการกำหนดค่าที่ช่วยให้คุณสามารถเลือกโปรแกรมจำลองที่น่าสนใจ ดาวน์โหลดไฟล์ไบนารีของโปรแกรมจำลองที่เกี่ยวข้อง และตั้งค่าพอร์ตโปรแกรมจำลองหากค่าเริ่มต้นไม่เหมาะสม
firebase init emulators
เมื่อติดตั้งโปรแกรมจำลองแล้ว จะไม่มีการตรวจสอบการอัปเดตและจะไม่มีการดาวน์โหลดอัตโนมัติเพิ่มเติมจนกว่าคุณจะอัปเดตเวอร์ชัน Firebase CLI
กำหนดค่าชุดโปรแกรมจำลอง
คุณสามารถเลือกกำหนดค่าพอร์ตเครือข่ายของโปรแกรมจำลองและเส้นทางไปยังคำจำกัดความของกฎความปลอดภัยในไฟล์ firebase.json
ได้:
- เปลี่ยนพอร์ตโปรแกรมจำลองโดยการรัน
firebase init emulators
หรือโดยการแก้ไขfirebase.json
ด้วยตนเอง - เปลี่ยนเส้นทางเป็นคำจำกัดความของกฎความปลอดภัยโดยการแก้ไข
firebase.json
ด้วยตนเอง
หากคุณไม่ได้กำหนดการตั้งค่าเหล่านี้ ตัวจำลองจะรับฟังพอร์ตเริ่มต้นของมัน และตัวจำลอง Cloud Firestore, ฐานข้อมูลเรียลไทม์ และ Cloud Storage สำหรับ Firebase จะทำงานด้วยความปลอดภัยของข้อมูลแบบเปิด
สั่งการ | คำอธิบาย |
---|---|
เริ่มต้นโปรแกรมจำลอง | เริ่มวิซาร์ดการเริ่มต้นโปรแกรมจำลอง ระบุโปรแกรมจำลองที่จะติดตั้งและเลือกระบุการตั้งค่าพอร์ตโปรแกรมจำลองได้ init emulators นั้นไม่ทำลายล้าง การยอมรับค่าเริ่มต้นจะคงการกำหนดค่าโปรแกรมจำลองปัจจุบันไว้ |
การกำหนดค่าพอร์ต
อีมูเลเตอร์แต่ละตัวจะเชื่อมโยงกับพอร์ตอื่นบนเครื่องของคุณด้วยค่าเริ่มต้นที่ต้องการ
โปรแกรมจำลอง | พอร์ตเริ่มต้น |
---|---|
การรับรองความถูกต้อง | 9099 |
UI ของชุดโปรแกรมจำลอง | 4000 |
ฟังก์ชั่นคลาวด์ | 5001 |
อีเวนทาร์ค | 9299 |
ฐานข้อมูลเรียลไทม์ | 9000 |
คลาวด์ไฟร์สโตร์ | 8080 |
ที่เก็บข้อมูลบนคลาวด์สำหรับ Firebase | 9199 |
โฮสติ้งไฟร์เบส | 5,000 |
ผับ/ซับ | 8085 |
การกำหนดค่ารหัสโครงการ
ขึ้นอยู่กับวิธีที่คุณเรียกใช้โปรแกรมจำลอง คุณอาจเรียกใช้หลายอินสแตนซ์ของโปรแกรมจำลองโดยใช้รหัสโปรเจ็กต์ Firebase ที่แตกต่างกันหรืออินสแตนซ์โปรแกรมจำลองหลายรายการสำหรับรหัสโปรเจ็กต์ที่ระบุ ในกรณีเช่นนี้ อินสแตนซ์โปรแกรมจำลองกำลังทำงานในสภาพแวดล้อมที่แยกจากกัน
โดยทั่วไปแล้ว แนวทางปฏิบัติที่ดีในการตั้งค่ารหัสโปรเจ็กต์เดียวสำหรับการเรียกใช้โปรแกรมจำลองทั้งหมด ดังนั้น Emulator Suite UI, โปรแกรมจำลองผลิตภัณฑ์ต่างๆ และอินสแตนซ์ที่ทำงานอยู่ทั้งหมดของโปรแกรมจำลองเฉพาะจึงสามารถสื่อสารได้อย่างถูกต้องในทุกกรณี
Local Emulator Suite จะส่งคำเตือนเมื่อตรวจพบรหัสโปรเจ็กต์หลายรายการในสภาพแวดล้อม แต่คุณสามารถลบล้างลักษณะการทำงานนี้ได้โดยตั้งค่าคีย์ singleProjectMode
เป็น false
ใน firebase.json
ของคุณ
คุณตรวจสอบการประกาศรหัสโปรเจ็กต์ว่าไม่ตรงกันได้ใน:
- โครงการเริ่มต้นในบรรทัดคำสั่ง ตามค่าเริ่มต้น รหัสโปรเจ็กต์จะถูกนำไปใช้เมื่อเริ่มต้นจากโปรเจ็กต์ที่เลือกด้วย
firebase init
หรือfirebase use
หากต้องการดูรายการโครงการ (และดูว่าโครงการใดถูกเลือก) ให้ใช้firebase projects:list
- การทดสอบหน่วยกฎ รหัสโปรเจ็กต์มักถูกระบุในการเรียกไปยังเมธอดไลบรารี Rules Unit Testing
initializeTestEnvironment
หรือinitializeTestApp
- บรรทัดคำสั่ง
--project
แฟล็กโครงการ การส่งผ่านการตั้งค่าสถานะ Firebase CLI--project
จะแทนที่โครงการเริ่มต้น คุณจะต้องตรวจสอบให้แน่ใจว่าค่าของแฟล็กตรงกับรหัสโปรเจ็กต์ในการทดสอบหน่วยและการเริ่มต้นแอป
นอกจากนี้ ให้ตรวจสอบการกำหนดค่ารหัสโปรเจ็กต์เฉพาะแพลตฟอร์มที่คุณได้ตั้งค่าไว้ขณะกำหนด ค่าแพลตฟอร์ม 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
โปรแกรมจำลองฐานข้อมูลเรียลไทม์, โปรแกรมจำลอง Cloud Firestore และส่วนหนึ่งของโปรแกรมจำลอง Cloud Storage สำหรับ Firebase นั้นใช้ Java ซึ่งสามารถปรับแต่งด้วยแฟล็ก JVM ผ่านตัวแปรสภาพแวดล้อม JAVA_TOOL_OPTIONS
ตัวอย่างเช่น หากคุณพบข้อผิดพลาดเกี่ยวกับพื้นที่ฮีป Java คุณสามารถเพิ่มขนาดฮีป Java สูงสุดเป็น 4GB:
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
สามารถระบุหลายแฟล็กได้ในเครื่องหมายคำพูดคั่นด้วยช่องว่าง เช่น JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g"
การตั้งค่าสถานะจะมีผลกับส่วนประกอบที่ใช้ Java ของโปรแกรมจำลองเท่านั้น และไม่มีผลกับส่วนอื่นๆ ของ Firebase CLI เช่น Emulator Suite UI
เริ่มต้นโปรแกรมจำลอง
คุณสามารถเริ่มโปรแกรมจำลองให้ทำงานจนกว่าจะสิ้นสุดด้วยตนเอง หรือให้ทำงานตามระยะเวลาของสคริปต์ทดสอบที่กำหนดแล้วปิดเครื่องโดยอัตโนมัติ
สั่งการ | คำอธิบาย | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
อีมูเลเตอร์: เริ่มต้น | เริ่มโปรแกรมจำลองสำหรับผลิตภัณฑ์ Firebase ที่กำหนดค่าใน firebase.json กระบวนการจำลองจะทำงานต่อไปจนกว่าจะหยุดทำงานอย่างชัดเจน การเรียก emulators:start จะดาวน์โหลดโปรแกรมจำลองไปที่ ~/.cache/firebase/emulators/ หากยังไม่ได้ติดตั้ง
| ||||||||||||
อีมูเลเตอร์: exec scriptpath | เรียกใช้สคริปต์ที่ scriptpath หลังจากเริ่มโปรแกรมจำลองสำหรับผลิตภัณฑ์ Firebase ที่กำหนดค่าใน firebase.json กระบวนการจำลองจะหยุดโดยอัตโนมัติเมื่อสคริปต์ทำงานเสร็จแล้ว
|
โดยทั่วไปแล้วเมธอด firebase emulators:exec
จะเหมาะสมกว่าสำหรับเวิร์กโฟลว์การรวมอย่างต่อเนื่อง
ส่งออกและนำเข้าข้อมูลโปรแกรมจำลอง
คุณสามารถส่งออกข้อมูลจากตัวจำลองการตรวจสอบสิทธิ์, Cloud Firestore, ฐานข้อมูลเรียลไทม์ และ Cloud Storage สำหรับ Firebase เพื่อใช้เป็นชุดข้อมูลพื้นฐานทั่วไปที่แชร์ได้ ชุดข้อมูลเหล่านี้สามารถนำเข้าได้โดยใช้แฟล็ก --import
ตามที่อธิบายไว้ข้างต้น
อีมูเลเตอร์: ส่งออก export_directory | การรับรองความถูกต้อง, Cloud Firestore, ฐานข้อมูลเรียลไทม์หรือ Cloud Storage สำหรับ Firebase emulator ส่งออกข้อมูลจากอินสแตนซ์ Cloud Firestore, Realtime Database หรือ Cloud Storage สำหรับ Firebase emulator ที่ทำงานอยู่ คุณสามารถสั่งให้โปรแกรมจำลองส่งออกข้อมูลโดยอัตโนมัติเมื่อปิดระบบโดยใช้แฟล็ก |
บูรณาการกับระบบ CI ของคุณ
การเรียกใช้อิมเมจ Emulator Suite ที่ถูกบรรจุในคอนเทนเนอร์
การติดตั้งและการกำหนดค่า Emulator Suite พร้อมคอนเทนเนอร์ในการตั้งค่า CI ทั่วไปนั้นตรงไปตรงมา
มีปัญหาบางประการที่ควรทราบ:
ไฟล์ JAR ได้รับการติดตั้งและแคชไว้ที่
~/.cache/firebase/emulators/
- คุณอาจต้องการเพิ่มเส้นทางนี้ในการกำหนดค่าแคช CI ของคุณเพื่อหลีกเลี่ยงการดาวน์โหลดซ้ำ
หากคุณไม่มีไฟล์
firebase.json
ในที่เก็บของคุณ คุณต้องเพิ่มอาร์กิวเมนต์บรรทัดคำสั่งให้กับคำสั่งemulators:start
หรือemulators:exec
เพื่อระบุว่าอีมูเลเตอร์ใดควรเริ่มทำงาน ตัวอย่างเช่น,
--only functions,firestore
สร้างโทเค็นการตรวจสอบสิทธิ์ (โปรแกรมจำลองโฮสติ้งเท่านั้น)
หากเวิร์กโฟลว์การรวมอย่างต่อเนื่องของคุณอาศัย 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
ใดๆ ที่ทำงานอยู่ในโปรแกรมจำลองฟังก์ชันระบบคลาวด์หรือส่วนขยาย
หากต้องการปิดใช้งานทริกเกอร์ฟังก์ชันภายในเครื่องชั่วคราว ให้ส่งคำขอ 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 ของ Emulator
ตารางในส่วนนี้ระบุว่าโปรแกรมจำลองใดบ้างที่ไคลเอ็นต์และ Admin SDK รองรับ ในอนาคต หมายถึงมีการวางแผนรองรับโปรแกรมจำลองแล้วแต่ยังไม่พร้อมใช้งาน
ความพร้อมใช้งานของ SDK ไคลเอ็นต์
หุ่นยนต์ | แพลตฟอร์มของ Apple | เว็บ | UI ของ Firebase หุ่นยนต์ | UI ของ Firebase ไอโอเอส | UI ของ Firebase เว็บ | |
---|---|---|---|---|---|---|
ฐานข้อมูลเรียลไทม์ | 19.4.0 | 7.2.0 | 8.0.0 | 6.4.0 | อนาคต | ไม่มี |
คลาวด์ไฟร์สโตร์ | 21.6.0 | 7.2.0 | 8.0.0 | 6.4.0 | อนาคต | ไม่มี |
การรับรองความถูกต้อง | 20.0.0 | 7.0.0 | 8.0.0 | 7.0.0 | อนาคต | 4.7.2 |
ที่เก็บข้อมูลบนคลาวด์สำหรับ Firebase | 20.0.0 | 8.0.0 | 8.4.0 | 7.0.0 | 11.0.0 | ไม่มี |
ฟังก์ชั่นคลาวด์ | 19.1.0 | 7.2.0 | 8.0.0 | ไม่มี | ไม่มี | ไม่มี |
โฮสติ้ง | ไม่มี | ไม่มี | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
ส่วนขยาย | ไม่มี | ไม่มี | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
ความพร้อมใช้งานของ SDK ผู้ดูแลระบบ
โหนด | ชวา | หลาม | ไป | |
---|---|---|---|---|
ฐานข้อมูลเรียลไทม์ | 8.6.0 | 6.10.0 | 2.18.0 | อนาคต |
คลาวด์ไฟร์สโตร์ | 8.0.0 | 6.10.0 | 3.0.0 | 1.0.0 |
การรับรองความถูกต้อง | 9.3.0 | 7.2.0 | 5.0.0 | 4.2.0 |
ที่เก็บข้อมูลบนคลาวด์สำหรับ Firebase | 9.8.0 | อนาคต | อนาคต | อนาคต |
ฟังก์ชั่นคลาวด์ | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
โฮสติ้ง | ไม่มี | ไม่มี | ไม่มี | ไม่มี |
ส่วนขยาย | ไม่มี | ไม่มี | ไม่มี | ไม่มี |