Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

ติดตั้ง กำหนดค่า และรวม Local Emulator Suite

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

Firebase Local Emulator Suite สามารถติดตั้งและกำหนดค่าสำหรับต้นแบบและสภาพแวดล้อมการทดสอบต่างๆ ได้ ตั้งแต่เซสชันการสร้างต้นแบบแบบครั้งเดียวไปจนถึงเวิร์กโฟลว์การผสานรวมอย่างต่อเนื่องในระดับการผลิต

ติดตั้ง Local Emulator Suite

ก่อนติดตั้ง Emulator Suite คุณจะต้อง:

  • Node.js เวอร์ชัน 8.0 ขึ้นไป
  • Java JDK เวอร์ชัน 11 ขึ้นไป

ในการติดตั้ง Emulator Suite:

  1. ติดตั้ง Firebase CLI หากคุณยังไม่ได้ติดตั้ง Firebase CLI ให้ ติดตั้งเดี๋ยวนี้ คุณจะต้องใช้ CLI เวอร์ชัน 8.14.0 หรือสูงกว่าเพื่อใช้ Emulator Suite คุณสามารถตรวจสอบเวอร์ชันที่คุณติดตั้งโดยใช้คำสั่งต่อไปนี้:
    firebase --version
  2. หากคุณยังไม่ได้ดำเนินการดังกล่าว ให้เริ่มต้นไดเร็กทอรีการทำงานปัจจุบันเป็นโปรเจ็กต์ Firebase โดยทำตามคำแนะนำบนหน้าจอเพื่อระบุผลิตภัณฑ์ที่จะใช้:
    firebase init
  3. ตั้งค่า Emulator Suite คำสั่งนี้เริ่มต้นวิซาร์ดการกำหนดค่าที่ให้คุณเลือกอีมูเลเตอร์ที่สนใจ ดาวน์โหลดไฟล์ไบนารีอีมูเลเตอร์ที่เกี่ยวข้อง และตั้งค่าพอร์ตอีมูเลเตอร์หากค่าเริ่มต้นไม่เหมาะสม
    firebase init emulators

เมื่อติดตั้งโปรแกรมจำลองแล้ว จะไม่มีการตรวจสอบการอัปเดตและจะไม่มีการดาวน์โหลดอัตโนมัติเพิ่มเติมจนกว่าคุณจะอัปเดตเวอร์ชัน Firebase CLI

กำหนดค่า Emulator Suite

คุณสามารถเลือกกำหนดค่าพอร์ตเครือข่ายของอีมูเลเตอร์และพาธไปยังข้อกำหนดกฎความปลอดภัยในไฟล์ firebase.json :

  • เปลี่ยนพอร์ตโปรแกรมจำลองโดยเรียกใช้ firebase init emulators หรือแก้ไข firebase.json ด้วยตนเอง
  • เปลี่ยนเส้นทางไปยังข้อกำหนดกฎความปลอดภัยโดยแก้ไข firebase.json ด้วยตนเอง

หากคุณไม่ได้กำหนดการตั้งค่าเหล่านี้ อีมูเลเตอร์จะรับฟังพอร์ตเริ่มต้น และโปรแกรมจำลอง Cloud Firestore, Realtime Database และ Cloud Storage จะทำงานด้วยการรักษาความปลอดภัยข้อมูลแบบเปิด

สั่งการ คำอธิบาย
init emulators เริ่มตัวช่วยสร้างการเริ่มต้นโปรแกรมจำลอง ระบุอีมูเลเตอร์ที่จะติดตั้งและเลือกระบุการตั้งค่าพอร์ตอีมูเลเตอร์ init emulators ไม่ทำลาย; การยอมรับค่าเริ่มต้นจะคงการกำหนดค่าอีมูเลเตอร์ปัจจุบันไว้

การกำหนดค่าพอร์ต

อีมูเลเตอร์แต่ละตัวผูกกับพอร์ตอื่นบนเครื่องของคุณด้วยค่าเริ่มต้นที่ต้องการ

อีมูเลเตอร์ พอร์ตเริ่มต้น
การตรวจสอบสิทธิ์ 9099
Emulator Suite UI 4000
ฟังก์ชั่นคลาวด์ 5001
Eventarc 9299
ฐานข้อมูลเรียลไทม์ 9000
Cloud Firestore 8080
การจัดเก็บเมฆ 9199
Firebase Hosting 5000
ผับ/ย่อย 8085

การกำหนดค่ากฎความปลอดภัย

อีมูเลเตอร์จะใช้การกำหนดค่ากฎความปลอดภัยจากคีย์การกำหนดค่า 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": {
    "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 นั้นใช้ Java ซึ่งปรับแต่งได้ด้วยแฟล็ก JVM ผ่านตัวแปรสภาพแวดล้อม JAVA_TOOL_OPTIONS

ตัวอย่างเช่น หากคุณพบข้อผิดพลาดเกี่ยวกับ Java heap space คุณอาจเพิ่มขนาดฮีป 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 จะดาวน์โหลด emulators ไปที่ ~/.cache/firebase/emulators/ หากยังไม่ได้ติดตั้ง
ธง คำอธิบาย
--only ไม่จำเป็น. จำกัด ตัวจำลองที่เริ่มต้น ระบุรายชื่ออีมูเลเตอร์ที่คั่นด้วยเครื่องหมายจุลภาค โดยระบุ 'auth', 'database', 'firestore', 'functions', 'hosting' หรือ 'pubsub' อย่างน้อยหนึ่งรายการ
--ตรวจสอบ --inspect-functions debug_port ไม่จำเป็น. ใช้กับโปรแกรมจำลอง Cloud Functions เพื่อเปิดใช้งานการแก้ไขจุดบกพร่องของฟังก์ชันที่พอร์ตที่ระบุ (หรือพอร์ตเริ่มต้น 9229 หากละเว้นอาร์กิวเมนต์) โปรดทราบว่าเมื่อมีการระบุแฟล็กนี้ โปรแกรมจำลอง Cloud Functions จะสลับไปยังโหมดการดำเนินการต่อเนื่องแบบพิเศษ ซึ่งฟังก์ชันต่างๆ จะถูกดำเนินการในกระบวนการเดียว ตามลำดับ (FIFO) วิธีนี้ช่วยลดความยุ่งยากในการดีบักฟังก์ชัน แม้ว่าพฤติกรรมจะแตกต่างจากการทำงานหลายขั้นตอนแบบคู่ขนานของฟังก์ชันในคลาวด์
--export-on-exit= ไม่จำเป็น. ใช้กับการตรวจสอบสิทธิ์, Cloud Firestore, ฐานข้อมูลเรียลไทม์หรือโปรแกรมจำลองที่เก็บข้อมูลบนคลาวด์ สั่งให้อีมูเลเตอร์เอ็กซ์พอร์ตข้อมูลไปยังไดเร็กทอรีเมื่อเกิดการปิดเครื่อง ดังที่อธิบายไว้สำหรับคำสั่ง emulators:export ไดเร็กทอรีการเอ็กซ์พอร์ตสามารถระบุได้ด้วยแฟล็กนี้: firebase emulators:start --export-on-exit=./saved-data หากใช้ --import เส้นทางการส่งออกจะมีค่าเริ่มต้นเหมือนกัน ตัวอย่างเช่น firebase emulators:start --import=./data-path --export-on-exit สุดท้าย หากต้องการ ให้ส่งเส้นทางไดเร็กทอรีที่แตกต่างกันไปยัง --import และ --export-on-exit
--import= import_directory ไม่จำเป็น. ใช้กับการตรวจสอบสิทธิ์, Cloud Firestore, ฐานข้อมูลเรียลไทม์หรือโปรแกรมจำลองที่เก็บข้อมูลบนคลาวด์ นำเข้าข้อมูลที่บันทึกไว้โดยใช้ตัวเลือกการเริ่มต้น --export-on-exit หรือคำสั่ง emulators:export ไปยังอินสแตนซ์การพิสูจน์ตัวตนที่รันอยู่, Cloud Firestore, ฐานข้อมูลเรียลไทม์หรืออินสแตนซ์อีมูเลเตอร์ของ Cloud Storage ข้อมูลใด ๆ ที่อยู่ในหน่วยความจำอีมูเลเตอร์จะถูกแทนที่
อีมูเลเตอร์:exec scriptpath เรียกใช้สคริปต์ที่ scriptpath หลังจากเริ่มโปรแกรมจำลองสำหรับผลิตภัณฑ์ Firebase ที่กำหนดค่าใน firebase.json กระบวนการอีมูเลเตอร์จะหยุดโดยอัตโนมัติเมื่อสคริปต์ทำงานเสร็จ
ธง คำอธิบาย
--only ไม่จำเป็น. จำกัด ตัวจำลองที่เริ่มต้น ระบุรายชื่ออีมูเลเตอร์ที่คั่นด้วยเครื่องหมายจุลภาค โดยระบุ 'firestore', 'database', 'functions', 'hosting' หรือ 'pubsub' อย่างน้อยหนึ่งรายการ
--ตรวจสอบ --inspect-functions debug_port ไม่จำเป็น. ใช้กับโปรแกรมจำลอง Cloud Functions เพื่อเปิดใช้งานการแก้ไขจุดบกพร่องของฟังก์ชันที่พอร์ตที่ระบุ (หรือพอร์ตเริ่มต้น 9229 หากละเว้นอาร์กิวเมนต์) โปรดทราบว่าเมื่อมีการระบุแฟล็กนี้ โปรแกรมจำลอง Cloud Functions จะสลับไปยังโหมดการดำเนินการต่อเนื่องแบบพิเศษ ซึ่งฟังก์ชันต่างๆ จะถูกดำเนินการในกระบวนการเดียว ตามลำดับ (FIFO) วิธีนี้ช่วยลดความยุ่งยากในการดีบักฟังก์ชัน แม้ว่าพฤติกรรมจะแตกต่างจากการทำงานหลายขั้นตอนแบบคู่ขนานของฟังก์ชันในคลาวด์
--export-on-exit= ไม่จำเป็น. ใช้กับการตรวจสอบสิทธิ์, Cloud Firestore, ฐานข้อมูลเรียลไทม์หรือโปรแกรมจำลองที่เก็บข้อมูลบนคลาวด์ สั่งให้อีมูเลเตอร์เอ็กซ์พอร์ตข้อมูลไปยังไดเร็กทอรีเมื่อเกิดการปิดเครื่อง ดังที่อธิบายไว้สำหรับคำสั่ง emulators:export ไดเร็กทอรีการเอ็กซ์พอร์ตสามารถระบุได้ด้วยแฟล็กนี้: firebase emulators:start --export-on-exit=./saved-data หากใช้ --import เส้นทางการส่งออกจะมีค่าเริ่มต้นเหมือนกัน ตัวอย่างเช่น firebase emulators:start --import=./data-path --export-on-exit สุดท้าย หากต้องการ ให้ส่งเส้นทางไดเร็กทอรีที่แตกต่างกันไปยัง --import และ --export-on-exit
--import= import_directory ไม่จำเป็น. ใช้กับการตรวจสอบสิทธิ์, Cloud Firestore, ฐานข้อมูลเรียลไทม์หรือโปรแกรมจำลองที่เก็บข้อมูลบนคลาวด์ นำเข้าข้อมูลที่บันทึกไว้โดยใช้ตัวเลือกการเริ่มต้น --export-on-exit หรือคำสั่ง emulators:export ไปยังอินสแตนซ์การพิสูจน์ตัวตนที่รันอยู่, Cloud Firestore, ฐานข้อมูลเรียลไทม์หรืออินสแตนซ์อีมูเลเตอร์ของ Cloud Storage ข้อมูลใด ๆ ที่อยู่ในหน่วยความจำของโปรแกรมจำลองจะถูกเขียนทับ
--ui ไม่จำเป็น. เรียกใช้ Emulator UI ระหว่างดำเนินการ

โดยทั่วไปวิธี firebase emulators:exec เหมาะสมกว่าสำหรับเวิร์กโฟลว์การรวมแบบต่อเนื่อง

ส่งออกและนำเข้าข้อมูลโปรแกรมจำลอง

คุณสามารถส่งออกข้อมูลจากตัวจำลองการตรวจสอบสิทธิ์, Cloud Firestore, ฐานข้อมูลเรียลไทม์ และ Cloud Storage เพื่อใช้เป็นชุดข้อมูลพื้นฐานทั่วไปที่แชร์ได้ ชุดข้อมูลเหล่านี้สามารถนำเข้าได้โดยใช้แฟ --import ดังที่อธิบายไว้ข้างต้น

อีมูเลเตอร์:ส่งออก export_directory

การตรวจสอบสิทธิ์, Cloud Firestore, ฐานข้อมูลเรียลไทม์หรือโปรแกรมจำลองที่เก็บข้อมูล บนคลาวด์ ส่งออกข้อมูลจากอินสแตนซ์ Cloud Firestore, Realtime Database หรือ Cloud Storage emulator ที่ทำงานอยู่ export_directory ที่ระบุจะถูกสร้างขึ้นหากไม่มีอยู่ หากมีไดเร็กทอรีที่ระบุ คุณจะได้รับแจ้งให้ยืนยันว่าข้อมูลการส่งออกก่อนหน้านี้ควรถูกเขียนทับ คุณสามารถข้ามพรอมต์นี้โดยใช้แฟล็ก --force ไดเรกทอรีส่งออกมีไฟล์รายการข้อมูล firebase-export-metadata.json

คุณสามารถสั่งให้อีมูเลเตอร์ส่งออกข้อมูลโดยอัตโนมัติเมื่อปิดเครื่องโดยใช้ --export-on-exit อธิบายไว้ข้างต้น

ผสานรวมกับระบบ 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 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 หรือโปรแกรมจำลองส่วนขยาย

หากต้องการปิดใช้งานทริกเกอร์ฟังก์ชันภายในชั่วคราว ให้ส่งคำขอ 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
}

การรวม Emulator SDK

ตารางในส่วนนี้ระบุว่าโปรแกรมจำลองใดบ้างที่ไคลเอ็นต์และ Admin SDK สนับสนุน อนาคต หมายถึงมีการวางแผนสนับสนุนโปรแกรมจำลอง แต่ยังไม่พร้อมใช้งาน

ความพร้อมใช้งานของไคลเอ็นต์ SDK

Android แพลตฟอร์ม Apple เว็บ Firebase UI
Android
Firebase UI
iOS
Firebase UI
เว็บ
ฐานข้อมูลเรียลไทม์ 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 อนาคต ไม่มี
การตรวจสอบสิทธิ์ 20.0.0 7.0.0 8.0.0 7.0.0 อนาคต อนาคต
การจัดเก็บเมฆ 20.0.0 8.0.0 8.4.0 ไม่มี ไม่มี ไม่มี
ฟังก์ชั่นคลาวด์ 19.1.0 7.2.0 8.0.0 ไม่มี ไม่มี ไม่มี
โฮสติ้ง ไม่มี ไม่มี ไม่มี ไม่มี ไม่มี ไม่มี
ส่วนขยาย ไม่มี ไม่มี ไม่มี ไม่มี ไม่มี ไม่มี

ความพร้อมใช้งานของ Admin SDK

โหนด Java Python ไป
ฐานข้อมูลเรียลไทม์ 8.6.0 6.10.0 2.18.0 อนาคต
Cloud Firestore 8.0.0 6.10.0 3.0.0 1.0.0
การตรวจสอบสิทธิ์ 9.3.0 7.2.0 5.0.0 4.2.0
การจัดเก็บเมฆ 9.8.0 อนาคต อนาคต อนาคต
ฟังก์ชั่นคลาวด์ ไม่มี ไม่มี ไม่มี ไม่มี
โฮสติ้ง ไม่มี ไม่มี ไม่มี ไม่มี
ส่วนขยาย ไม่มี ไม่มี ไม่มี ไม่มี