Tài liệu tham khảo CLI của Firebase

Firebase CLI ( GitHub ) cung cấp nhiều công cụ để quản lý, xem và triển khai các dự án Firebase.

Trước khi sử dụng Firebase CLI, hãy thiết lập dự án Firebase .

Thiết lập hoặc cập nhật CLI

Cài đặt Firebase CLI

Bạn có thể cài đặt Firebase CLI bằng phương pháp phù hợp với hệ điều hành, cấp độ kinh nghiệm và/hoặc trường hợp sử dụng của bạn. Bất kể bạn cài đặt CLI như thế nào, bạn đều có quyền truy cập vào cùng chức năng và lệnh firebase .

Windows macOS Linux

các cửa sổ

Bạn có thể cài đặt Firebase CLI cho Windows bằng một trong các tùy chọn sau:

Lựa chọn Sự miêu tả Đề nghị cho...
nhị phân độc lập Tải xuống tệp nhị phân độc lập cho CLI. Sau đó, bạn có thể truy cập tệp thực thi để mở shell nơi bạn có thể chạy lệnh firebase . Nhà phát triển mới

Các nhà phát triển chưa sử dụng hoặc chưa quen với Node.js
npm Sử dụng npm (Trình quản lý gói nút) để cài đặt CLI và kích hoạt lệnh firebase có sẵn trên toàn cầu. Nhà phát triển sử dụng Node.js

nhị phân độc lập

Để tải xuống và chạy tệp nhị phân cho Firebase CLI, hãy làm theo các bước sau:

  1. Tải xuống tệp nhị phân Firebase CLI cho Windows .

  2. Truy cập tệp nhị phân để mở shell nơi bạn có thể chạy lệnh firebase .

  3. Tiếp tục đăng nhập và kiểm tra CLI .

npm

Để sử dụng npm (Trình quản lý gói nút) để cài đặt Firebase CLI, hãy làm theo các bước sau:

  1. Cài đặt Node.js bằng nvm-windows (Trình quản lý phiên bản nút). Việc cài đặt Node.js sẽ tự động cài đặt các công cụ lệnh npm .

  2. Cài đặt Firebase CLI qua npm bằng cách chạy lệnh sau:

    npm install -g firebase-tools

    Lệnh này cho phép lệnh firebase có sẵn trên toàn cầu.

  3. Tiếp tục đăng nhập và kiểm tra CLI .

macOS hoặc Linux

Bạn có thể cài đặt Firebase CLI cho macOS hoặc Linux bằng một trong các tùy chọn sau:

Lựa chọn Sự miêu tả Đề nghị cho...
tập lệnh cài đặt tự động Chạy một lệnh duy nhất tự động phát hiện hệ điều hành của bạn, tải xuống bản phát hành CLI mới nhất, sau đó kích hoạt lệnh firebase có sẵn trên toàn cầu. Nhà phát triển mới

Các nhà phát triển chưa sử dụng hoặc chưa quen với Node.js

Triển khai tự động trong môi trường CI/CD
nhị phân độc lập Tải xuống tệp nhị phân độc lập cho CLI. Sau đó, bạn có thể định cấu hình và chạy tệp nhị phân cho phù hợp với quy trình làm việc của mình. Quy trình làm việc hoàn toàn có thể tùy chỉnh bằng CLI
npm Sử dụng npm (Trình quản lý gói nút) để cài đặt CLI và kích hoạt lệnh firebase có sẵn trên toàn cầu. Nhà phát triển sử dụng Node.js

tập lệnh cài đặt tự động

Để cài đặt Firebase CLI bằng tập lệnh cài đặt tự động, hãy làm theo các bước sau:

  1. Chạy lệnh cURL sau:

    curl -sL https://firebase.tools | bash

    Tập lệnh này tự động phát hiện hệ điều hành của bạn, tải xuống bản phát hành Firebase CLI mới nhất, sau đó kích hoạt lệnh firebase có sẵn trên toàn cầu.

  2. Tiếp tục đăng nhập và kiểm tra CLI .

Để biết thêm ví dụ và chi tiết về tập lệnh cài đặt tự động, hãy tham khảo mã nguồn của tập lệnh tại firebase.tools .

nhị phân độc lập

Để tải xuống và chạy tệp nhị phân cho Firebase CLI dành riêng cho hệ điều hành của bạn, hãy làm theo các bước sau:

  1. Tải xuống tệp nhị phân Firebase CLI cho hệ điều hành của bạn: macOS | Linux

  2. (Tùy chọn) Thiết lập lệnh firebase có sẵn trên toàn cầu.

    1. Làm cho tệp nhị phân có thể thực thi được bằng cách chạy chmod +x ./firebase_tools .
    2. Thêm đường dẫn nhị phân vào PATH của bạn.
  3. Tiếp tục đăng nhập và kiểm tra CLI .

npm

Để sử dụng npm (Trình quản lý gói nút) để cài đặt Firebase CLI, hãy làm theo các bước sau:

  1. Cài đặt Node.js bằng nvm (Trình quản lý phiên bản nút).
    Việc cài đặt Node.js sẽ tự động cài đặt các công cụ lệnh npm .

  2. Cài đặt Firebase CLI qua npm bằng cách chạy lệnh sau:

    npm install -g firebase-tools

    Lệnh này cho phép lệnh firebase có sẵn trên toàn cầu.

  3. Tiếp tục đăng nhập và kiểm tra CLI .

Đăng nhập và kiểm tra Firebase CLI

Sau khi cài đặt CLI, bạn phải xác thực. Sau đó, bạn có thể xác nhận xác thực bằng cách liệt kê các dự án Firebase của mình.

  1. Đăng nhập vào Firebase bằng tài khoản Google của bạn bằng cách chạy lệnh sau:

    firebase login

    Lệnh này kết nối máy cục bộ của bạn với Firebase và cấp cho bạn quyền truy cập vào các dự án Firebase của bạn.

  2. Kiểm tra xem CLI đã được cài đặt và truy cập đúng cách vào tài khoản của bạn chưa bằng cách liệt kê các dự án Firebase của bạn. Chạy lệnh sau:

    firebase projects:list

    Danh sách được hiển thị phải giống với danh sách các dự án Firebase được liệt kê trong bảng điều khiển Firebase .

Cập nhật lên phiên bản CLI mới nhất

Nói chung, bạn muốn sử dụng phiên bản Firebase CLI cập nhật nhất.

Cách bạn cập nhật phiên bản CLI tùy thuộc vào hệ điều hành và cách bạn cài đặt CLI.

các cửa sổ

  • nhị phân độc lập : Tải xuống phiên bản mới , sau đó thay thế nó trên hệ thống của bạn
  • npm : Chạy npm install -g firebase-tools

hệ điều hành Mac

  • tập lệnh cài đặt tự động : Chạy curl -sL https://firebase.tools | upgrade=true bash
  • nhị phân độc lập : Tải xuống phiên bản mới , sau đó thay thế nó trên hệ thống của bạn
  • npm : Chạy npm install -g firebase-tools

Linux

  • tập lệnh cài đặt tự động : Chạy curl -sL https://firebase.tools | upgrade=true bash
  • nhị phân độc lập : Tải xuống phiên bản mới , sau đó thay thế nó trên hệ thống của bạn
  • npm : Chạy npm install -g firebase-tools

Sử dụng CLI với hệ thống CI

Firebase CLI yêu cầu trình duyệt để hoàn tất xác thực nhưng CLI hoàn toàn tương thích với CI và các môi trường không đầu khác.

  1. Trên máy có trình duyệt, hãy cài đặt Firebase CLI .

  2. Bắt đầu quá trình đăng nhập bằng cách chạy lệnh sau:

    firebase login:ci
  3. Truy cập URL được cung cấp, sau đó đăng nhập bằng tài khoản Google.

  4. In mã thông báo làm mới mới. Phiên CLI hiện tại sẽ không bị ảnh hưởng.

  5. Lưu trữ mã thông báo đầu ra theo cách an toàn nhưng có thể truy cập được trong hệ thống CI của bạn.

  6. Sử dụng mã thông báo này khi chạy các lệnh firebase . Bạn có thể sử dụng một trong hai tùy chọn sau:

    • Tùy chọn 1: Lưu trữ mã thông báo dưới dạng biến môi trường FIREBASE_TOKEN . Hệ thống của bạn sẽ tự động sử dụng mã thông báo.

    • Tùy chọn 2: Chạy tất cả các lệnh firebase bằng cờ --token TOKEN trong hệ thống CI của bạn.
      Đây là thứ tự ưu tiên cho việc tải mã thông báo: cờ, biến môi trường, dự án Firebase mong muốn.

Khởi tạo dự án Firebase

Nhiều tác vụ phổ biến được thực hiện bằng CLI, chẳng hạn như triển khai dự án Firebase, yêu cầu thư mục dự án . Bạn thiết lập một thư mục dự án bằng lệnh firebase init . Thư mục dự án thường có cùng thư mục với thư mục gốc kiểm soát nguồn của bạn và sau khi chạy firebase init , thư mục đó chứa tệp cấu hình firebase.json .

Để khởi tạo dự án Firebase mới, hãy chạy lệnh sau từ trong thư mục ứng dụng của bạn:

firebase init

Lệnh firebase init sẽ hướng dẫn bạn thiết lập thư mục dự án và một số sản phẩm Firebase. Trong quá trình khởi tạo dự án, Firebase CLI yêu cầu bạn hoàn thành các tác vụ sau:

  • Chọn các sản phẩm Firebase mong muốn để thiết lập trong dự án Firebase của bạn.

    Bước này sẽ nhắc bạn đặt cấu hình cho các tệp cụ thể cho các sản phẩm đã chọn. Để biết thêm chi tiết về các cấu hình này, hãy tham khảo tài liệu của sản phẩm cụ thể (ví dụ: Hosting ). Lưu ý rằng bạn luôn có thể chạy firebase init sau để thiết lập thêm các sản phẩm Firebase.

  • Chọn một dự án Firebase mặc định.

    Bước này liên kết thư mục dự án hiện tại với dự án Firebase để các lệnh dành riêng cho dự án (như firebase deploy ) chạy theo dự án Firebase thích hợp.

    Cũng có thể liên kết nhiều dự án Firebase (chẳng hạn như dự án dàn dựng và dự án sản xuất) với cùng một thư mục dự án.

Khi kết thúc quá trình khởi tạo, Firebase sẽ tự động tạo hai tệp sau ở thư mục gốc của thư mục ứng dụng cục bộ của bạn:

  • Tệp cấu hình firebase.json liệt kê cấu hình dự án của bạn.

  • Tệp .firebaserc lưu trữ bí danh dự án của bạn.

Tệp firebase.json

Lệnh firebase init tạo tệp cấu hình firebase.json trong thư mục gốc của dự án của bạn.

Cần có tệp firebase.json để triển khai nội dung bằng Firebase CLI vì tệp này chỉ định tệp và cài đặt nào từ thư mục dự án sẽ được triển khai cho dự án Firebase của bạn. Vì một số cài đặt có thể được xác định trong thư mục dự án của bạn hoặc bảng điều khiển Firebase, hãy đảm bảo rằng bạn giải quyết mọi xung đột triển khai tiềm ẩn.

Bạn có thể định cấu hình hầu hết các tùy chọn Lưu trữ Firebase trực tiếp trong tệp firebase.json . Tuy nhiên, đối với các dịch vụ Firebase khác có thể được triển khai bằng Firebase CLI , lệnh firebase init sẽ tạo các tệp cụ thể nơi bạn có thể xác định cài đặt cho các dịch vụ đó, chẳng hạn như tệp index.js cho Chức năng đám mây. Bạn cũng có thể thiết lập các hook predeploy hoặc postdeploy trong tệp firebase.json .

Sau đây là tệp firebase.json mẫu với cài đặt mặc định nếu bạn chọn Firebase Hosting, Cloud Firestore và Cloud Functions cho Firebase (với các tùy chọn mã nguồn và mã nguồn TypeScript được chọn) trong quá trình khởi tạo.

{
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  },
  "firestore": {
      "rules": "firestore.rules",
      "indexes": "firestore.indexes.json"
  },
  "functions": {
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run lint",
      "npm --prefix \"$RESOURCE_DIR\" run build"
    ]
  }
}

Mặc dù firebase.json được sử dụng theo mặc định, bạn có thể chuyển cờ --config PATH để chỉ định tệp cấu hình thay thế.

Cấu hình cho nhiều cơ sở dữ liệu Cloud Firestore

Khi bạn chạy firebase init , tệp firebase.json của bạn sẽ chứa một khóa firestore duy nhất tương ứng với cơ sở dữ liệu mặc định của dự án của bạn, như được hiển thị ở trên.

Nếu dự án của bạn chứa nhiều cơ sở dữ liệu Cloud Firestore, hãy chỉnh sửa tệp firebase.json của bạn để liên kết các Quy tắc bảo mật Cloud Firestore khác nhau và các tệp nguồn chỉ mục cơ sở dữ liệu với mỗi cơ sở dữ liệu. Sửa đổi tệp bằng một mảng JSON, với một mục nhập cho mỗi cơ sở dữ liệu.

      "firestore": [
        {
          "database": "default",
          "rules": "firestore.default.rules",
          "indexes": "firestore.default.indexes.json"
        },
        {
          "database": "ecommerce",
          "rules": "firestore.ecommerce.rules",
          "indexes": "firestore.ecommerce.indexes.json"
        }
      ],

Các tệp Chức năng đám mây cần bỏ qua khi triển khai

Tại thời điểm triển khai hàm, CLI tự động chỉ định danh sách các tệp trong thư mục functions cần bỏ qua. Điều này ngăn việc triển khai vào các tệp không liên quan phụ trợ có thể làm tăng kích thước dữ liệu khi triển khai của bạn.

Danh sách các tệp bị bỏ qua theo mặc định, được hiển thị ở định dạng JSON, là:

"ignore": [
  ".git",
  ".runtimeconfig.json",
  "firebase-debug.log",
  "firebase-debug.*.log",
  "node_modules"
]

Nếu bạn thêm các giá trị tùy chỉnh của riêng mình để ignore trong firebase.json , hãy đảm bảo rằng bạn giữ lại (hoặc thêm, nếu thiếu) danh sách các tệp được hiển thị ở trên.

Quản lý bí danh dự án

Bạn có thể liên kết nhiều dự án Firebase với cùng một thư mục dự án. Ví dụ: bạn có thể muốn sử dụng một dự án Firebase để dàn dựng và một dự án khác để sản xuất. Bằng cách sử dụng các môi trường dự án khác nhau, bạn có thể xác minh các thay đổi trước khi triển khai vào sản xuất. Lệnh firebase use cho phép bạn chuyển đổi giữa các bí danh cũng như tạo bí danh mới.

Thêm bí danh dự án

Khi bạn chọn một dự án Firebase trong quá trình khởi tạo dự án , dự án sẽ tự động được gán bí danh default . Tuy nhiên, để cho phép các lệnh dành riêng cho dự án chạy trên một dự án Firebase khác nhưng vẫn sử dụng cùng một thư mục dự án, hãy chạy lệnh sau từ trong thư mục dự án của bạn:

firebase use --add

Lệnh này sẽ nhắc bạn chọn một dự án Firebase khác và gán dự án đó làm bí danh. Bài tập bí danh được ghi vào tệp .firebaserc bên trong thư mục dự án của bạn.

Sử dụng bí danh dự án

Để sử dụng bí danh dự án Firebase được chỉ định, hãy chạy bất kỳ lệnh nào sau đây từ trong thư mục dự án của bạn.

Yêu cầu Sự miêu tả
firebase use Xem danh sách các bí danh hiện được xác định cho thư mục dự án của bạn
firebase use \
PROJECT_ID|ALIAS
Chỉ đạo tất cả các lệnh chạy theo dự án Firebase được chỉ định.
CLI sử dụng dự án này làm "dự án đang hoạt động" hiện tại.
firebase use --clear Xóa dự án đang hoạt động.

Chạy firebase use PROJECT_ID|ALIAS để thiết lập dự án đang hoạt động mới trước khi chạy các lệnh CLI khác.

firebase use \
--unalias PROJECT_ALIAS
Xóa bí danh khỏi thư mục dự án của bạn.

Bạn có thể ghi đè những gì đang được sử dụng làm dự án hiện đang hoạt động bằng cách chuyển cờ --project bằng bất kỳ lệnh CLI nào. Ví dụ: Bạn có thể đặt CLI của mình chạy trên dự án Firebase mà bạn đã chỉ định bí danh staging . Nếu bạn muốn chạy một lệnh duy nhất đối với dự án Firebase mà bạn đã gán bí danh prod thì bạn có thể chạy, chẳng hạn như firebase deploy --project=prod .

Kiểm soát nguồn và bí danh dự án

Nói chung, bạn nên kiểm tra tệp .firebaserc của mình trong phần kiểm soát nguồn để cho phép nhóm của bạn chia sẻ bí danh dự án. Tuy nhiên, đối với các dự án nguồn mở hoặc mẫu khởi đầu, bạn thường không nên kiểm tra tệp .firebaserc của mình.

Nếu bạn có một dự án phát triển chỉ dành cho bạn sử dụng, bạn có thể chuyển cờ --project bằng mỗi lệnh hoặc chạy firebase use PROJECT_ID mà không chỉ định bí danh cho dự án Firebase.

Phục vụ và thử nghiệm dự án Firebase của bạn tại địa phương

Bạn có thể xem và thử nghiệm dự án Firebase của mình trên các URL được lưu trữ cục bộ trước khi triển khai vào sản xuất. Nếu chỉ muốn kiểm tra các tính năng chọn lọc, bạn có thể sử dụng danh sách được phân tách bằng dấu phẩy trong một lá cờ trên lệnh firebase serve .

Chạy lệnh sau từ thư mục gốc của dự án cục bộ nếu bạn muốn thực hiện một trong các tác vụ sau:

  • Xem nội dung tĩnh cho ứng dụng được lưu trữ trên Firebase của bạn.
  • Sử dụng Chức năng đám mây để tạo nội dung động cho Firebase Hosting và bạn muốn sử dụng các chức năng HTTP sản xuất (đã triển khai) của mình để mô phỏng Lưu trữ trên URL cục bộ.
firebase serve --only hosting

Mô phỏng dự án của bạn bằng các hàm HTTP cục bộ

Chạy bất kỳ lệnh nào sau đây từ thư mục dự án của bạn để mô phỏng dự án của bạn bằng các hàm HTTP cục bộ .

  • Để mô phỏng các chức năng HTTP và lưu trữ để thử nghiệm trên URL cục bộ, hãy sử dụng một trong các lệnh sau:

    firebase serve
    firebase serve --only functions,hosting // uses a flag
  • Để chỉ mô phỏng các chức năng HTTP, hãy sử dụng lệnh sau:

    firebase serve --only functions

Kiểm tra từ các thiết bị cục bộ khác

Theo mặc định, firebase serve chỉ đáp ứng các yêu cầu từ localhost . Điều này có nghĩa là bạn sẽ có thể truy cập nội dung được lưu trữ từ trình duyệt web trên máy tính của bạn chứ không phải từ các thiết bị khác trên mạng của bạn. Nếu bạn muốn kiểm tra từ các thiết bị cục bộ khác, hãy sử dụng cờ --host , như sau:

firebase serve --host 0.0.0.0  // accepts requests to any host

Triển khai vào dự án Firebase

Firebase CLI quản lý việc triển khai mã và nội dung cho dự án Firebase của bạn, bao gồm:

  • Bản phát hành mới của trang web Lưu trữ Firebase của bạn
  • Chức năng đám mây mới, được cập nhật hoặc hiện có cho Firebase
  • Quy tắc cho cơ sở dữ liệu thời gian thực Firebase
  • Quy tắc lưu trữ đám mây cho Firebase
  • Quy tắc dành cho Cloud Firestore
  • Chỉ mục cho Cloud Firestore

Để triển khai dự án Firebase, hãy chạy lệnh sau từ thư mục dự án của bạn:

firebase deploy

Bạn có thể tùy ý thêm nhận xét cho mỗi lần triển khai của mình. Nhận xét này sẽ hiển thị cùng với thông tin triển khai khác trên trang Firebase Hosting của dự án của bạn. Ví dụ:

firebase deploy -m "Deploying the best new feature ever."

Khi bạn sử dụng lệnh firebase deploy , hãy lưu ý những điều sau:

  • Để triển khai tài nguyên từ thư mục dự án, thư mục dự án phải có tệp firebase.json . Tệp này được tạo tự động cho bạn bằng lệnh firebase init .

  • Theo mặc định, firebase deploy tạo bản phát hành cho tất cả tài nguyên có thể triển khai trong thư mục dự án của bạn. Để triển khai các dịch vụ hoặc tính năng cụ thể của Firebase, hãy sử dụng triển khai một phần .

Xung đột triển khai cho các quy tắc bảo mật

Đối với Cơ sở dữ liệu thời gian thực Firebase, Cloud Storage cho Firebase và Cloud Firestore, bạn có thể xác định các quy tắc bảo mật trong thư mục dự án cục bộ của mình hoặc trong bảng điều khiển Firebase .

Một tùy chọn khác để tránh xung đột khi triển khai là sử dụng triển khai một phần và chỉ xác định các quy tắc trong bảng điều khiển Firebase.

Hạn ngạch triển khai

Có thể (mặc dù không chắc) bạn có thể vượt quá hạn ngạch giới hạn tốc độ hoặc khối lượng hoạt động triển khai Firebase của mình. Ví dụ: khi triển khai số lượng chức năng rất lớn, bạn có thể nhận được thông báo lỗi HTTP 429 Quota . Để giải quyết những vấn đề như vậy, hãy thử sử dụng triển khai một phần .

Quay lại quá trình triển khai

Bạn có thể hoàn nguyên quá trình triển khai Dịch vụ lưu trữ Firebase từ trang Lưu trữ Firebase của dự án bằng cách chọn hành động Hoàn nguyên cho bản phát hành mong muốn.

Hiện không thể khôi phục các bản phát hành quy tắc bảo mật cho Cơ sở dữ liệu thời gian thực Firebase, Cloud Storage cho Firebase hoặc Cloud Firestore.

Triển khai các dịch vụ Firebase cụ thể

Nếu chỉ muốn triển khai các dịch vụ hoặc tính năng cụ thể của Firebase, bạn có thể sử dụng danh sách được phân tách bằng dấu phẩy trong cờ trên lệnh firebase deploy . Ví dụ: lệnh sau triển khai nội dung Firebase Hosting và các quy tắc bảo mật Cloud Storage.

firebase deploy --only hosting,storage

Bảng sau liệt kê các dịch vụ và tính năng có sẵn để triển khai một phần. Tên trong các cờ tương ứng với các khóa trong tệp cấu hình firebase.json của bạn.

Cú pháp cờ Dịch vụ hoặc tính năng được triển khai
--only hosting Nội dung lưu trữ Firebase
--only database Quy tắc cơ sở dữ liệu thời gian thực Firebase
--only storage Bộ nhớ đám mây cho các quy tắc của Firebase
--only firestore Các quy tắc chỉ mục của Cloud Firestore cho tất cả các cơ sở dữ liệu được định cấu hình
--only functions Chức năng đám mây cho Firebase (có thể có các phiên bản cụ thể hơn của cờ này )

Triển khai các chức năng cụ thể

Khi triển khai các chức năng, bạn có thể nhắm mục tiêu các chức năng cụ thể. Ví dụ:

firebase deploy --only functions:function1
firebase deploy --only functions:function1,functions:function2

Một tùy chọn khác là nhóm các hàm thành các nhóm xuất trong tệp /functions/index.js của bạn. Nhóm các hàm cho phép bạn triển khai nhiều hàm bằng một lệnh duy nhất.

Ví dụ: bạn có thể viết các hàm sau để xác định groupAgroupB :

var functions = require('firebase-functions');

exports.groupA = {
  function1: functions.https.onRequest(...),
  function2: functions.database.ref('\path').onWrite(...)
}
exports.groupB = require('./groupB');

Trong ví dụ này, một tệp functions/groupB.js riêng biệt chứa các hàm bổ sung xác định cụ thể các hàm trong groupB . Ví dụ:

var functions = require('firebase-functions');

exports.function3 = functions.storage.object().onChange(...);
exports.function4 = functions.analytics.event('in_app_purchase').onLog(...);

Trong ví dụ này, bạn có thể triển khai tất cả các hàm groupA bằng cách chạy lệnh sau từ thư mục dự án của mình:

firebase deploy --only functions:groupA

Hoặc bạn có thể nhắm mục tiêu một chức năng cụ thể trong một nhóm bằng cách chạy lệnh sau:

firebase deploy --only functions:groupA.function1,groupB.function4

Xóa chức năng

Firebase CLI hỗ trợ các lệnh và tùy chọn sau để xóa các chức năng đã triển khai trước đó:

  • Xóa tất cả các hàm khớp với tên được chỉ định trong tất cả các vùng:

    firebase functions:delete FUNCTION-1_NAME

  • Xóa một chức năng được chỉ định đang chạy trong vùng không mặc định:

    firebase functions:delete FUNCTION-1_NAME --region REGION_NAME

  • Xóa nhiều chức năng:

    firebase functions:delete FUNCTION-1_NAME FUNCTION-2_NAME

  • Xóa một nhóm chức năng được chỉ định:

    firebase functions:delete GROUP_NAME

  • Bỏ qua lời nhắc xác nhận:

    firebase functions:delete FUNCTION-1_NAME --force

Thiết lập các tác vụ theo kịch bản trước và sau khi triển khai

Bạn có thể kết nối các tập lệnh shell với lệnh firebase deploy để thực hiện các tác vụ triển khai trước hoặc triển khai sau. Ví dụ: tập lệnh triển khai trước có thể dịch mã TypeScript thành JavaScript và hook hậu triển khai có thể thông báo cho quản trị viên về nội dung trang web mới triển khai lên Firebase Hosting.

Để thiết lập hook predeploy hoặc postdeploy, hãy thêm tập lệnh bash vào tệp cấu hình firebase.json của bạn. Bạn có thể xác định các tập lệnh ngắn gọn trực tiếp trong tệp firebase.json hoặc bạn có thể tham chiếu các tệp khác có trong thư mục dự án của mình.

Ví dụ: tập lệnh sau đây là biểu thức firebase.json cho tác vụ hậu triển khai gửi thông báo Slack khi triển khai thành công lên Firebase Hosting.

"hosting": {
  // ...

  "postdeploy": "./messageSlack.sh 'Just deployed to Firebase Hosting'",
  "public": "public"
}

Tệp tập lệnh messageSlack.sh nằm trong thư mục dự án và trông như thế này:

curl -X POST -H 'Content-type: application/json' --data '{"text":"$1"}'
     \https://SLACK_WEBHOOK_URL

Bạn có thể thiết lập các hook predeploypostdeploy cho bất kỳ nội dung nào mà bạn có thể triển khai . Lưu ý rằng việc chạy firebase deploy sẽ kích hoạt tất cả các tác vụ predeploy và postdeploy được xác định trong tệp firebase.json của bạn. Để chỉ chạy những tác vụ được liên kết với dịch vụ Firebase cụ thể, hãy sử dụng lệnh triển khai một phần .

Cả hai hook predeploypostdeploy đều in các luồng đầu ra tiêu chuẩn và lỗi của tập lệnh tới thiết bị đầu cuối. Đối với các trường hợp thất bại, hãy lưu ý những điều sau:

  • Nếu hook predeploy không hoàn thành như mong đợi thì quá trình triển khai sẽ bị hủy.
  • Nếu việc triển khai không thành công vì bất kỳ lý do gì, các hook postdeploy sẽ không được kích hoạt.

Biến môi trường

Trong các tập lệnh chạy trong hook predeploy và postdeploy, có sẵn các biến môi trường sau:

  • $GCLOUD_PROJECT : ID dự án của dự án đang hoạt động
  • $PROJECT_DIR : Thư mục gốc chứa file firebase.json
  • $RESOURCE_DIR : (Chỉ dành cho tập lệnh hostingfunctions ) Vị trí của thư mục chứa tài nguyên Chức năng lưu trữ hoặc Đám mây sẽ được triển khai

Quản lý nhiều phiên bản Cơ sở dữ liệu thời gian thực

Một dự án Firebase có thể có nhiều phiên bản Cơ sở dữ liệu thời gian thực Firebase . Theo mặc định, các lệnh CLI tương tác với phiên bản cơ sở dữ liệu mặc định của bạn.

Tuy nhiên, bạn có thể tương tác với một phiên bản cơ sở dữ liệu không mặc định bằng cách sử dụng --instance DATABASE_NAME . Các lệnh sau hỗ trợ cờ --instance :

  • firebase database:get
  • firebase database:profile
  • firebase database:push
  • firebase database:remove
  • firebase database:set
  • firebase database:update

Tham chiếu lệnh

Lệnh quản trị CLI

Yêu cầu Sự miêu tả
giúp đỡ Hiển thị thông tin trợ giúp về CLI hoặc các lệnh cụ thể.
trong đó Liên kết và thiết lập dự án Firebase mới trong thư mục hiện tại. Lệnh này tạo tệp cấu hình firebase.json trong thư mục hiện tại.
đăng nhập Xác thực CLI với tài khoản Firebase của bạn. Yêu cầu quyền truy cập vào trình duyệt web.
Để đăng nhập vào CLI trong môi trường từ xa không cho phép truy cập localhost , hãy sử dụng --no-localhost cờ.
đăng nhập:ci Tạo mã thông báo xác thực để sử dụng trong môi trường không tương tác.
đăng xuất Đăng xuất CLI khỏi tài khoản Firebase của bạn.
mở Mở trình duyệt tới các tài nguyên dự án có liên quan.
dự án:danh sách Liệt kê tất cả các dự án Firebase mà bạn có quyền truy cập.
sử dụng Đặt dự án Firebase đang hoạt động cho CLI.
Quản lý bí danh dự án .

Lệnh quản lý dự án

Yêu cầu Sự miêu tả
Quản lý dự án Firebase
dự án:addfirebase Thêm tài nguyên Firebase vào dự án Google Cloud hiện có.
dự án: tạo Tạo dự án Google Cloud mới, sau đó thêm tài nguyên Firebase vào dự án mới.
dự án:danh sách Liệt kê tất cả các dự án Firebase mà bạn có quyền truy cập.
Quản lý ứng dụng Firebase (iOS, Android, Web)
ứng dụng: tạo Tạo Ứng dụng Firebase mới trong dự án đang hoạt động.
ứng dụng: danh sách Liệt kê các Ứng dụng Firebase đã đăng ký trong dự án đang hoạt động.
ứng dụng: sdkconfig In cấu hình dịch vụ Google của Ứng dụng Firebase.
thiết lập: web Không dùng nữa. Thay vào đó, hãy sử dụng apps:sdkconfig và chỉ định web làm đối số nền tảng.
In cấu hình dịch vụ Google của Ứng dụng web Firebase.
Quản lý băm chứng chỉ SHA (chỉ dành cho Android)
ứng dụng:android:sha:tạo \
FIREBASE_APP_ID SHA_HASH
Thêm hàm băm chứng chỉ SHA được chỉ định vào Ứng dụng Android Firebase được chỉ định.
ứng dụng:android:sha:xóa \
FIREBASE_APP_ID SHA_HASH
Xóa hàm băm chứng chỉ SHA được chỉ định khỏi Ứng dụng Android Firebase được chỉ định.
ứng dụng:android:sha:list \
FIREBASE_APP_ID
Liệt kê các hàm băm chứng chỉ SHA cho Ứng dụng Android Firebase được chỉ định.

Triển khai và phát triển địa phương

Các lệnh này cho phép bạn triển khai và tương tác với trang web Lưu trữ Firebase của mình.

Yêu cầu Sự miêu tả
triển khai Triển khai mã và nội dung từ thư mục dự án của bạn đến dự án đang hoạt động. Đối với Firebase Hosting, cần có tệp cấu hình firebase.json .
phục vụ Khởi động máy chủ web cục bộ với cấu hình Firebase Hosting của bạn. Đối với Firebase Hosting, cần có tệp cấu hình firebase.json .

Lệnh phân phối ứng dụng

Yêu cầu Sự miêu tả
phân phối ứng dụng:phân phối \
--app FIREBASE_APP_ID
Cung cấp bản dựng cho người thử nghiệm.
phân phối ứng dụng:người thử nghiệm:thêm Thêm người thử nghiệm vào dự án.
phân phối ứng dụng:người kiểm tra:xóa Loại bỏ người thử nghiệm khỏi dự án.

Lệnh xác thực (quản lý người dùng)

Yêu cầu Sự miêu tả
xác thực:xuất khẩu Xuất tài khoản người dùng của dự án đang hoạt động sang tệp JSON hoặc CSV. Để biết thêm chi tiết, hãy tham khảo trang auth:import và auth:export .
xác thực:nhập khẩu Nhập tài khoản người dùng từ tệp JSON hoặc CSV vào dự án đang hoạt động. Để biết thêm chi tiết, hãy tham khảo trang auth:import và auth:export .

Các lệnh của Cloud Firestore

Yêu cầu Sự miêu tả
firestore:địa điểm

Liệt kê các vị trí có sẵn cho cơ sở dữ liệu Cloud Firestore của bạn.

firestore:cơ sở dữ liệu:tạo DATABASE_ID

Tạo một phiên bản cơ sở dữ liệu ở chế độ gốc trong dự án Firebase của bạn.

Lệnh này có các cờ sau:

  • --location <tên vùng> để chỉ định vị trí triển khai cho cơ sở dữ liệu. Lưu ý rằng bạn có thể chạy firebase firestore:locations để liệt kê các vị trí có sẵn. Yêu cầu .
  • --delete-protection <deleteProtectionState> để cho phép hoặc ngăn chặn việc xóa cơ sở dữ liệu đã chỉ định. Các giá trị hợp lệ là ENABLED hoặc DISABLED . Mặc định là DISABLED .
  • --point-in-time-recovery <PITRState> để đặt xem có bật tính năng khôi phục tại thời điểm đó hay không. Các giá trị hợp lệ là ENABLED hoặc DISABLED . Mặc định là DISABLED . Không bắt buộc.
firestore:cơ sở dữ liệu:danh sách

Liệt kê cơ sở dữ liệu trong dự án Firebase của bạn.

firestore:cơ sở dữ liệu:lấy DATABASE_ID

Nhận cấu hình cơ sở dữ liệu cho cơ sở dữ liệu được chỉ định trong dự án Firebase của bạn.

firestore:cơ sở dữ liệu:cập nhật DATABASE_ID

Cập nhật cấu hình cơ sở dữ liệu của cơ sở dữ liệu được chỉ định trong dự án Firebase của bạn.

Cần có ít nhất một lá cờ. Lệnh này có các cờ sau:

  • --delete-protection <deleteProtectionState> để cho phép hoặc ngăn chặn việc xóa cơ sở dữ liệu đã chỉ định. Các giá trị hợp lệ là ENABLED hoặc DISABLED . Mặc định là DISABLED .
  • --point-in-time-recovery <PITRState> để đặt xem có bật tính năng khôi phục tại thời điểm đó hay không. Các giá trị hợp lệ là ENABLED hoặc DISABLED . Mặc định là DISABLED . Không bắt buộc.
firestore:cơ sở dữ liệu:xóa DATABASE_ID

Xóa cơ sở dữ liệu trong dự án Firebase của bạn.

firestore:chỉ mục

Liệt kê các chỉ mục cho cơ sở dữ liệu trong dự án Firebase của bạn.

Lệnh lấy cờ sau:

  • --database DATABASE_ID để chỉ định tên của cơ sở dữ liệu cần liệt kê các chỉ mục. Nếu không được cung cấp, các chỉ mục sẽ được liệt kê cho cơ sở dữ liệu mặc định.
firestore:xóa

Xóa tài liệu trong cơ sở dữ liệu của dự án đang hoạt động. Sử dụng CLI, bạn có thể xóa đệ quy tất cả tài liệu trong bộ sưu tập.

Lưu ý rằng việc xóa dữ liệu Cloud Firestore bằng CLI sẽ phát sinh chi phí đọc và xóa. Để biết thêm thông tin, hãy xem Tìm hiểu cách thanh toán trên Cloud Firestore .

Lệnh lấy cờ sau:

  • --database DATABASE_ID để chỉ định tên của cơ sở dữ liệu nơi tài liệu sẽ bị xóa. Nếu không được chỉ định, tài liệu sẽ bị xóa khỏi cơ sở dữ liệu mặc định. Không bắt buộc.

Chức năng đám mây cho các lệnh Firebase

Yêu cầu Sự miêu tả
chức năng:config:clone Sao chép môi trường của dự án khác vào dự án Firebase đang hoạt động.
chức năng:config:get Truy xuất các giá trị cấu hình hiện có của Chức năng đám mây của dự án đang hoạt động.
chức năng:config:set Lưu trữ các giá trị cấu hình thời gian chạy của Chức năng đám mây của dự án đang hoạt động.
chức năng:config:unset Xóa các giá trị khỏi cấu hình thời gian chạy của dự án đang hoạt động.
chức năng: nhật ký Đọc nhật ký từ các Chức năng đám mây được triển khai.

Để biết thêm thông tin, hãy tham khảo tài liệu cấu hình môi trường .

Các lệnh Crashlytics

Yêu cầu Sự miêu tả
Crashlytics:mappingfile:generateid \
--resource-file= PATH/TO/ANDROID_RESOURCE.XML
Tạo ID tệp ánh xạ duy nhất trong tệp tài nguyên Android (XML) được chỉ định.
Crashlytics:mappingfile:tải lên \
--app= FIREBASE_APP_ID \
--resource-file= PATH/TO/ANDROID_RESOURCE.XML \
PATH/TO/MAPPING_FILE.TXT
Tải tệp ánh xạ (TXT) tương thích với Proguard lên cho ứng dụng này và liên kết tệp đó với ID tệp ánh xạ được khai báo trong tệp tài nguyên Android (XML) được chỉ định.
Crashlytics:biểu tượng:tải lên \
--app= FIREBASE_APP_ID \
PATH/TO/SYMBOLS
Tạo tệp biểu tượng tương thích với Crashlytics cho thư viện gốc gặp sự cố trên Android và tải tệp đó lên máy chủ Firebase.

Các lệnh mở rộng

Yêu cầu Sự miêu tả
máy lẻ Hiển thị thông tin về cách sử dụng các lệnh Tiện ích mở rộng Firebase.
Liệt kê các phiên bản tiện ích mở rộng được cài đặt trong dự án đang hoạt động.
ext:cấu hình \
EXTENSION_INSTANCE_ID
Định cấu hình lại các giá trị tham số của phiên bản tiện ích mở rộng trong bảng kê khai tiện ích mở rộng của bạn.
ext:thông tin \
PUBLISHER_ID/EXTENSION_ID
In thông tin chi tiết về tiện ích mở rộng.
ext:cài đặt \
PUBLISHER_ID/EXTENSION_ID
Thêm phiên bản mới của tiện ích mở rộng vào bảng kê khai tiện ích mở rộng của bạn.
máy lẻ: danh sách Liệt kê tất cả các phiên bản tiện ích mở rộng được cài đặt trong dự án Firebase.
In ID phiên bản cho mỗi tiện ích mở rộng.
ext:gỡ cài đặt \
EXTENSION_INSTANCE_ID
Xóa phiên bản tiện ích mở rộng khỏi bảng kê khai tiện ích mở rộng của bạn.
ext:cập nhật \
EXTENSION_INSTANCE_ID
Cập nhật phiên bản tiện ích mở rộng lên phiên bản mới nhất trong bảng kê khai tiện ích mở rộng của bạn.
ext:xuất khẩu Xuất tất cả các phiên bản tiện ích mở rộng đã cài đặt từ dự án của bạn sang bảng kê khai tiện ích mở rộng của bạn.

Lệnh của nhà xuất bản tiện ích mở rộng

Yêu cầu Sự miêu tả
máy lẻ:dev:init Khởi tạo cơ sở mã khung cho tiện ích mở rộng mới trong thư mục hiện tại.
ext:dev:list \
PUBLISHER_ID
In danh sách tất cả tiện ích mở rộng được nhà xuất bản tải lên.
máy lẻ:dev:đăng ký Đăng ký dự án Firebase làm dự án nhà xuất bản tiện ích mở rộng .
ext:dev:không dùng nữa \
PUBLISHER_ID/EXTENSION_ID \
VERSION_PREDICATE
Không dùng các phiên bản tiện ích mở rộng phù hợp với vị từ phiên bản.
Vị từ phiên bản có thể là một phiên bản duy nhất (chẳng hạn như 1.0.0 ) hoặc một loạt phiên bản (chẳng hạn như >1.0.0 ).
Nếu không có biến vị ngữ phiên bản nào được cung cấp thì tất cả các phiên bản của tiện ích mở rộng đó sẽ không được dùng nữa.
ext:dev:không được chấp nhận \
PUBLISHER_ID/EXTENSION_ID \
VERSION_PREDICATE
Không dùng nữa các phiên bản tiện ích mở rộng phù hợp với vị từ phiên bản.
Vị từ phiên bản có thể là một phiên bản duy nhất (chẳng hạn như 1.0.0 ) hoặc một loạt phiên bản (chẳng hạn như >1.0.0 ).
Nếu không có biến vị ngữ phiên bản nào được cung cấp thì tất cả các phiên bản của tiện ích mở rộng đó sẽ không được chấp nhận.
ext:dev:tải lên \
PUBLISHER_ID/EXTENSION_ID
Tải lên phiên bản mới của tiện ích mở rộng.
ext:dev:usage \
PUBLISHER_ID
Hiển thị số lượt cài đặt và số liệu sử dụng cho các tiện ích mở rộng do nhà xuất bản tải lên.

Lệnh lưu trữ

Yêu cầu Sự miêu tả
lưu trữ: vô hiệu hóa

Dừng phân phát lưu lượng truy cập Firebase Hosting cho dự án Firebase đang hoạt động.

URL lưu trữ của dự án của bạn sẽ hiển thị thông báo "Không tìm thấy trang web" sau khi chạy lệnh này.

Quản lý các trang web lưu trữ
lưu trữ firebase:sites:tạo \
SITE_ID

Tạo một trang web Lưu trữ mới trong dự án Firebase đang hoạt động bằng cách sử dụng SITE_ID được chỉ định

(Tùy chọn) Chỉ định Ứng dụng web Firebase hiện có để liên kết với trang web mới bằng cách chuyển cờ sau: --app FIREBASE_APP_ID

lưu trữ căn cứ hỏa lực: trang web: xóa \
SITE_ID

Xóa trang web lưu trữ được chỉ định

CLI hiển thị lời nhắc xác nhận trước khi xóa trang web.

(Tùy chọn) Bỏ qua lời nhắc xác nhận bằng cách chuyển các cờ sau: -f hoặc --force

lưu trữ firebase:sites:get \
SITE_ID

Truy xuất thông tin về trang web Lưu trữ được chỉ định

lưu trữ firebase: trang web: danh sách

Liệt kê tất cả các trang web Lưu trữ cho dự án Firebase đang hoạt động

Quản lý các kênh xem trước
lưu trữ firebase: kênh: tạo \
CHANNEL_ID

Tạo kênh xem trước mới trong trang web Lưu trữ mặc định bằng CHANNEL_ID được chỉ định

Lệnh này không triển khai tới kênh.

lưu trữ firebase: kênh: xóa \
CHANNEL_ID

Xóa kênh xem trước đã chỉ định

Bạn không thể xóa kênh trực tiếp của trang web.

lưu trữ firebase: kênh: triển khai \
CHANNEL_ID

Triển khai nội dung và cấu hình Lưu trữ của bạn tới kênh xem trước được chỉ định

Nếu kênh xem trước chưa tồn tại, lệnh này sẽ tạo kênh trong trang Lưu trữ mặc định trước khi triển khai lên kênh.

lưu trữ firebase: kênh: danh sách Liệt kê tất cả các kênh (bao gồm cả kênh "trực tiếp") trong trang web Lưu trữ mặc định
lưu trữ firebase: kênh: mở \
CHANNEL_ID
Mở trình duyệt tới URL của kênh được chỉ định hoặc trả về URL nếu không thể mở trong trình duyệt
Nhân bản phiên bản
lưu trữ firebase: bản sao \
SOURCE_SITE_ID : SOURCE_CHANNEL_ID \
TARGET_SITE_ID : TARGET_CHANNEL_ID

Bản sao phiên bản được triển khai gần đây nhất trên kênh "nguồn" được chỉ định cho kênh "mục tiêu" được chỉ định

Lệnh này cũng triển khai đến kênh "Target" được chỉ định. Nếu kênh "Target" chưa tồn tại, thì lệnh này sẽ tạo một kênh xem trước mới trong trang web lưu trữ "Target" trước khi triển khai đến kênh.

Lưu trữ Firebase: Clone \
SOURCE_SITE_ID :@ VERSION_ID \
TARGET_SITE_ID : TARGET_CHANNEL_ID

Bản sao phiên bản được chỉ định cho kênh "Target" được chỉ định

Lệnh này cũng triển khai đến kênh "Target" được chỉ định. Nếu kênh "Target" chưa tồn tại, thì lệnh này sẽ tạo một kênh xem trước mới trong trang web lưu trữ "Target" trước khi triển khai đến kênh.

Bạn có thể tìm thấy VERSION_ID trong bảng điều khiển lưu trữ của bảng điều khiển Firebase.

Lệnh cơ sở dữ liệu thời gian thực

Lưu ý rằng bạn có thể tạo phiên bản cơ sở dữ liệu thời gian thực mặc định ban đầu của mình trong bảng điều khiển Firebase hoặc bằng cách sử dụng dòng công việc khởi đầu firebase init chung hoặc luồng firebase init database cụ thể.

Khi các phiên bản được tạo, bạn có thể quản lý chúng như được thảo luận trong quản lý nhiều trường hợp cơ sở dữ liệu thời gian thực .

Yêu cầu Sự miêu tả
Cơ sở dữ liệu: Nhận Lấy dữ liệu từ cơ sở dữ liệu của dự án hoạt động và hiển thị nó dưới dạng JSON. Hỗ trợ truy vấn trên dữ liệu được lập chỉ mục.
Cơ sở dữ liệu: Các trường hợp: Tạo Tạo một thể hiện cơ sở dữ liệu với một tên phiên bản được chỉ định. Chấp nhận tùy chọn --location để tạo cơ sở dữ liệu trong một khu vực được chỉ định. Để biết tên khu vực để sử dụng với tùy chọn này, hãy xem các vị trí chọn cho dự án của bạn . Nếu không có thể hiện cơ sở dữ liệu nào tồn tại cho dự án hiện tại, bạn sẽ được nhắc chạy luồng firebase init để tạo một thể hiện.
Cơ sở dữ liệu: Các trường hợp: Danh sách Liệt kê tất cả các trường hợp cơ sở dữ liệu cho dự án này. Chấp nhận tùy chọn --location cho cơ sở dữ liệu liệt kê trong một khu vực được chỉ định. Để biết tên khu vực để sử dụng với tùy chọn này, hãy xem các vị trí chọn cho dự án của bạn .
Cơ sở dữ liệu: Hồ sơ Xây dựng một hồ sơ hoạt động trên cơ sở dữ liệu của dự án đang hoạt động. Để biết thêm chi tiết, hãy tham khảo các loại hoạt động cơ sở dữ liệu thời gian thực .
Cơ sở dữ liệu: Đẩy Đẩy dữ liệu mới vào danh sách tại một vị trí được chỉ định trong cơ sở dữ liệu của dự án đang hoạt động. Lấy đầu vào từ một tệp, stdin hoặc đối số dòng lệnh.
Cơ sở dữ liệu: Xóa Xóa tất cả dữ liệu tại một vị trí được chỉ định trong cơ sở dữ liệu của dự án đang hoạt động.
Cơ sở dữ liệu: Đặt Thay thế tất cả dữ liệu tại một vị trí được chỉ định trong cơ sở dữ liệu của dự án hoạt động. Lấy đầu vào từ một tệp, stdin hoặc đối số dòng lệnh.
Cơ sở dữ liệu: Cập nhật Thực hiện cập nhật một phần tại một vị trí được chỉ định trong cơ sở dữ liệu của dự án đang hoạt động. Lấy đầu vào từ một tệp, stdin hoặc đối số dòng lệnh.

Các lệnh cấu hình từ xa

Yêu cầu Sự miêu tả
RemoteConfig: Phiên bản: Danh sách \
-Limit NUMBER_OF_VERSIONS
Liệt kê mười phiên bản gần đây nhất của mẫu. Chỉ định 0 để trả về tất cả các phiên bản hiện có hoặc tùy chọn vượt qua tùy chọn --limit để giới hạn số lượng phiên bản được trả về.
RemoteConfig: Nhận \
--V, phiên bản_number VERSION_NUMBER
--O, FILENAME đầu ra
Nhận mẫu theo phiên bản (mặc định cho phiên bản mới nhất) và xuất ra các nhóm tham số, tham số và tên điều kiện và phiên bản vào một bảng. Tùy chọn, bạn có thể viết đầu ra vào một tệp được chỉ định với -o, FILENAME .
RemoteConfig: rollback \
--V, phiên bản_number VERSION_NUMBER
--lực lượng
Rolls trở lại mẫu cấu hình từ xa thành một số phiên bản trước được chỉ định hoặc mặc định cho phiên bản trước ngay lập tức (phiên bản hiện tại -1). Trừ khi --force được thông qua, nhắc nhở Y/N trước khi tiếp tục quay lại.