Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Instal, konfigurasikan, dan integrasikan Suite Emulator Lokal

Firebase Local Emulator Suite dapat diinstal dan dikonfigurasi untuk prototipe dan lingkungan pengujian yang berbeda, mulai dari sesi pembuatan prototipe satu kali hingga alur kerja continuous integration skala produksi.

Instal Rangkaian Emulator Lokal

Sebelum menginstal Emulator Suite, Anda memerlukan:

  • Node.js versi 8.0 atau lebih tinggi.
  • Java JDK versi 11 atau lebih tinggi.

Untuk menginstal Rangkaian Emulator:

  1. Instal Firebase CLI . Jika Anda belum menginstal Firebase CLI, instal sekarang . Anda memerlukan CLI versi 8.14.0 atau lebih tinggi untuk menggunakan Emulator Suite. Anda dapat memeriksa versi mana yang telah Anda instal menggunakan perintah berikut:
    firebase --version
  2. Jika Anda belum melakukannya, inisialisasi direktori kerja saat ini sebagai proyek Firebase, dengan mengikuti petunjuk di layar untuk menentukan produk mana yang akan digunakan:
    firebase init
  3. Siapkan Paket Emulator. Perintah ini memulai wizard konfigurasi yang memungkinkan Anda memilih emulator yang diinginkan, mendownload file biner emulator yang sesuai, dan menyetel port emulator jika defaultnya tidak sesuai.
    firebase init emulators

Setelah emulator dipasang, tidak ada pemeriksaan pembaruan yang dilakukan dan tidak ada unduhan otomatis tambahan yang terjadi hingga Anda memperbarui versi Firebase CLI.

Konfigurasikan Suite Emulator

Secara opsional, Anda dapat mengonfigurasi port jaringan emulator dan jalur ke definisi Aturan Keamanan di file firebase.json :

  • Ubah port emulator dengan menjalankan firebase init emulators atau dengan mengedit firebase.json secara manual.
  • Ubah jalur ke definisi Aturan Keamanan dengan mengedit firebase.json secara manual.

Jika Anda tidak mengonfigurasi setelan ini, emulator akan memproses port defaultnya, dan emulator Cloud Firestore, Realtime Database, dan Cloud Storage for Firebase akan berjalan dengan keamanan data terbuka.

Memerintah Keterangan
init emulator Mulai wizard inisialisasi emulator. Identifikasi emulator yang akan diinstal dan secara opsional tentukan setelan port emulator. init emulators tidak merusak; menerima default akan mempertahankan konfigurasi emulator saat ini.

Konfigurasi pelabuhan

Setiap emulator mengikat ke port yang berbeda pada mesin Anda dengan nilai default pilihan.

Emulator Pelabuhan Bawaan
Autentikasi 9099
Antarmuka Emulator Suite 4000
Fungsi Awan 5001
Eventtarc 9299
Basis Data Waktu Nyata 9000
Toko Api Awan 8080
Penyimpanan Awan untuk Firebase 9199
Hosting Firebase 5000
Pub/Sub 8085

konfigurasi ID proyek

Bergantung pada cara Anda memanggil emulator, Anda dapat menjalankan beberapa instance emulator menggunakan ID proyek Firebase yang berbeda atau beberapa instance emulator untuk ID proyek tertentu. Dalam kasus tersebut, instance emulator berjalan di lingkungan terpisah.

Biasanya merupakan praktik yang baik untuk menyetel satu project ID untuk semua pemanggilan emulator, sehingga UI Emulator Suite, emulator produk yang berbeda, dan semua instance yang berjalan dari emulator tertentu dapat berkomunikasi dengan benar di semua kasus.

Local Emulator Suite mengeluarkan peringatan saat mendeteksi beberapa project ID di lingkungan, meskipun Anda dapat mengganti perilaku ini dengan menyetel kunci singleProjectMode ke false di firebase.json Anda.

Anda dapat memeriksa deklarasi ID proyek untuk ketidakcocokan di:

  • Proyek default di baris perintah. Secara default, ID proyek akan diambil saat startup dari proyek yang dipilih dengan firebase init atau firebase use . Untuk melihat daftar proyek (dan melihat mana yang dipilih) gunakan firebase projects:list .
  • Tes unit aturan. ID project sering ditentukan dalam panggilan ke metode library Rules Unit Testing initializeTestEnvironment atau initializeTestApp .
  • Baris perintah -- bendera --project . Meneruskan tanda Firebase CLI --project akan menggantikan proyek default. Anda harus memastikan bahwa nilai bendera cocok dengan ID proyek dalam pengujian unit dan inisialisasi aplikasi.

Periksa juga konfigurasi ID proyek khusus platform yang telah Anda atur saat mengonfigurasi platform Apple , Android , dan proyek web Anda.

Konfigurasi Aturan Keamanan

Emulator akan mengambil konfigurasi Security Rules dari database , firestore , dan kunci konfigurasi storage di 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"
    }
  }
}

Menentukan opsi Java

Emulator Realtime Database, emulator Cloud Firestore, dan bagian dari emulator Cloud Storage for Firebase berbasis Java, yang dapat disesuaikan dengan flag JVM melalui variabel lingkungan JAVA_TOOL_OPTIONS .

Misalnya, jika Anda mengalami kesalahan terkait ruang heap Java, Anda dapat meningkatkan ukuran maksimum heap Java menjadi 4 GB:

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

Beberapa bendera dapat ditentukan dalam tanda kutip yang dipisahkan oleh spasi, seperti JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g" . Tanda hanya memengaruhi komponen emulator berbasis Java dan tidak berpengaruh pada bagian lain dari Firebase CLI, seperti Emulator Suite UI.

Mulai emulator

Anda dapat memulai emulator untuk berjalan hingga dihentikan secara manual, atau menjalankan selama durasi skrip pengujian yang ditentukan, lalu mati secara otomatis.

Memerintah Keterangan
emulator: mulai Mulai emulator untuk produk Firebase yang dikonfigurasi di firebase.json . Proses emulator akan terus berjalan hingga berhenti secara eksplisit. Memanggil emulators:start akan mengunduh emulator ke ~/.cache/firebase/emulators/ jika belum terpasang.
Bendera Deskripsi
--only Opsional. Batasi emulator mana yang dimulai. Berikan daftar nama emulator yang dipisahkan koma, dengan menyebutkan satu atau beberapa 'auth', 'database', 'firestore', 'functions', 'hosting', atau 'pubsub'.
--inspect-functions debug_port Opsional. Gunakan dengan emulator Cloud Functions untuk mengaktifkan proses debug breakpoint fungsi pada port yang ditentukan (atau port default 9229 jika argumen dihilangkan). Perhatikan bahwa ketika tanda ini diberikan, emulator Cloud Functions akan beralih ke mode eksekusi berseri khusus di mana fungsi dijalankan dalam satu proses, dalam urutan berurutan (FIFO); ini menyederhanakan debug fungsi, meskipun perilakunya berbeda dari multi-proses, eksekusi paralel fungsi di cloud.
--export-on-exit= Opsional. Gunakan dengan Authentication, Cloud Firestore, Realtime Database, atau Cloud Storage for Firebase emulator. Instruksikan emulator untuk mengekspor data ke direktori saat shutdown terjadi, seperti yang dijelaskan untuk perintah emulators:export . Direktori ekspor dapat ditentukan dengan flag ini: firebase emulators:start --export-on-exit=./saved-data . Jika --import digunakan, jalur ekspor defaultnya sama; misalnya: firebase emulators:start --import=./data-path --export-on-exit . Terakhir, jika diinginkan, lewati jalur direktori yang berbeda ke --import dan --export-on-exit .
--import= import_directory Opsional. Gunakan dengan Authentication, Cloud Firestore, Realtime Database, atau Cloud Storage for Firebase emulator. Impor data yang disimpan menggunakan opsi startup --export-on-exit atau emulators:export ke instance emulator Authentication, Cloud Firestore, Realtime Database, atau Cloud Storage for Firebase yang sedang berjalan. Data apa pun yang saat ini ada di memori emulator akan ditimpa.
emulator: scriptpath exec Jalankan skrip di scriptpath setelah memulai emulator untuk produk Firebase yang dikonfigurasi di firebase.json . Proses emulator akan berhenti secara otomatis ketika skrip selesai dijalankan.
Bendera Deskripsi
--only Opsional. Batasi emulator mana yang dimulai. Berikan daftar nama emulator yang dipisahkan koma, dengan menyebutkan satu atau beberapa 'firestore', 'database', 'functions', 'hosting', atau 'pubsub'.
--inspect-functions debug_port Opsional. Gunakan dengan emulator Cloud Functions untuk mengaktifkan proses debug breakpoint fungsi pada port yang ditentukan (atau port default 9229 jika argumen dihilangkan). Perhatikan bahwa ketika tanda ini diberikan, emulator Cloud Functions akan beralih ke mode eksekusi berseri khusus di mana fungsi dijalankan dalam satu proses, dalam urutan berurutan (FIFO); ini menyederhanakan debug fungsi, meskipun perilakunya berbeda dari multi-proses, eksekusi paralel fungsi di cloud.
--export-on-exit= Opsional. Gunakan dengan Authentication, Cloud Firestore, Realtime Database, atau Cloud Storage for Firebase emulator. Instruksikan emulator untuk mengekspor data ke direktori saat shutdown terjadi, seperti yang dijelaskan untuk perintah emulators:export . Direktori ekspor dapat ditentukan dengan flag ini: firebase emulators:start --export-on-exit=./saved-data . Jika --import digunakan, jalur ekspor defaultnya sama; misalnya: firebase emulators:start --import=./data-path --export-on-exit . Terakhir, jika diinginkan, lewati jalur direktori yang berbeda ke --import dan --export-on-exit .
--import= import_directory Opsional. Gunakan dengan Authentication, Cloud Firestore, Realtime Database, atau Cloud Storage for Firebase emulator. Impor data yang disimpan menggunakan opsi startup --export-on-exit atau emulators:export ke instance emulator Authentication, Cloud Firestore, Realtime Database, atau Cloud Storage for Firebase yang sedang berjalan. Data apa pun yang saat ini ada di memori emulator akan ditimpa.
--ui Opsional. Jalankan UI Emulator selama eksekusi.

firebase emulators:exec umumnya lebih sesuai untuk alur kerja integrasi berkelanjutan.

Ekspor dan impor data emulator

Anda dapat mengekspor data dari Authentication, Cloud Firestore, Realtime Database, dan Cloud Storage for Firebase emulator untuk digunakan sebagai kumpulan data baseline umum yang dapat dibagikan. Set data ini dapat diimpor menggunakan flag --import , seperti dijelaskan di atas.

emulator: ekspor export_directory

Otentikasi, Cloud Firestore, Realtime Database, atau Cloud Storage for Firebase emulator . Ekspor data dari instance emulator Cloud Firestore, Realtime Database, atau Cloud Storage for Firebase yang sedang berjalan. export_directory yang ditentukan akan dibuat jika belum ada. Jika direktori yang ditentukan ada, Anda akan diminta untuk mengonfirmasi bahwa data ekspor sebelumnya harus ditimpa. Anda dapat melewati prompt ini menggunakan flag --force . Direktori ekspor berisi file manifes data, firebase-export-metadata.json .

Anda dapat menginstruksikan emulator untuk mengekspor data secara otomatis saat dimatikan menggunakan flag --export-on-exit dijelaskan di atas.

Integrasikan dengan sistem CI Anda

Menjalankan image Emulator Suite dalam container

Penginstalan dan konfigurasi Emulator Suite dengan container dalam penyiapan CI tipikal sangatlah mudah.

Ada beberapa masalah yang perlu diperhatikan:

  • File JAR diinstal dan di-cache di ~/.cache/firebase/emulators/ .

    • Anda mungkin ingin menambahkan jalur ini ke konfigurasi cache CI untuk menghindari unduhan berulang.
  • Jika Anda tidak memiliki file firebase.json di repositori, Anda harus menambahkan argumen baris perintah ke perintah emulators:start atau emulators:exec untuk menentukan emulator mana yang harus dijalankan. Sebagai contoh,
    --only functions,firestore .

Hasilkan token autentikasi (Hosting emulator saja)

Jika alur kerja continuous integration Anda mengandalkan Firebase Hosting , Anda harus masuk menggunakan token untuk menjalankan firebase emulators:exec . Emulator lain tidak memerlukan login.

Untuk menghasilkan token, jalankan firebase login:ci di lingkungan lokal Anda; ini tidak boleh dilakukan dari sistem CI. Ikuti instruksi untuk mengautentikasi. Anda hanya perlu melakukan langkah ini satu kali per project, karena token akan valid di seluruh build. Token harus diperlakukan seperti kata sandi; pastikan dirahasiakan.

Jika lingkungan CI Anda memungkinkan Anda menentukan variabel lingkungan yang dapat digunakan dalam skrip build, cukup buat variabel lingkungan bernama FIREBASE_TOKEN , dengan nilai berupa string token akses. Firebase CLI akan secara otomatis mengambil variabel lingkungan FIREBASE_TOKEN dan emulator akan dimulai dengan benar.

Sebagai upaya terakhir, Anda cukup menyertakan token dalam skrip build, tetapi pastikan pihak yang tidak tepercaya tidak memiliki akses. Untuk pendekatan hard-coded ini, Anda dapat menambahkan --token "YOUR_TOKEN_STRING_HERE" ke perintah firebase emulators:exec .

Gunakan REST API Emulator Hub

Daftar menjalankan emulator

Untuk mencantumkan emulator yang sedang berjalan, kirimkan permintaan GET ke /emulators endpoint Emulator Hub.

curl localhost:4400/emulators

Hasilnya adalah objek JSON yang mencantumkan semua emulator yang berjalan dan konfigurasi host/portnya, misalnya:

{
  "hub":{
    "name": "hub",
    "host": "localhost",
    "port": 4400
  },
  "functions": {
    "name": "functions",
    "host": "localhost",
    "port": 5001
  }
  "firestore": {
    "name": "firestore",
    "host": "localhost",
    "port": 8080
  }
}

Aktifkan / Nonaktifkan Pemicu Fungsi Latar Belakang

Dalam beberapa situasi, Anda perlu menonaktifkan sementara fungsi lokal dan pemicu ekstensi. Misalnya, Anda mungkin ingin menghapus semua data di emulator Cloud Firestore tanpa memicu fungsi onDelete apa pun yang berjalan di emulator Cloud Functions atau Extensions.

Untuk menonaktifkan pemicu fungsi lokal untuk sementara, kirim permintaan PUT ke endpoint /functions/disableBackgroundTriggers dari Emulator Hub.

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

Hasilnya akan berupa objek JSON yang merinci status saat ini.

{
  "enabled": false
}

Untuk mengaktifkan pemicu fungsi lokal setelah dinonaktifkan, kirim permintaan PUT ke endpoint /functions/enableBackgroundTriggers dari Emulator Hub.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

Hasilnya akan berupa objek JSON yang merinci status saat ini.

{
  "enabled": true
}

Integrasi SDK Emulator

Tabel di bagian ini menunjukkan emulator mana yang didukung oleh SDK klien dan Admin. Masa depan berarti dukungan emulator direncanakan tetapi belum tersedia.

Ketersediaan SDK klien

Android Platform Apple Web UI Firebase
Android
UI Firebase
iOS
UI Firebase
Web
Basis Data Waktu Nyata 19.4.0 7.2.0 8.0.0 6.4.0 Masa depan T/A
Toko Api Awan 21.6.0 7.2.0 8.0.0 6.4.0 Masa depan T/A
Autentikasi 20.0.0 7.0.0 8.0.0 7.0.0 Masa depan 4.7.2
Penyimpanan Awan untuk Firebase 20.0.0 8.0.0 8.4.0 7.0.0 11.0.0 T/A
Fungsi Awan 19.1.0 7.2.0 8.0.0 T/A T/A T/A
Menerima tamu T/A T/A T/A T/A T/A T/A
Ekstensi T/A T/A T/A T/A T/A T/A

Ketersediaan SDK Admin

Node Jawa Piton Pergi
Basis Data Waktu Nyata 8.6.0 6.10.0 2.18.0 Masa depan
Toko Api Awan 8.0.0 6.10.0 3.0.0 1.0.0
Autentikasi 9.3.0 7.2.0 5.0.0 4.2.0
Penyimpanan Awan untuk Firebase 9.8.0 Masa depan Masa depan Masa depan
Fungsi Awan T/A T/A T/A T/A
Menerima tamu T/A T/A T/A T/A
Ekstensi T/A T/A T/A T/A