Khi bạn tích hợp Chức năng đám mây vào dự án của mình, mã của bạn có thể mở rộng để chứa nhiều chức năng độc lập. Bạn có thể có quá nhiều chức năng để phù hợp một cách hợp lý trong một tệp hoặc các nhóm khác nhau có thể triển khai các nhóm chức năng khác nhau, tạo ra nguy cơ một nhóm ghi đè hoặc vô tình xóa các chức năng của nhóm khác. Cloud Functions cung cấp nhiều cách khác nhau để sắp xếp mã của bạn nhằm giúp bạn điều hướng và duy trì các chức năng dễ dàng hơn.
Tổ chức các chức năng trong cơ sở mã
Bạn có thể sử dụng thuộc tính codebase
của đối tượng cấu hình chức năng trong firebase.json
để quản lý một bộ sưu tập lớn các chức năng trên nhiều kho lưu trữ hoặc gói con trong một thiết lập đơn kho lưu trữ duy nhất:
# 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.
}
Thuộc tính codebase
được hỗ trợ trong Firebase CLI v10.7.1 trở lên.
Quản lý nhiều kho lưu trữ
Thuộc tính codebase
có thể giúp đơn giản hóa việc quản lý nhiều kho lưu trữ. Hãy xem xét trường hợp bạn có hai kho lưu trữ khác nhau triển khai các chức năng cho cùng một dự án Firebase:
$ tree .
├── repoA
│ ├── firebase.json
│ └── functions
│ ├── index.js
│ └── package.json
└── repoB
├── firebase.json
└── functions
├── index.js
└── package.json
Nếu không có chú thích codebase, Firebase CLI sẽ nhắc bạn xóa các chức năng được xác định trong kho lưu trữ khác tại thời điểm triển khai:
$ (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)
Bạn có thể tránh vấn đề này bằng cách thêm một chú thích cơ sở mã duy nhất trong phần cấu hình chức năng của firebase.json
trong mỗi kho lưu trữ dự án:
# repoA/firebase.json
"functions": {
"codebase": "repo-a"
}
# repoB/firebase.json
"functions": {
"codebase": "repo-b"
}
Với chú thích codebase, Firebase CLI không còn nhắc bạn xóa các chức năng được xác định bên ngoài kho lưu trữ trực tiếp của bạn:
$ (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!
Quản lý nhiều gói nguồn (monorepo)
Thuộc tính codebase
có thể giúp đơn giản hóa việc quản lý nhiều gói nguồn trong một kho lưu trữ. Hãy xem xét trường hợp bạn có thư mục dự án firebase với các định nghĩa hàm trải rộng trên một số gói con:
$ tree .
├── firebase.json
├── teamA
│ ├── index.js
│ └── package.json
└── teamB
├── index.js
└── package.json
Thiết lập này phù hợp với các trường hợp sử dụng sau:
- Bạn có một thiết lập monorepo và có các nhóm khác nhau quản lý các định nghĩa chức năng của riêng họ trong một gói biệt lập.
- Bạn có một chức năng phụ thuộc nhiều vào bên ngoài và quá trình khởi tạo kéo dài, đồng thời muốn tách biệt chức năng đó khỏi các chức năng nhạy cảm với độ trễ khác.
Để hỗ trợ thiết lập monrepo như thế này, hãy xác định nhiều cấu hình chức năng trong firebase.json
:
"functions": [
{
"source": "teamA",
"codebase": "team-a"
},
{
"source": "teamB",
"codebase": "team-b"
},
]
Với cấu hình này, Firebase CLI triển khai các chức năng từ tất cả các gói trong một lệnh triển khai duy nhất:
$ 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)...
...
Bạn cũng có thể triển khai một codebase cụ thể:
$ 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)...
...
Viết hàm trong nhiều tệp
Khi bắt đầu với Cloud Functions, bạn có thể đặt một vài chức năng đầu tiên của mình vào một tệp duy nhất:
index.js
const functions = require('firebase-functions'); exports.foo = functions.https.onRequest((request, response) => { // ... }); exports.bar = functions.https.onRequest((request, response) => { // ... });
Điều này có thể trở nên khó quản lý với nhiều chức năng. Thay vào đó, bạn có thể đặt tất cả logic của mình cho từng chức năng trong tệp riêng của nó và sử dụng tệp index.js
của bạn làm danh sách xuất đơn giản:
foo.js
const functions = require('firebase-functions'); exports.foo = functions.https.onRequest((request, response) => { // ... });
bar.js
const functions = require('firebase-functions'); exports.bar = functions.https.onRequest((request, response) => { // ... });
index.js
const foo = require('./foo'); const bar = require('./bar'); exports.foo = foo.foo; exports.bar = bar.bar;
chức năng nhóm
Trong nhiều dự án, các chức năng có thể được tách thành các nhóm hợp lý nên được triển khai và duy trì cùng nhau. Ví dụ: bạn có thể có một nhóm chức năng được sử dụng để báo cáo số liệu:
metric.js
const functions = require('firebase-functions'); exports.usageStats = functions.https.onRequest((request, response) => { // ... }); exports.nightlyReport = functions.https.onRequest((request, response) => { // ... });
Bạn có thể đặt các hàm này vào một nhóm khi xuất chúng trong tệp index.js
của mình:
index.js
// Export both functions from metrics.js in the "metrics" group: // - metrics-usageStats // - metrics-nightlyReport exports.metrics = require('./metrics');
Khi được triển khai, các hàm sẽ có tiền tố là tên nhóm của chúng, vì vậy, trong ví dụ này, các hàm sẽ được đặt tên là metrics-usageStats
và metrics-nightlyReport
.
Khi triển khai các chức năng, bạn có thể giới hạn hành động trong một nhóm duy nhất:
firebase deploy --only functions:metrics
Bước tiếp theo
Để tìm hiểu thêm về Chức năng đám mây, hãy xem: