Local Emulator Suite'i yükleyin, yapılandırın ve entegre edin

Firebase Local Emulator Suite, tek seferlik prototip oluşturma oturumlarından üretim ölçeğinde sürekli entegrasyon iş akışlarına kadar farklı prototip ve test ortamları için kurulabilir ve yapılandırılabilir.

Yerel Emulator Suite'i yükleyin

Emulator Suite'i kurmadan önce ihtiyacınız olacak:

  • Node.js sürüm 16.0 veya üzeri.
  • Java JDK sürüm 11 veya üzeri.

Emulator Suite'i yüklemek için:

  1. Firebase CLI'yi yükleyin. Firebase CLI'yi henüz yüklemediyseniz şimdi yükleyin . Emulator Suite'i kullanmak için CLI 8.14.0 veya daha yüksek bir sürüme ihtiyacınız olacak. Aşağıdaki komutu kullanarak hangi sürümü yüklediğinizi kontrol edebilirsiniz:
    firebase --version
  2. Henüz yapmadıysanız, hangi ürünlerin kullanılacağını belirtmek için ekrandaki talimatları izleyerek geçerli çalışma dizinini bir Firebase projesi olarak başlatın:
    firebase init
  3. Emulator Suite'i kurun. Bu komut, ilgilendiğiniz öykünücüleri seçmenize, karşılık gelen öykünücü ikili dosyalarını indirmenize ve varsayılanlar uygun değilse öykünücü bağlantı noktalarını ayarlamanıza olanak tanıyan bir yapılandırma sihirbazını başlatır.
    firebase init emulators

Bir emülatör yüklendikten sonra, Firebase CLI sürümünüzü güncelleyene kadar hiçbir güncelleme kontrolü yapılmaz ve hiçbir ek otomatik indirme gerçekleşmez.

Emulator Suite'i Yapılandır

firebase.json dosyasında isteğe bağlı olarak öykünücülerin ağ bağlantı noktalarını ve Güvenlik Kuralları tanımlarının yolunu yapılandırabilirsiniz:

  • firebase init emulators çalıştırarak veya firebase.json manuel olarak düzenleyerek öykünücü bağlantı noktalarını değiştirin.
  • firebase.json manuel olarak düzenleyerek Güvenlik Kuralları tanımlarının yolunu değiştirin.

Bu ayarları yapılandırmazsanız emülatörler varsayılan bağlantı noktalarını dinleyecek ve Cloud Firestore, Realtime Database ve Cloud Storage for Firebase emülatörleri açık veri güvenliğiyle çalışacaktır.

Emretmek Tanım
başlatma emülatörleri Bir öykünücü başlatma sihirbazını başlatın. Yüklenecek emülatörleri tanımlayın ve isteğe bağlı olarak emülatör bağlantı noktası ayarlarını belirtin. init emulators tahribatsızdır; varsayılanların kabul edilmesi mevcut öykünücü yapılandırmasını koruyacaktır.

Bağlantı noktası yapılandırması

Her emülatör, tercih edilen varsayılan değerle makinenizdeki farklı bir bağlantı noktasına bağlanır.

Emülatör Varsayılan Bağlantı Noktası
Kimlik doğrulama 9099
Emülatör Paketi Kullanıcı Arayüzü 4000
Bulut İşlevleri 5001
Eventarc 9299
Gerçek Zamanlı Veritabanı 9000
Bulut Firestore 8080
Firebase için Bulut Depolama 9199
Firebase Barındırma 5000
Pub/Sub 8085

Proje kimliği yapılandırması

Öykünücüleri nasıl çağırdığınıza bağlı olarak, farklı Firebase proje kimlikleri kullanarak bir öykünücünün birden çok örneğini veya belirli bir proje kimliği için birden çok öykünücü örneğini çalıştırabilirsiniz. Bu gibi durumlarda emülatör örnekleri ayrı bir ortamda çalışmaktadır.

Emulator Suite kullanıcı arayüzünün, farklı ürün emülatörlerinin ve belirli bir emülatörün çalışan tüm örneklerinin her durumda doğru şekilde iletişim kurabilmesi için tüm emülatör çağrıları için tek bir proje kimliği ayarlamak genellikle iyi bir uygulamadır.

Local Emulator Suite, ortamda birden fazla proje kimliği algıladığında uyarı verir; ancak firebase.json dosyanızda singleProjectMode anahtarını false olarak ayarlayarak bu davranışı geçersiz kılabilirsiniz.

Uyuşmazlık olup olmadığını görmek için proje kimliği beyanlarını kontrol edebilirsiniz:

  • Komut satırındaki varsayılan proje. Varsayılan olarak proje kimliği, başlangıçta firebase init veya firebase use ile seçilen projeden alınacaktır. Projelerin listesini görüntülemek (ve hangisinin seçildiğini görmek) için firebase projects:list kullanın.
  • Kural birimi testleri. Proje kimliği genellikle Kural Birimi Testi kitaplığı yöntemleri initializeTestEnvironment veya initializeTestApp yapılan çağrılarda belirtilir.
  • Komut satırı --project bayrağı. Firebase CLI --project bayrağının iletilmesi, varsayılan projeyi geçersiz kılar. Birim testlerinde ve uygulama başlatmada bayrak değerinin proje kimliğiyle eşleştiğinden emin olmanız gerekir.

Ayrıca Apple platformlarınızı , Android'inizi ve web projelerinizi yapılandırırken belirlediğiniz platforma özel proje kimliği yapılandırmalarını da kontrol edin.

Güvenlik Kuralları yapılandırması

Emülatörler Güvenlik Kuralları yapılandırmasını firebase.json database , firestore ve storage yapılandırma anahtarlarından alacaktır.

{
  // 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"
    }
  }
}

Java seçeneklerini belirtme

Gerçek Zamanlı Veritabanı emülatörü, Cloud Firestore emülatörü ve Cloud Storage for Firebase emülatörünün bir kısmı, JAVA_TOOL_OPTIONS ortam değişkeni aracılığıyla JVM bayraklarıyla özelleştirilebilen Java'yı temel alır.

Örneğin, Java yığın alanıyla ilgili hatalarla karşılaşırsanız maksimum Java yığın boyutunu 4 GB'a artırabilirsiniz:

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g" gibi boşluklarla ayrılmış tırnak işaretleri içinde birden fazla bayrak belirtilebilir. Bayraklar yalnızca öykünücülerin Java tabanlı bileşenlerini etkiler ve Emulator Suite Kullanıcı Arayüzü gibi Firebase CLI'nin diğer bölümleri üzerinde hiçbir etkisi yoktur.

Emülatörleri başlatın

Emülatörleri manuel olarak sonlandırılana kadar çalışacak şekilde başlatabilir veya belirlenmiş bir test komut dosyası süresince çalıştırıp ardından otomatik olarak kapatabilirsiniz.

Emretmek Tanım
öykünücüler:başlat firebase.json dosyasında yapılandırılan Firebase ürünleri için emülatörleri başlatın. Emülatör işlemleri açıkça durdurulana kadar çalışmaya devam edecektir. emulators:start çağrıldığında emülatörler önceden kurulu değilse ~/.cache/firebase/emulators/ dizinine indirilir.
Bayrak Tanım
--only İsteğe bağlı. Hangi emülatörlerin başlayacağını sınırlayın. 'auth', 'database', 'firestore', 'functions', 'hosting' veya 'pubsub'dan bir veya daha fazlasını belirterek emülatör adlarının virgülle ayrılmış bir listesini sağlayın.
--inspect-functions debug_port İsteğe bağlı. Belirtilen bağlantı noktasındaki (veya bağımsız değişken atlanırsa varsayılan bağlantı noktası 9229) işlevlerde kesme noktası hata ayıklamasını etkinleştirmek için Cloud Functions emülatörüyle birlikte kullanın. Bu işaret sağlandığında Bulut İşlevleri öykünücüsünün, işlevlerin tek bir işlemde sıralı (FIFO) sırayla yürütüldüğü özel bir serileştirilmiş yürütme moduna geçtiğini unutmayın; bu, işlev hata ayıklamasını basitleştirir; ancak davranış, buluttaki işlevlerin çok işlemli, paralel yürütülmesinden farklıdır.
--export-on-exit= İsteğe bağlı. Kimlik Doğrulama, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörüyle kullanın. Emulators: emulators:export verileri bir dizine aktarmalarını söyleyin. Dışa aktarma dizini şu bayrakla belirtilebilir: firebase emulators:start --export-on-exit=./saved-data . --import kullanılırsa, dışa aktarma yolu varsayılan olarak aynıdır; örneğin: firebase emulators:start --import=./data-path --export-on-exit . Son olarak, istenirse, --import ve --export-on-exit bayraklarına farklı dizin yolları iletin.
--import= import_directory İsteğe bağlı. Kimlik Doğrulama, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörüyle kullanın. --export-on-exit başlangıç ​​seçeneği veya emulators:export komutu kullanılarak kaydedilen verileri çalışan bir Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatör örneğine aktarın. Halihazırda emülatör hafızasında bulunan herhangi bir verinin üzerine yazılacaktır.
öykünücüler:exec scriptpath firebase.json dosyasında yapılandırılan Firebase ürünleri için emülatörleri başlattıktan sonra betiği scriptpath konumunda çalıştırın. Betiğin çalışması bittiğinde emülatör işlemleri otomatik olarak duracaktır.
Bayrak Tanım
--only İsteğe bağlı. Hangi emülatörlerin başlayacağını sınırlayın. 'Firestore', 'veritabanı', 'işlevler', 'barındırma' veya 'pubsub'dan bir veya daha fazlasını belirterek emülatör adlarının virgülle ayrılmış bir listesini sağlayın.
--inspect-functions debug_port İsteğe bağlı. Belirtilen bağlantı noktasındaki (veya bağımsız değişken atlanırsa varsayılan bağlantı noktası 9229) işlevlerde kesme noktası hata ayıklamasını etkinleştirmek için Cloud Functions emülatörüyle birlikte kullanın. Bu işaret sağlandığında Bulut İşlevleri öykünücüsünün, işlevlerin tek bir işlemde sıralı (FIFO) sırayla yürütüldüğü özel bir serileştirilmiş yürütme moduna geçtiğini unutmayın; bu, işlev hata ayıklamasını basitleştirir; ancak davranış, buluttaki işlevlerin çok işlemli, paralel yürütülmesinden farklıdır.
--export-on-exit= İsteğe bağlı. Kimlik Doğrulama, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörüyle kullanın. Emulators: emulators:export verileri bir dizine aktarmalarını söyleyin. Dışa aktarma dizini şu bayrakla belirtilebilir: firebase emulators:start --export-on-exit=./saved-data . --import kullanılırsa, dışa aktarma yolu varsayılan olarak aynıdır; örneğin: firebase emulators:start --import=./data-path --export-on-exit . Son olarak, istenirse, --import ve --export-on-exit bayraklarına farklı dizin yolları iletin.
--import= import_directory İsteğe bağlı. Kimlik Doğrulama, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörüyle kullanın. --export-on-exit başlangıç ​​seçeneği veya emulators:export komutu kullanılarak kaydedilen verileri çalışan bir Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatör örneğine aktarın. Halihazırda emülatör belleğinde bulunan tüm verilerin üzerine yazılacaktır.
--ui İsteğe bağlı. Yürütme sırasında Emulator kullanıcı arayüzünü çalıştırın.

firebase emulators:exec yöntemi genellikle sürekli entegrasyon iş akışları için daha uygundur.

Emülatör verilerini dışa ve içe aktarın

Paylaşılabilir, ortak bir temel veri kümesi olarak kullanmak üzere Authentication, Cloud Firestore, Realtime Database ve Cloud Storage for Firebase emülatörlerinden verileri dışa aktarabilirsiniz. Bu veri kümeleri yukarıda açıklandığı gibi --import bayrağı kullanılarak içe aktarılabilir.

öykünücüler:dışa aktarma dışa export_directory

Kimlik Doğrulama, Cloud Firestore, Gerçek Zamanlı Veritabanı veya Firebase emülatörü için Cloud Storage . Çalışan bir Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatör örneğinden verileri dışa aktarın. Belirtilen export_directory henüz mevcut değilse oluşturulacaktır. Belirtilen dizin mevcutsa, önceki dışa aktarma verilerinin üzerine yazılması gerektiğini onaylamanız istenecektir. --force bayrağını kullanarak bu istemi atlayabilirsiniz. Dışa aktarma dizini firebase-export-metadata.json bir veri bildirim dosyası içerir.

Yukarıda açıklanan --export-on-exit bayraklarını kullanarak emülatörlere, kapandıklarında verileri otomatik olarak dışarı aktarmaları talimatını verebilirsiniz.

CI sisteminizle entegrasyon

Container mimarisine alınmış Emulator Suite görüntülerini çalıştırma

Tipik bir CI kurulumunda Emulator Suite'in kapsayıcılarla kurulumu ve yapılandırılması basittir.

Dikkat edilmesi gereken birkaç sorun var:

  • JAR dosyaları ~/.cache/firebase/emulators/ konumunda yüklenir ve önbelleğe alınır.

    • Tekrarlanan indirmelerden kaçınmak için bu yolu CI önbellek yapılandırmanıza eklemek isteyebilirsiniz.
  • Deponuzda bir firebase.json dosyası yoksa, hangi emülatörlerin başlatılması gerektiğini belirtmek için emulators:start veya emulators:exec komutuna bir komut satırı argümanı eklemelisiniz. Örneğin,
    --only functions,firestore .

Kimlik doğrulama belirteci oluşturun (Yalnızca Hosting öykünücüsü)

Sürekli entegrasyon iş akışlarınız Firebase Hosting'e dayanıyorsa firebase emulators:exec çalıştırmak için bir belirteç kullanarak oturum açmanız gerekecektir. Diğer emülatörler oturum açmayı gerektirmez.

Bir belirteç oluşturmak için yerel ortamınızda firebase login:ci çalıştırın; bu bir CI sisteminden yapılmamalıdır. Kimlik doğrulamak için talimatları izleyin. Belirteç tüm derlemelerde geçerli olacağından bu adımı proje başına yalnızca bir kez uygulamanız gerekir. Belirteç bir parola gibi ele alınmalıdır; gizli tutulduğundan emin olun.

CI ortamınız, derleme komut dosyalarında kullanılabilecek ortam değişkenlerini belirtmenize izin veriyorsa, FIREBASE_TOKEN adlı bir ortam değişkeni oluşturmanız yeterlidir; değer, erişim belirteci dizesidir. Firebase CLI, FIREBASE_TOKEN ortam değişkenini otomatik olarak alacak ve emülatörler düzgün şekilde başlayacaktır.

Son çare olarak, belirteci derleme betiğinize dahil edebilirsiniz ancak güvenilmeyen tarafların erişime sahip olmadığından emin olun. Bu sabit kodlu yaklaşım için firebase emulators:exec komutuna --token "YOUR_TOKEN_STRING_HERE" ekleyebilirsiniz.

Emulator Hub REST API'sini kullanın

Çalışan emülatörleri listele

Şu anda çalışan öykünücüleri listelemek için Emulator Hub'ın /emulators uç noktasına bir GET isteği gönderin.

curl localhost:4400/emulators

Sonuç, çalışan tüm öykünücüleri ve bunların ana bilgisayar/bağlantı noktası yapılandırmasını listeleyen bir JSON nesnesi olacaktır; örneğin:

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

Arka Plan İşlev Tetikleyicilerini Etkinleştirme / Devre Dışı Bırakma

Bazı durumlarda yerel işlevi ve uzantı tetikleyicilerini geçici olarak devre dışı bırakmanız gerekebilir. Örneğin, Cloud Functions veya Extensions öykünücülerinde çalışan herhangi bir onDelete işlevini tetiklemeden, Cloud Firestore öykünücüsündeki tüm verileri silmek isteyebilirsiniz.

Yerel işlev tetikleyicilerini geçici olarak devre dışı bırakmak için Emulator Hub'ın /functions/disableBackgroundTriggers uç noktasına bir PUT isteği gönderin.

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

Sonuç, mevcut durumu detaylandıran bir JSON nesnesi olacaktır.

{
  "enabled": false
}

Yerel işlev tetikleyicilerini devre dışı bırakıldıktan sonra etkinleştirmek için Emulator Hub'ın /functions/enableBackgroundTriggers uç noktasına bir PUT isteği gönderin.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

Sonuç, mevcut durumu detaylandıran bir JSON nesnesi olacaktır.

{
  "enabled": true
}

Emülatör SDK entegrasyonları

Bu bölümdeki tablolar, istemci ve Yönetici SDK'ları tarafından hangi öykünücülerin desteklendiğini gösterir. Gelecek, emülatör desteğinin planlandığı ancak henüz mevcut olmadığı anlamına gelir.

İstemci SDK'sının kullanılabilirliği

Android Apple platformları Firebase kullanıcı arayüzü
Android
Firebase kullanıcı arayüzü
iOS
Firebase kullanıcı arayüzü
Gerçek Zamanlı Veritabanı 19.4.0 7.2.0 8.0.0 6.4.0 Gelecek Yok
Bulut Firestore 21.6.0 7.2.0 8.0.0 6.4.0 Gelecek Yok
Kimlik doğrulama 20.0.0 7.0.0 8.0.0 7.0.0 Gelecek 4.7.2
Firebase için Bulut Depolama 20.0.0 8.0.0 8.4.0 7.0.0 11.0.0 Yok
Bulut İşlevleri 19.1.0 7.2.0 8.0.0 Yok Yok Yok
Barındırma Yok Yok Yok Yok Yok Yok
Uzantılar Yok Yok Yok Yok Yok Yok

Yönetici SDK'sının kullanılabilirliği

Düğüm Java Python Gitmek
Gerçek Zamanlı Veritabanı 8.6.0 6.10.0 2.18.0 Gelecek
Bulut Firestore 8.0.0 6.10.0 3.0.0 1.0.0
Kimlik doğrulama 9.3.0 7.2.0 5.0.0 4.2.0
Firebase için Bulut Depolama 9.8.0 Gelecek Gelecek Gelecek
Bulut İşlevleri Yok Yok Yok Yok
Barındırma Yok Yok Yok Yok
Uzantılar Yok Yok Yok Yok