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:
Untuk menginstal Rangkaian Emulator:
- 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
- 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
- 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 mengeditfirebase.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
ataufirebase use
. Untuk melihat daftar proyek (dan melihat mana yang dipilih) gunakanfirebase projects:list
. - Tes unit aturan. ID project sering ditentukan dalam panggilan ke metode library Rules Unit Testing
initializeTestEnvironment
atauinitializeTestApp
. - 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.
| ||||||||||||
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.
|
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. Anda dapat menginstruksikan emulator untuk mengekspor data secara otomatis saat dimatikan menggunakan flag |
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 perintahemulators:start
atauemulators: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 |