Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Tổ chức nhiều chức năng

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

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 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. Chức năng đám mây cung cấp các cách khác nhau để tổ chức mã của bạn nhằm giúp bạn điều hướng và duy trì các chức năng của mình 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 hàm trong firebase.json để quản lý một bộ sưu tập lớn các hàm trên nhiều kho hoặc gói con trong một thiết lập monorepo của kho lưu trữ:

# 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

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 sự cố này bằng cách thêm chú thích codebase 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ữ tức thì 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ữ duy nhất. Hãy xem xét trường hợp bạn có một thư mục dự án firebase với các định nghĩa chức năng 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 riêng biệt.
  • Bạn có một hàm có mức độ phụ thuộc bên ngoài lớn và quá trình khởi tạo lâu dài và muốn tách riêng hàm đó khỏi các hàm 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 cơ sở mã 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 các hàm trong nhiều tệp

Khi bắt đầu với Chức năng đám mây, bạn có thể đặt một số 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 hơn một vài chức năng. Thay vào đó, bạn có thể đặt tất cả logic của mình cho từng hàm trong tệp riêng của nó và sử dụng index.js của bạn như một 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;

Nhóm chức năng

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:

metrics.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 thành một nhóm khi xuất chúng trong 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 đặt trước 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-usageStatsmetrics-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: