Firebase Local Emulator Suite dapat diinstal dan dikonfigurasikan untuk berbagai prototipe dan lingkungan pengujian, mulai dari sesi pembuatan prototipe satu kali hingga alur kerja continuous integration berskala produksi.
Menginstal Local Emulator Suite
Sebelum menginstal Emulator Suite, Anda memerlukan:
Untuk menginstal Emulator Suite:
- Instal Firebase CLI.
Jika Anda belum menginstal Firebase CLI,
lakukan sekarang.
Anda memerlukan CLI versi 8.14.0 atau yang lebih baru untuk menggunakan Emulator Suite. Anda dapat
memeriksa versi CLI yang terinstal menggunakan perintah berikut:
firebase --version
- Jika Anda belum melakukannya, lakukan inisialisasi direktori kerja saat ini sebagai project Firebase, dengan mengikuti petunjuk di layar untuk menentukan produk yang akan digunakan:
firebase init
- Siapkan Emulator Suite. Perintah ini akan memulai wizard konfigurasi sehingga Anda dapat memilih emulator yang diminati, mendownload file biner yang sesuai dengan emulator tersebut, dan menetapkan port emulator jika port default tidak sesuai.
firebase init emulators
Setelah emulator diinstal, tidak akan ada pemeriksaan update dan download otomatis tambahan yang dilakukan sebelum Anda mengupdate versi Firebase CLI.
Mengonfigurasi Emulator Suite
Anda dapat secara opsional 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 melakukan pemrosesan melalui port defaultnya, dan emulator Cloud Firestore, Realtime Database, serta Cloud Storage for Firebase akan dijalankan dengan keamanan data terbuka.
Perintah | Deskripsi |
---|---|
init emulators | Memulai wizard inisialisasi emulator. Mengidentifikasi emulator yang akan diinstal dan secara opsional menentukan setelan port emulator. init emulators bersifat nondestruktif. Jika Anda menerima setelan default, konfigurasi emulator saat ini tetap akan dipertahankan. |
Konfigurasi port
Setiap emulator terikat ke port yang berbeda di mesin Anda dengan nilai default yang diinginkan.
Emulator | Port Default |
---|---|
Authentication | 9099 |
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 |
Konfigurasi Project ID
Bergantung pada cara Anda memanggil emulator, Anda dapat menjalankan beberapa instance emulator menggunakan project ID Firebase yang berbeda atau beberapa instance emulator untuk project ID tertentu. Dalam kasus seperti itu, instance emulator berjalan di lingkungan yang terpisah.
Umumnya, sebaiknya tetapkan satu project ID untuk semua pemanggilan emulator, sehingga Emulator Suite UI, emulator produk yang berbeda, dan semua instance emulator tertentu yang berjalan dapat berkomunikasi dengan benar dalam semua kasus.
Local Emulator Suite mengeluarkan peringatan saat mendeteksi beberapa project ID di
lingkungan, meskipun Anda dapat mengganti perilaku ini dengan menetapkan
kunci singleProjectMode
ke false
di firebase.json
Anda.
Anda dapat memeriksa pernyataan project ID untuk ketidakcocokan di:
- Project default di command line. Secara default, project ID akan diambil saat project dimulai dari project yang dipilih dengan
firebase init
ataufirebase use
. Untuk melihat daftar project (dan melihat project mana yang dipilih), gunakanfirebase projects:list
. - Pengujian unit aturan. Project ID sering ditentukan dalam panggilan ke metode library Pengujian Unit Aturan
initializeTestEnvironment
atauinitializeTestApp
. - Flag command line
--project
. Meneruskan flag--project
Firebase CLI akan menggantikan project default. Anda harus memastikan nilai flag sesuai dengan project ID dalam pengujian unit dan inisialisasi aplikasi.
Periksa juga konfigurasi project ID khusus platform yang telah Anda tetapkan saat mengonfigurasi project platform Apple, Android, dan web.
Konfigurasi Aturan Keamanan
Emulator akan mengambil konfigurasi Aturan Keamanan dari kunci konfigurasi database
, firestore
dan 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 didasarkan pada Java, yang dapat disesuaikan
dengan flag JVM melalui variabel lingkungan JAVA_TOOL_OPTIONS
.
Misalnya, jika mengalami error terkait ruang heap Java, Anda dapat meningkatkan ukuran heap Java maksimum menjadi 4 GB:
export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start
Beberapa flag dapat ditentukan dalam tanda petik yang dipisahkan dengan spasi, seperti
JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g"
. Flag ini hanya memengaruhi komponen emulator
berbasis Java dan tidak berpengaruh pada bagian lain dari
Firebase CLI, seperti Emulator Suite UI.
Memulai emulator
Anda dapat memulai emulator agar berjalan hingga dihentikan secara manual, atau agar berjalan sesuai durasi skrip pengujian yang ditentukan, lalu berhenti secara otomatis.
Perintah | Deskripsi | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
emulators:start | Memulai emulator untuk produk Firebase yang dikonfigurasi di firebase.json .
Proses emulator akan terus berjalan hingga dihentikan secara eksplisit. Memanggil emulators:start akan mendownload emulator ke ~/.cache/firebase/emulators/ jika emulator belum terinstal.
|
||||||||||||
emulators:exec scriptpath | Menjalankan skrip di scriptpath setelah memulai emulator untuk produk Firebase yang dikonfigurasi di firebase.json . Proses emulator akan otomatis berhenti saat skrip selesai berjalan.
|
Metode firebase emulators:exec
umumnya lebih sesuai untuk alur kerja continuous integration.
Mengekspor dan mengimpor data emulator
Anda dapat mengekspor data dari emulator Authentication, Cloud Firestore, Realtime Database, dan
Cloud Storage for Firebase untuk digunakan sebagai set data dasar pengukuran umum yang dapat
dibagikan. Set data ini dapat diimpor menggunakan flag --import
, seperti
yang dijelaskan di atas.
emulators:export export_directory |
Emulator Authentication, Cloud Firestore, Realtime Database, atau Cloud Storage for Firebase.
Mengekspor 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 berhenti menggunakan flag |
Melakukan integrasi dengan sistem CI Anda
Menjalankan image Emulator Suite dalam container
Penginstalan dan konfigurasi Emulator Suite dengan container dalam penyiapan CI biasa sangat mudah dilakukan.
Ada beberapa hal yang perlu diperhatikan:
File JAR diinstal dan di-cache di
~/.cache/firebase/emulators/
.- Anda dapat menambahkan jalur ini ke konfigurasi cache CI Anda untuk menghindari download berulang.
Jika tidak memiliki file
firebase.json
di repositori, Anda harus menambahkan argumen command line ke perintahemulators:start
atauemulators:exec
untuk menentukan emulator yang harus dimulai. Contoh,--only functions,firestore
.
Membuat token autentikasi (khusus emulator Hosting)
Jika alur kerja continuous integration Anda mengandalkan Firebase Hosting, Anda
harus login menggunakan token agar dapat menjalankan firebase emulators:exec
. Emulator
lain tidak memerlukan login.
Untuk membuat token, jalankan firebase login:ci
di lingkungan lokal Anda. Hal ini tidak boleh dilakukan dari sistem CI. Ikuti petunjuk untuk melakukan autentikasi. Anda hanya perlu melakukan langkah ini sekali per project, karena token akan bersifat valid di seluruh build. Token harus diperlakukan seperti sandi. Pastikan token dirahasiakan.
Jika lingkungan CI 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 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 dapat mengaksesnya. Untuk pendekatan hard code ini, Anda dapat menambahkan --token "YOUR_TOKEN_STRING_HERE"
ke perintah firebase emulators:exec
.
Menggunakan Emulator Hub REST API
Mencantumkan emulator yang sedang berjalan
Untuk mencantumkan emulator yang sedang berjalan, kirim permintaan GET
ke endpoint /emulators
Emulator Hub.
curl localhost:4400/emulators
Hasilnya akan berupa objek JSON yang mencantumkan semua emulator yang sedang berjalan dan konfigurasi host/port-nya, misalnya:
{
"hub":{
"name": "hub",
"host": "localhost",
"port": 4400
},
"functions": {
"name": "functions",
"host": "localhost",
"port": 5001
}
"firestore": {
"name": "firestore",
"host": "localhost",
"port": 8080
}
}
Mengaktifkan/Menonaktifkan Pemicu Fungsi Latar Belakang
Dalam beberapa situasi, Anda perlu menonaktifkan fungsi lokal dan pemicu ekstensi
untuk sementara. Misalnya, Anda mungkin ingin menghapus semua data di
emulator Cloud Firestore tanpa memicu fungsi onDelete
apa pun yang
sedang berjalan di emulator Cloud Functions atau Extensions.
Untuk menonaktifkan pemicu fungsi lokal untuk sementara, kirim permintaan PUT
ke
endpoint /functions/disableBackgroundTriggers
Emulator Hub.
curl -X PUT localhost:4400/functions/disableBackgroundTriggers
Hasilnya akan berupa objek JSON yang memerinci status saat ini.
{
"enabled": false
}
Untuk mengaktifkan pemicu fungsi lokal setelah dinonaktifkan, kirim permintaan PUT
ke endpoint /functions/enableBackgroundTriggers
Emulator Hub.
curl -X PUT localhost:4400/functions/enableBackgroundTriggers
Hasilnya akan berupa objek JSON yang memerinci status saat ini.
{
"enabled": true
}
Integrasi Emulator SDK
Tabel di bagian ini menunjukkan emulator yang didukung oleh SDK klien dan Admin SDK. Future berarti dukungan emulator sudah direncanakan tetapi belum tersedia.
Ketersediaan SDK klien
Android | Platform Apple | Web |
UI Firebase Android |
UI Firebase iOS |
UI Firebase Web |
|
---|---|---|---|---|---|---|
Realtime Database | 19.4.0 | 7.2.0 | 8.0.0 | 6.4.0 | Future | T/A |
Cloud Firestore | 21.6.0 | 7.2.0 | 8.0.0 | 6.4.0 | Future | T/A |
Authentication | 20.0.0 | 7.0.0 | 8.0.0 | 7.0.0 | Future | 4.7.2 |
Cloud Storage for Firebase | 20.0.0 | 8.0.0 | 8.4.0 | 7.0.0 | 11.0.0 | T/A |
Cloud Functions | 19.1.0 | 7.2.0 | 8.0.0 | T/A | T/A | T/A |
Hosting | T/A | T/A | T/A | T/A | T/A | T/A |
Extensions | T/A | T/A | T/A | T/A | T/A | T/A |
Ketersediaan Admin SDK
Node | Java | Python | Go | |
---|---|---|---|---|
Realtime Database | 8.6.0 | 6.10.0 | 2.18.0 | Future |
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 | Future | Future | Future |
Cloud Functions | T/A | T/A | T/A | T/A |
Hosting | T/A | T/A | T/A | T/A |
Extensions | T/A | T/A | T/A | T/A |