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

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

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 integrasi berkelanjutan skala produksi.

Instal Suite Emulator Lokal

Sebelum menginstal Emulator Suite, Anda perlu:

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

Untuk menginstal Emulator Suite:

  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 Emulator Suite. Perintah ini memulai wizard konfigurasi yang memungkinkan Anda memilih emulator yang diinginkan, mengunduh 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 akan terjadi hingga Anda memperbarui versi Firebase CLI.

Konfigurasikan Emulator Suite

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 mendengarkan pada 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 pengaturan port emulator. init emulators tidak merusak; menerima default akan mempertahankan konfigurasi emulator saat ini.

Konfigurasi port

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

Emulator Pelabuhan Bawaan
Autentikasi 9099
Antarmuka Emulator Suite 4000
Fungsi Cloud 5001
Acara 9299
Basis Data Waktu Nyata 9000
Cloud Firestore 8080
Penyimpanan Cloud 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 seperti itu, instance emulator berjalan di lingkungan yang terpisah.

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

Local Emulator Suite mengeluarkan peringatan saat mendeteksi beberapa ID proyek 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 proyek sering ditentukan dalam panggilan ke metode pustaka Pengujian Unit Aturan initializeTestEnvironment atau initializeTestApp .
  • Baris perintah --project flag. Meneruskan flag Firebase CLI --project menimpa proyek default. Anda harus memastikan nilai tanda cocok dengan ID proyek dalam pengujian unit dan inisialisasi aplikasi.

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

Konfigurasi Aturan Keamanan

Emulator akan mengambil konfigurasi Aturan Keamanan 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 Cloud Storage for Firebase emulator didasarkan pada 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 heap Java maksimum 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 memengaruhi bagian lain dari Firebase CLI, seperti UI Emulator Suite.

Memulai emulator

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

Memerintah Keterangan
emulator: mulai Mulai emulator untuk produk Firebase yang dikonfigurasi di firebase.json . Proses emulator akan terus berjalan hingga dihentikan secara eksplisit. Memanggil emulators:start akan mengunduh emulator ke ~/.cache/firebase/emulators/ jika belum diinstal.
Bendera deskripsi
--only Opsional. Batasi emulator mana yang dimulai. Berikan daftar nama emulator yang dipisahkan koma, yang menetapkan satu atau beberapa 'auth', 'database', 'firestore', 'functions', 'hosting', atau 'pubsub'.
--inspect-functions debug_port Opsional. Gunakan dengan emulator Cloud Functions untuk mengaktifkan debugging breakpoint fungsi pada port yang ditentukan (atau port default 9229 jika argumen dihilangkan). Perhatikan bahwa ketika tanda ini diberikan, emulator Cloud Functions beralih ke mode eksekusi serial khusus di mana fungsi dijalankan dalam satu proses, dalam urutan (FIFO); ini menyederhanakan fungsi debugging, meskipun perilakunya berbeda dari multi-proses, eksekusi paralel fungsi di cloud.
--export-on-exit= Opsional. Gunakan dengan emulator Authentication, Cloud Firestore, Realtime Database, atau Cloud Storage for Firebase. Instruksikan emulator untuk mengekspor data ke direktori saat shutdown terjadi, seperti yang dijelaskan untuk perintah emulators:export . Direktori ekspor dapat ditentukan dengan tanda ini: firebase emulators:start --export-on-exit=./saved-data . Jika --import digunakan, default jalur ekspor sama; misalnya: firebase emulators:start --import=./data-path --export-on-exit . Terakhir, jika diinginkan, berikan jalur direktori yang berbeda ke --import dan --export-on-exit .
--import= import_directory Opsional. Gunakan dengan emulator Authentication, Cloud Firestore, Realtime Database, atau Cloud Storage for Firebase. Impor data yang disimpan menggunakan opsi --export-on-exit startup atau perintah 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:exec scriptpath Jalankan skrip di scriptpath setelah memulai emulator untuk produk Firebase yang dikonfigurasi di firebase.json . Proses emulator akan otomatis berhenti ketika script telah selesai dijalankan.
Bendera deskripsi
--only Opsional. Batasi emulator mana yang dimulai. Berikan daftar nama emulator yang dipisahkan koma, yang menetapkan satu atau beberapa 'firestore', 'database', 'functions', 'hosting', atau 'pubsub'.
--inspect-functions debug_port Opsional. Gunakan dengan emulator Cloud Functions untuk mengaktifkan debugging breakpoint fungsi pada port yang ditentukan (atau port default 9229 jika argumen dihilangkan). Perhatikan bahwa ketika tanda ini diberikan, emulator Cloud Functions beralih ke mode eksekusi serial khusus di mana fungsi dijalankan dalam satu proses, dalam urutan (FIFO); ini menyederhanakan fungsi debugging, meskipun perilakunya berbeda dari multi-proses, eksekusi paralel fungsi di cloud.
--export-on-exit= Opsional. Gunakan dengan emulator Authentication, Cloud Firestore, Realtime Database, atau Cloud Storage for Firebase. Instruksikan emulator untuk mengekspor data ke direktori saat shutdown terjadi, seperti yang dijelaskan untuk perintah emulators:export . Direktori ekspor dapat ditentukan dengan tanda ini: firebase emulators:start --export-on-exit=./saved-data . Jika --import digunakan, default jalur ekspor sama; misalnya: firebase emulators:start --import=./data-path --export-on-exit . Terakhir, jika diinginkan, berikan jalur direktori yang berbeda ke --import dan --export-on-exit .
--import= import_directory Opsional. Gunakan dengan emulator Authentication, Cloud Firestore, Realtime Database, atau Cloud Storage for Firebase. Impor data yang disimpan menggunakan opsi --export-on-exit startup atau perintah 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.

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

Ekspor dan impor data emulator

Anda dapat mengekspor data dari emulator Authentication, Cloud Firestore, Realtime Database, dan Cloud Storage for Firebase untuk digunakan sebagai kumpulan data dasar umum yang dapat dibagikan. Kumpulan data ini dapat diimpor menggunakan tanda --import , seperti yang 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 perintah 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 gambar Emulator Suite dalam container

Instalasi dan konfigurasi Emulator Suite dengan container dalam pengaturan 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 Anda 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 dimulai. Sebagai contoh,
    --only functions,firestore .

Buat token autentikasi (Hanya emulator hosting)

Jika alur kerja integrasi berkelanjutan Anda mengandalkan Firebase Hosting , maka 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 petunjuk untuk mengautentikasi. Anda hanya perlu melakukan langkah ini sekali per proyek, karena token akan valid di seluruh build. Token harus diperlakukan seperti kata sandi; pastikan itu dirahasiakan.

Jika lingkungan CI memungkinkan Anda menentukan variabel lingkungan yang dapat digunakan dalam skrip build, cukup buat variabel lingkungan bernama FIREBASE_TOKEN , dengan nilai sebagai 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 Anda, tetapi pastikan bahwa pihak yang tidak dipercaya tidak memiliki akses. Untuk pendekatan hard-code ini, Anda dapat menambahkan --token "YOUR_TOKEN_STRING_HERE" ke perintah firebase emulators:exec .

Gunakan API REST Hub Emulator

Daftar menjalankan emulator

Untuk membuat daftar emulator yang sedang berjalan, kirim permintaan GET ke /emulators endpoint dari Emulator Hub.

curl localhost:4400/emulators

Hasilnya akan menjadi 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 sementara pemicu fungsi lokal, kirim permintaan PUT ke titik akhir /functions/disableBackgroundTriggers dari Emulator Hub.

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

Hasilnya akan menjadi objek JSON yang merinci status saat ini.

{
  "enabled": false
}

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

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

Hasilnya akan menjadi objek JSON yang merinci status saat ini.

{
  "enabled": true
}

Integrasi SDK emulator

Tabel di bagian ini menunjukkan emulator mana yang didukung oleh klien dan Admin SDK. 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
Cloud Firestore 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 Cloud untuk Firebase 20.0.0 8.0.0 8.4.0 7.0.0 11.0.0 T/A
Fungsi Cloud 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
Ekstensi T/A T/A T/A T/A T/A T/A

Ketersediaan Admin SDK

simpul Jawa Python Pergi
Basis Data Waktu Nyata 8.6.0 6.10.0 2.18.0 Masa depan
Cloud Firestore 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 Cloud untuk Firebase 9.8.0 Masa depan Masa depan Masa depan
Fungsi Cloud T/A T/A T/A T/A
Hosting T/A T/A T/A T/A
Ekstensi T/A T/A T/A T/A