Local Emulator Suite'i kurun, 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 her şey için farklı prototip ve test ortamları için kurulabilir ve yapılandırılabilir.

Local Emulator Suite'i kurun

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

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

Emulator Suite'i kurmak için:

  1. Firebase CLI'yi kurun. Firebase CLI kurulu değilse, şimdi kurun . Emulator Suite'i kullanmak için CLI sürüm 8.14.0 veya üstüne 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ı belirlemek için ekrandaki istemleri 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 izin veren bir yapılandırma sihirbazını başlatır.
    firebase init emulators

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

Emulator Suite'i Yapılandırın

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

  • firebase init emulators çalıştırarak veya firebase.json el ile 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 öykünücüler varsayılan bağlantı noktalarında dinler ve Cloud Firestore, Realtime Database ve Cloud Storage for Firebase öykünücüleri açık veri güvenliğiyle çalışır.

Emretmek Tanım
init emülatörleri Bir öykünücü başlatma sihirbazı başlatın. Kurulacak öykünücüleri tanımlayın ve isteğe bağlı olarak öykünücü bağlantı noktası ayarlarını belirtin. init emulators yıkıcı değildir; varsayılanları kabul etmek, geçerli öykünücü yapılandırmasını koruyacaktır.

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

Her öykünücü, tercih edilen bir 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, belirli bir proje kimliği için farklı Firebase proje kimlikleri veya birden çok öykünücü örneği kullanarak bir öykünücünün birden çok örneğini çalıştırabilirsiniz. Bu gibi durumlarda öykünücü örnekleri ayrı bir ortamda çalışır.

Tüm öykünücü çağrıları için tek bir proje kimliği belirlemek genellikle iyi bir uygulamadır, böylece Emulator Suite kullanıcı arabirimi, farklı ürün öykünücüleri ve belirli bir öykünücünün çalışan tüm örnekleri her durumda doğru şekilde iletişim kurabilir.

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

Uyumsuzluklar için proje kimliği bildirimlerini şuralarda 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 birim testleri. Proje KIMLIĞI genellikle Kural Birimi Testi kitaplığı yöntemlerine yapılan çağrılarda belirtilir, initializeTestEnvironment veya initializeTestApp .
  • Komut satırı --project bayrağı. Firebase CLI --project bayrağının geçirilmesi, varsayılan projeyi geçersiz kılar. Birim testlerinde ve uygulama başlatmada bayrağın değerinin proje kimliğiyle eşleştiğinden emin olmanız gerekir.

Ayrıca, Apple platformlarınızı , Android 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ı

Öykünücüler, firebase.json database , firestore ve storage yapılandırma anahtarlarından Güvenlik Kuralları yapılandırmasını 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 belirleme

Gerçek Zamanlı Veritabanı öykünücüsü, Cloud Firestore öykünücüsü ve Cloud Storage for Firebase öykünücüsü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 yükseltebilirsiniz:

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 çok işaret belirtilebilir. İşaretler yalnızca öykünücülerin Java tabanlı bileşenlerini etkiler ve Firebase CLI'nin Emulator Suite kullanıcı arabirimi gibi diğer bölümleri üzerinde hiçbir etkisi yoktur.

Öykünücüleri başlat

Öykünücüleri manuel olarak sonlandırılana kadar çalışacak şekilde veya belirlenmiş bir test komut dosyası süresince çalışacak ve ardından otomatik olarak kapatacak şekilde başlatabilirsiniz.

Emretmek Tanım
öykünücüler:başlat firebase.json yapılandırılan Firebase ürünleri için öykünücüleri başlatın. Öykünücü işlemleri, açıkça durdurulana kadar çalışmaya devam edecek. emulators:start çağrıldığında, emülatörler önceden kurulu değilse ~/.cache/firebase/emulators/ konumuna indirilir.
bayrak Açıklama
--only İsteğe bağlı. Hangi öykünücülerin başlayacağını sınırlayın. Bir veya daha fazla 'auth', 'database', 'firestore', 'functions', 'hosting' veya 'pubsub' 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ında (veya bağımsız değişken atlanırsa varsayılan bağlantı noktası 9229) işlevlerin kesme noktası hata ayıklamasını etkinleştirmek için Cloud Functions öykünücüsü ile birlikte kullanın. Bu bayrak sağlandığında, Cloud Functions öykünücüsünün, işlevlerin sıralı (FIFO) sırayla tek bir işlemde yürütüldüğü özel bir seri hale getirilmiş yürütme moduna geçtiğini unutmayın; bu, davranış hata ayıklamayı basitleştirir, ancak davranış, işlevlerin bulutta çok işlemli, paralel yürütülmesinden farklıdır.
--export-on-exit= İsteğe bağlı. Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörü ile kullanın. Emulators: emulators:export , kapatma gerçekleştiğinde 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ı. Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörü ile kullanın. --export-on-exit başlangıç ​​seçeneği veya emulators:export komutu kullanılarak kaydedilen verileri çalışan bir Kimlik Doğrulama, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase öykünücü örneğine aktarın. Halihazırda öykünücü belleğinde bulunan herhangi bir veri üzerine yazılır.
öykünücüler:exec scriptpath firebase.json yapılandırılan Firebase ürünleri için öykünücüleri başlattıktan sonra betiği scriptpath çalıştırın. Emülatör işlemleri, komut dosyası çalışmayı bitirdiğinde otomatik olarak duracaktır.
bayrak Açıklama
--only İsteğe bağlı. Hangi öykünücülerin başlayacağını sınırlayın. Bir veya daha fazla "firestore", "veritabanı", "işlevler", "barındırma" veya "pubsub" belirterek öykünücü adlarının virgülle ayrılmış bir listesini sağlayın.
--inspect-functions debug_port İsteğe bağlı. Belirtilen bağlantı noktasında (veya bağımsız değişken atlanırsa varsayılan bağlantı noktası 9229) işlevlerin kesme noktası hata ayıklamasını etkinleştirmek için Cloud Functions öykünücüsü ile birlikte kullanın. Bu bayrak sağlandığında, Cloud Functions öykünücüsünün, işlevlerin sıralı (FIFO) sırayla tek bir işlemde yürütüldüğü özel bir seri hale getirilmiş yürütme moduna geçtiğini unutmayın; bu, davranış hata ayıklamayı basitleştirir, ancak davranış, işlevlerin bulutta çok işlemli, paralel yürütülmesinden farklıdır.
--export-on-exit= İsteğe bağlı. Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörü ile kullanın. Emulators: emulators:export , kapatma gerçekleştiğinde 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ı. Authentication, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase emülatörü ile kullanın. --export-on-exit başlangıç ​​seçeneği veya emulators:export komutu kullanılarak kaydedilen verileri çalışan bir Kimlik Doğrulama, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase öykünücü örneğine aktarın. Şu anda öykünücü belleğinde bulunan tüm verilerin üzerine yazılacaktır.
--ui İsteğe bağlı. Yürütme sırasında Emulator kullanıcı arabirimini çalıştırın.

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

Öykünücü verilerini dışa ve içe aktarma

Paylaşılabilir, ortak bir temel veri seti olarak kullanmak için Kimlik Doğrulama, Cloud Firestore, Realtime Database ve Cloud Storage for Firebase öykünücülerinden 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: export_directory dışa aktarma

Kimlik doğrulama, Cloud Firestore, Realtime Database veya Cloud Storage for Firebase öykünücüsü . Çalışan bir Cloud Firestore, Realtime Database veya Cloud Storage for Firebase öykünücü örneğinden verileri dışa aktarın. Belirtilen export_directory zaten 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, bir veri bildirim dosyası içerir, firebase-export-metadata.json .

Öykünücülere, yukarıda açıklanan --export-on-exit bayraklarını kullanarak kapandıklarında verileri otomatik olarak dışa aktarmaları talimatını verebilirsiniz.

CI sisteminizle entegre edin

Kapsayıcılı Emulator Suite görüntülerini çalıştırma

Tipik bir CI kurulumunda kapsayıcılarla Emulator Suite'in kurulumu ve konfigürasyonu basittir.

Dikkat edilmesi gereken birkaç sorun var:

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

    • Tekrarlanan indirmeleri önlemek için bu yolu CI önbellek yapılandırmanıza eklemek isteyebilirsiniz.
  • Deponuzda bir firebase.json dosyanız yoksa, hangi öykünücülerin 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ştur (Yalnızca barındırma ö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 gerekir. Diğer emülatörler oturum açmayı gerektirmez.

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ğrulaması yapmak için talimatları izleyin. Belirteç yapılarda geçerli olacağından, bu adımı proje başına yalnızca bir kez gerçekleştirmeniz gerekir. Belirteç bir parola gibi ele alınmalıdır; gizli tutulduğundan emin olun.

CI ortamınız yapı betiklerinde kullanılabilecek ortam değişkenlerini belirtmenize izin veriyorsa, basitçe FIREBASE_TOKEN adlı, erişim belirteci dizesi olan bir ortam değişkeni oluşturun. Firebase CLI, FIREBASE_TOKEN ortam değişkenini otomatik olarak alacak ve öykünücüler düzgün bir ş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 öykünücüleri 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ştir / Devre Dışı Bırak

Bazı durumlarda, yerel işlev ve uzantı tetikleyicilerini geçici olarak devre dışı bırakmanız gerekir. Ö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
}

Devre dışı bırakıldıktan sonra yerel işlev tetikleyicilerini 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
}

Emulator 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, öykünücü desteğinin planlandığı ancak henüz mevcut olmadığı anlamına gelir.

İstemci SDK kullanılabilirliği

Android elma 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 kullanılabilirliği

düğüm java Piton 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