欢迎参加我们将于 2022 年 10 月 18 日举办的 Firebase 峰会(线上线下同时进行),了解 Firebase 如何帮助您加快应用开发速度、满怀信心地发布应用并在之后需要时轻松地扩大应用规模。立即报名

Birden çok işlevi düzenleyin

Bulut İşlevlerini projenize entegre ettiğinizde kodunuz birçok bağımsız işlevi içerecek şekilde genişleyebilir. Tek bir dosyaya makul bir şekilde sığdırmak için çok fazla işleviniz olabilir veya farklı ekipler farklı işlev grupları dağıtarak bir ekibin başka bir ekibin işlevlerinin üzerine yazması veya yanlışlıkla silmesi riski oluşturabilir. Cloud Functions, gezinmeyi ve işlevlerinizi korumayı kolaylaştırmak için kodunuzu düzenlemenin farklı yollarını sunar.

İşlevleri kod tabanlarında düzenleyin

Tek bir depo monorepo kurulumunda birden çok depoda veya alt pakette geniş bir işlev koleksiyonunu yönetmek için firebase.json işlev yapılandırma nesnesinin codebase özelliğini kullanabilirsiniz:

# firebase.json
"functions": {
  "codebase": "my-codebase"
  # NOTE: Codebase must be less than 63 characters and can contain only
  # lowercase letters, numeric characters, underscores, and dashes.
}

codebase özelliği, Firebase CLI v10.7.1 ve üzeri sürümlerde desteklenir.

Birden çok depoyu yönetme

codebase özelliği, birden çok havuzun yönetimini basitleştirmeye yardımcı olabilir. Aynı Firebase projesine işlev dağıtan iki farklı deponuz olduğu bir durumu inceleyelim:

$  tree .
├── repoA
│   ├── firebase.json
│   └── functions
│       ├── index.js
│       └── package.json
└── repoB
    ├── firebase.json
    └── functions
        ├── index.js
        └── package.json

Kod tabanı ek açıklamaları olmadan, Firebase CLI, dağıtım sırasında diğer depoda tanımlanan işlevleri silmenizi isterdi:

$ (cd repoA && firebase deploy --only functions)
...
i  functions: preparing functions directory for uploading...
✔  functions: functions folder uploaded successfully
The following functions are found in your project but do not exist in your local source code:
        fn1FromRepoB
        fn2FromRepoB
        ...
? Would you like to proceed with deletion? Selecting no will continue the rest of the deployments. (y/N)

Her proje deposundaki firebase.json işlev yapılandırma bölümüne benzersiz bir kod tabanı açıklaması ekleyerek bu sorunu önleyebilirsiniz:

# repoA/firebase.json
"functions": {
  "codebase": "repo-a"
}

# repoB/firebase.json
"functions": {
  "codebase": "repo-b"
}

Codebase ek açıklamasıyla, Firebase CLI artık anında deponuzun dışında tanımlanan işlevleri silmenizi istemez:

$ (cd repoA && firebase deploy --only functions)
...
i  functions: preparing functions directory for uploading...
✔  functions: functions folder uploaded successfully
#  Gleefully ignores functions from repoB
i  functions: creating Node.js 16 function fnFromRepoA (us-central1)...
✔  Deploy Complete!

Birden çok kaynak paketi yönetme (monorepo)

codebase özelliği, tek bir havuzda birden çok kaynak paketin yönetimini basitleştirmeye yardımcı olabilir. Birkaç alt pakete yayılmış işlev tanımlarına sahip bir firebase proje dizininiz olduğu bir durumu inceleyelim:

$  tree .
├── firebase.json
├── teamA
│   ├── index.js
│   └── package.json
└── teamB
    ├── index.js
    └── package.json

Bu kurulum aşağıdaki kullanım durumlarına uyar:

  • Bir monorepo kurulumunuz var ve farklı ekiplerin izole bir pakette kendi fonksiyon tanımlarını yönetmesini sağlayın.
  • Yoğun bir dış bağımlılığa ve uzun süredir devam eden bir başlatmaya sahip bir işleviniz var ve bu işlevi gecikmeye duyarlı diğer işlevlerden yalıtmak istiyorsunuz.

Bunun gibi monrepo kurulumunu desteklemek için firebase.json birden çok işlev yapılandırması tanımlayın:

"functions": [
  {
    "source": "teamA",
    "codebase": "team-a"
  },
  {
    "source": "teamB",
    "codebase": "team-b"
  },
]

Bu yapılandırmayla, Firebase CLI, tüm paketlerdeki işlevleri tek bir dağıtım komutunda dağıtır:

$ firebase deploy --only functions
i  deploying functions
i  functions: preparing codebase team-a for deployment
i  functions: preparing codebase team-b for deployment
i  functions: creating Node.js 16 function team-a:helloATeam(us-central1)...
i  functions: creating Node.js 16 function team-b:helloBTeam(us-central1)...
...

Belirli bir kod tabanını da dağıtabilirsiniz:

$ firebase deploy --only functions:team-b
i  deploying functions
i  functions: preparing codebase team-b for deployment
i  functions: updating Node.js 16 function team-b:helloBTeam(us-central1)...
...

İşlevleri birden çok dosyaya yazın

Cloud Functions'ı kullanmaya başlarken, ilk birkaç işlevinizi tek bir dosyaya koyabilirsiniz:

index.js


const functions = require('firebase-functions');
exports.foo = functions.https.onRequest((request, response) => {
  // ...
});
exports.bar = functions.https.onRequest((request, response) => {
  // ...
});
tutucu10

Bu, birkaç işlevden daha fazlasıyla yönetilmesi zor olabilir. Bunun yerine, her işlev için tüm mantığınızı kendi dosyasına koyabilir ve index.js dosyanızı basit bir dışa aktarma listesi olarak kullanabilirsiniz:

foo.js


const functions = require('firebase-functions');
exports.foo = functions.https.onRequest((request, response) => {
  // ...
});
tutucu11

bar.js


const functions = require('firebase-functions');
exports.bar = functions.https.onRequest((request, response) => {
  // ...
});
tutucu12

index.js


const foo = require('./foo');
const bar = require('./bar');
exports.foo = foo.foo;
exports.bar = bar.bar;
tutucu13

Grup işlevleri

Birçok projede işlevler, birlikte dağıtılması ve sürdürülmesi gereken mantıksal gruplara ayrılabilir. Örneğin, metrikleri raporlamak için kullanılan bir grup işleviniz olabilir:

metrics.js


const functions = require('firebase-functions');
exports.usageStats = functions.https.onRequest((request, response) => {
  // ...
});
exports.nightlyReport = functions.https.onRequest((request, response) => {
  // ...
});
tutucu14

Bu işlevleri index.js dosyanızda dışa aktarırken bir gruba koyabilirsiniz:

index.js


// Export both functions from metrics.js in the "metrics" group:
//  - metrics-usageStats
//  - metrics-nightlyReport
exports.metrics = require('./metrics');
tutucu15

Dağıtıldığında, işlevlerin önüne gruplarının adları eklenecektir, bu nedenle bu örnekte işlevler metrics-usageStats ve metrics-nightlyReport olarak adlandırılacaktır.

İşlevleri dağıtırken eylemi tek bir grupla sınırlayabilirsiniz:


firebase deploy --only functions:metrics

Sonraki adımlar

Bulut İşlevleri hakkında daha fazla bilgi edinmek için bkz.