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

Firebase Local Emulator Suite farklı cihazlar için yüklenip yapılandırılabilir ve test ortamları için özel çözümler oluşturabilirsiniz. Tek seferlik prototip oluşturma oturumlarından üretim ölçeğinde sürekli entegrasyon iş akışları.

Local Emulator Suite'i yükleyin

Emulator Suite'i yüklemeden önce şunlara ihtiyacınız vardır:

  • Node.js 16.0 veya sonraki bir sürümü.
  • Java JDK sürüm 11 veya sonraki sürümler.

Emulator Suite'i yüklemek için:

  1. Firebase CLI'yı yükleyin. Firebase CLI'ı henüz yüklemediyseniz hemen yükleyin. Emulator Suite'i kullanmak için CLI'ın 8.14.0 veya üzeri bir sürümüne sahip olmanız gerekir. Şunları yapabilirsiniz: aşağıdaki komutu kullanarak hangi sürümü yüklediğinizi kontrol edin:
    firebase --version
  2. Henüz yapmadıysanız mevcut çalışma dizinini başlatın. bir Firebase projesi olarak kullanıyorsanız, kullanılacak ürünler:
    firebase init
  3. Emulator Suite'i kurun. Bu komut, aşağıdaki işlemleri yapmanızı sağlayacak bir yapılandırma sihirbazını başlatır: istediğiniz emülatörleri seçmenize, ilgili emülatörü indirmenize ikili program dosyalarını ve varsayılanlar uygun değilse emülatör bağlantı noktalarını ayarlayın.
    firebase init emulators

Bir emülatör yüklendiğinde hiçbir güncelleme kontrolü gerçekleştirilmez ve Firebase CLI sürümünüz güncellenene kadar otomatik indirmeler gerçekleşir.

Emulator Suite'i yapılandırın

İsteğe bağlı olarak emülatörleri yapılandırabilirsiniz. ağ bağlantı noktaları ve Güvenlik'e giden yol firebase.json dosyasındaki kural tanımları:

  • firebase init emulators komutunu çalıştırarak veya düzenleyerek emülatör bağlantı noktalarını değiştirin Manuel olarak firebase.json.
  • firebase.json öğesini düzenleyerek Güvenlik Kuralları tanımlarının yolunu değiştirin manuel olarak ekleyin.

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

Komut Açıklama
init emülatörleri Bir emülatör başlatma sihirbazı başlatın. Yüklenecek emülatörleri belirleyin ve isteğe bağlı olarak emülatör bağlantı noktası ayarlarını belirtin. init emulators, hasarsızdır; varsayılanların kabul edilmesi, geçerli emülatör yapılandırmasını korur.

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

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

Emülatör Varsayılan Bağlantı Noktası
Authentication 9099
Emulator Suite UI 4.000
Cloud Functions 5001
Eventarc 9299
Realtime Database 9000
Cloud Firestore 8080
Cloud Storage for Firebase 9199
Firebase Hosting 5000
Pub/Sub 8085

Proje kimliği yapılandırması

Emülatörleri çağırma şeklinize bağlı olarak, aynı öğenin birden fazla örneğini çalıştırabilirsiniz. Farklı Firebase proje kimlikleri veya birden fazla emülatör örneği kullanan bir emülatör açıklama ekleyin. Böyle durumlarda emülatör örnekleri ayrı bir ortamda kullanabilirsiniz.

Tüm emülatör için tek bir proje kimliği ayarlamak genellikle gibi Emulator Suite UI, farklı ürün emülatörleri ve belirli bir emülatörün çalıştırıldığı tüm ortamlarda doğru durumlarda işe yarar.

Local Emulator Suite, şurada birden fazla proje kimliği algıladığında uyarı verir: ortamına uygun değil, ancak firebase.json cihazınızda false için singleProjectMode anahtarı.

Proje kimliği beyanlarında uyuşmazlık olup olmadığını kontrol edebilirsiniz:

  • Komut satırındaki varsayılan proje. Proje kimliği varsayılan olarak başlangıçta firebase init ile seçilen projeden alınır veya firebase use. 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 Kurallara yapılan çağrılarda belirtilir Birim Testi kitaplık yöntemleri initializeTestEnvironment veya initializeTestApp.
  • Komut satırı --project işareti. Firebase KSA'yı geçme --project işareti, varsayılan projeyi geçersiz kılar. Değerin öğenin kimliği, birim testlerindeki ve uygulama başlatmadaki proje kimliğiyle eşleşir.

Seçtiğiniz platforma özel proje kimliği yapılandırmalarını da kontrol edin Apple platformlarınızı yapılandırdıktan sonra, Android ve web projeleri.

Güvenlik Kuralları yapılandırması

Emülatörler, Güvenlik Kuralları yapılandırmasını database içinden alır. firebase.json içindeki firestore ve storage yapılandırma anahtarları.

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

Realtime Database emülatörü, Cloud Firestore emülatörü ve Cloud Storage for Firebase emülatörü, özelleştirilebilen Java'ya dayanır JVM işaretleriyle birlikte JAVA_TOOL_OPTIONS ortam değişkeni üzerinden gönderilir.

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

export JAVA_TOOL_OPTIONS="-Xmx4g"
firebase emulators:start

Birden fazla bayrak, boşlukla ayrılmış şekilde tırnak işaretleri içinde belirtilebilir. Örneğin: JAVA_TOOL_OPTIONS="-Xms2g -Xmx4g" İşaretler yalnızca Java tabanlı bileşenleri üzerinde herhangi bir etkisi yoktur ve Firebase KSA, örneğin Emulator Suite UI.

Başlatma emülatörleri

Emülatörleri manuel olarak sonlandırılana kadar ya da belirtilen bir test komut dosyasının süresi ve ardından otomatik olarak kapatılır.

Komut Açıklama
emülators:start firebase.json bölgesinde 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 eder. Telefon etme emulators:start, emülatörleri ~/.cache/firebase/emulators/ konumuna indirir. yüklü değiller.
İşaret Açıklama
--only İsteğe bağlıdır. Sınır hangi emülatörlerin başlatıldığı. Emülatör adlarının virgülle ayrılmış bir listesini, daha fazla "auth", "database", "firestore", "functions", "hosting" veya "pubsub" değerleridir.
--inspect-functions debug_port İsteğe bağlıdır. Şununla kullanın: Belirtilen zamanda işlevlerde kesme noktası hata ayıklamasını etkinleştirmek için Cloud Functions emülatörü bağlantı noktası (veya bağımsız değişken atlanmışsa varsayılan bağlantı noktası 9229). Bu işaret sağlandığında Cloud Functions emülatörü işlevlerin tek bir işlem içinde yürütüldüğü özel serileştirilmiş yürütme sıralı (FIFO) sıralama; bu, işlev hata ayıklamasını basitleştirse de buluttaki işlevlerin çoklu işlem ve paralel yürütülmesinden farklıdır.
--export-on-exit= İsteğe bağlıdır. Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörü. Emülatörlere, verileri bir emulators:export bölümünde açıklandığı gibi, kapanma sırasında dizin komutuna dokunun. Dışa aktarma dizini şu işaretle belirtilebilir: firebase emulators:start --export-on-exit=./saved-data --import kullanılırsa dışa aktarma yolu varsayılan olarak aynı olur; örneğin: firebase emulators:start --import=./data-path --export-on-exit. Son olarak, isterseniz --import ve diğer dizin yolları için farklı --export-on-exit işaret.
--import=import_directory İsteğe bağlıdır. Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörü. --export-on-exit başlangıç seçeneği veya emulators:export komutunu çalıştıran Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatör örneği. Şu anda emülatör belleğindeki tüm veriler her zaman zekice hazırlanmış olur.
emulators:exec scriptpath Firebase ürünleri için emülatörleri başlattıktan sonra scriptpath konumunda komut dosyasını çalıştırın. firebase.json içinde yapılandırıldı. komut dosyasının çalışması tamamlandı.
İşaret Açıklama
--only İsteğe bağlıdır. Sınır hangi emülatörlerin başlatıldığı. Emülatör adlarının virgülle ayrılmış bir listesini, "firestore", "database", "İşlevler", "barındırma" veya "pubsub" ifadelerini ifade eder.
--inspect-functions debug_port İsteğe bağlıdır. Şununla kullanın: İşlevlerin kesme noktası hata ayıklamasını etkinleştiren Cloud Functions emülatörü belirtilen bağlantı noktası (veya bağımsız değişken atlanmışsa varsayılan bağlantı noktası 9229). Bu işareti sağlandığında Cloud Functions emülatörü, özel bir seri işlevlerin tek bir işlemde yürütüleceği yürütme modu sıralı (FIFO) sıralama; bu, işlev hata ayıklamasını basitleştirse de buluttaki işlevlerin çoklu işlem ve paralel yürütülmesinden farklıdır.
--export-on-exit= İsteğe bağlıdır. Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörü. Emülatörlere, verileri bir emulators:export bölümünde açıklandığı gibi, kapanma sırasında dizin komutuna dokunun. Dışa aktarma dizini şu işaretle belirtilebilir: firebase emulators:start --export-on-exit=./saved-data --import kullanılırsa dışa aktarma yolu varsayılan olarak aynı olur; örneğin: firebase emulators:start --import=./data-path --export-on-exit. Son olarak, isterseniz --import ve diğer dizin yolları için farklı --export-on-exit işaret.
--import=import_directory İsteğe bağlıdır. Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörü. --export-on-exit başlangıç seçeneği veya emulators:export komutunu çalıştıran Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatör örneği. Şu anda emülatör belleğindeki tüm veriler üzerine yazılır.
--ui İsteğe bağlıdır. 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ıyla başlayalım.

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

Authentication, Cloud Firestore, Realtime Database ve Paylaşılabilir, ortak temel veri olarak kullanılacak Cloud Storage for Firebase emülatörleri ayarlandı. Bu veri kümeleri, --import işareti kullanılarak içe aktarılabilir. 'ne başvurun.

emülatörler:dışa aktarma export_directory

Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörü. Verileri çalışan bir Cloud Firestore, Realtime Database veya Cloud Storage for Firebase sitesinden dışa aktarın emülatör örneğidir. Bu durumda, belirtilen export_directory oluşturulur zaten mevcut değil. Belirtilen dizin mevcutsa şunu doğrulamanız istenir: önceki dışa aktarma verilerinin üzerine yazılmalıdır. Şu seçeneği kullanarak bu istemi atlayabilirsiniz: --force işaretini kullanın. Dışa aktarma dizini bir veri manifest dosyası, firebase-export-metadata.json

Emülatörlere, kapandığında verileri otomatik olarak dışa aktarmaları için komut verebilirsiniz. Yukarıda açıklanan --export-on-exit flag'leri.

CI sisteminizle entegrasyon

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

Emulator Suite'in container'larla yüklenmesi ve yapılandırılması oldukça basittir.

Dikkat edilmesi gereken birkaç sorun vardır:

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

    • CI önbellek yapılandırmanıza bağlı olarak bu yolu eklemek isteyebilirsiniz. tekrarlayan indirmeler.
  • Deponuzda bir firebase.json dosyası yoksa bir emulators:start veya emulators:exec komutu için komut satırı bağımsız değişkeni başlatılması gereken emülatörleri belirtin. Örneğin,
    --only functions,firestore

Yetkilendirme jetonu oluşturma (yalnızca barındırma emülatörü)

Sürekli entegrasyon iş akışlarınızda Firebase Hosting kullanılıyorsa firebase emulators:exec öğesini çalıştırmak için jeton kullanarak giriş yapması gerekir. İlgili içeriği oluşturmak için kullanılan Diğer emülatörler giriş gerektirmez.

Jeton oluşturmak için yerel ortamınızda firebase login:ci komutunu çalıştırın; bu işlem bir CI sisteminden yapılmamalıdır. Kimlik doğrulama talimatlarını uygulayın. Jeton derlemeler genelinde geçerli olacağından bu adımı proje başına yalnızca bir kez gerçekleştirmeniz gerekir. Jeton, şifre gibi ele alınmalıdır; bu bilgi gizli tutulur.

CI ortamınız şunlara izin veren ortam değişkenlerini belirtmenize olanak tanıyorsa: derleme komut dosyalarında kullanılan bir ortam değişkeni oluşturun. FIREBASE_TOKEN (değer, erişim jetonu dizesidir). Firebase CLI FIREBASE_TOKEN ortam değişkenini ve emülatörler düzgün başlatılır.

Son çare olarak, jetonu derleme komut dosyanıza ekleyebilirsiniz, ancak güvenilmeyen tarafların erişimi olmadığından emin olun. Sabit kodlu bu yaklaşımınız için --token "YOUR_TOKEN_STRING_HERE" firebase emulators:exec komutu.

Emulator Hub REST API'yi kullanma

Çalışan emülatörleri listeleme

Şu anda çalışan emülatörleri listelemek için /emulators ürününe GET isteği gönderin. uç noktası bulunuyor.

curl localhost:4400/emulators

Sonuç, çalışan tüm emülatörleri ve bu emülatörleri listeleyen bir JSON nesnesi olacaktır. ana makine/bağlantı noktası yapılandırması, ö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 İşlevi Tetikleyicilerini Etkinleştirin / Devre Dışı Bırakın

Bazı durumlarda, yerel işlevi geçici olarak devre dışı bırakmanız uzantı tetikleyicileri. Örneğin, menüdeki tüm verileri silmek isteyebilirsiniz. onDelete işlevlerini tetiklemeden Cloud Firestore emülatörü Cloud Functions veya Extensions emülatörlerinde çalışıyor.

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

curl -X PUT localhost:4400/functions/disableBackgroundTriggers

Sonuç, mevcut durumu ayrıntılı olarak gösteren bir JSON nesnesi olur.

{
  "enabled": false
}

Devre dışı bırakılan yerel işlev tetikleyicilerini etkinleştirmek için bir PUT gönderin Emülatörün /functions/enableBackgroundTriggers uç noktasına yönelik istek Hub.

curl -X PUT localhost:4400/functions/enableBackgroundTriggers

Sonuç, mevcut durumu ayrıntılı olarak gösteren bir JSON nesnesi olur.

{
  "enabled": true
}

Emulator SDK entegrasyonları

Bu bölümdeki tablolar, istemci tarafından desteklenen emülatörleri gösterir ve Yönetici SDK'leri. Gelecek, emülatör desteğinin planlandığı ancak henüz planlandığı anlamına gelir kullanılabilir.

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

Android Apple platformları Web Firebase kullanıcı arayüzü
Android
Firebase kullanıcı arayüzü
iOS
Firebase kullanıcı arayüzü
Web
Realtime Database 19.4.0 7.2.0 8.0.0 6.4.0 Gelecek Yok
Cloud Firestore 21.6.0 7.2.0 8.0.0 6.4.0 Gelecek Yok
Authentication 20.0.0 7.0.0 8.0.0 7.0.0 Gelecek 4.7.2
Cloud Storage for Firebase 20.0.0 8.0.0 8.4.0 7.0.0 11.0.0 Yok
Cloud Functions 19.1.0 7.2.0 8.0.0 Yok Yok Yok
Hosting Yok Yok Yok Yok Yok Yok
Extensions Yok Yok Yok Yok Yok Yok

Yönetici SDK'sinin kullanılabilirliği

Düğüm Java Python Go
Realtime Database 8.6.0 6.10.0 2.18.0 Gelecek
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 Gelecek Gelecek Gelecek
Cloud Functions Yok Yok Yok Yok
Hosting Yok Yok Yok Yok
Extensions Yok Yok Yok Yok