Sử dụng TypeScript cho Chức năng đám mây

Đối với các nhà phát triển muốn viết hàm trong TypeScript, Hàm đám mây cung cấp 2 loại hỗ trợ:

  • Tạo và định cấu hình các dự án TypeScript để chuyển đổi tự động khi khởi chạy (firebase init functions).
  • Chuyển đổi nguồn TypeScript hiện có sang JavaScript tại thời điểm triển khai thông qua hook trước khi triển khai.

Làm theo hướng dẫn trong hướng dẫn này, bạn có thể di chuyển dự án JavaScript hiện có sang TypeScript và tiếp tục triển khai các hàm bằng cách sử dụng móc triển khai trước để chuyển đổi mã nguồn. So với JavaScript vanilla khi viết hàm, TypeScript mang lại nhiều lợi ích hơn:

  • TypeScript hỗ trợ các tính năng JavaScript mới nhất như không đồng bộ/chờ, đơn giản hoá việc quản lý lời hứa
  • Công cụ tìm lỗi mã nguồn của Chức năng đám mây nêu bật các vấn đề thường gặp trong khi bạn lập trình
  • An toàn về kiểu giúp bạn tránh lỗi thời gian chạy trong các hàm được triển khai

Nếu bạn mới sử dụng TypeScript, hãy xem phần TypeScript trong 5 phút.

Khởi chạy dự án Cloud Functions mới bằng TypeScript

Chạy firebase init functions trong một thư mục mới. Công cụ này cung cấp cho bạn các lựa chọn để xây dựng dự án bằng JavaScript hoặc TypeScript. Chọn TypeScript để xuất cấu trúc dự án sau đây:

myproject
 +- functions/     # Directory containing all your functions code
      |
      +- package.json  # npm package file describing your Cloud Functions code
      |
      +- tsconfig.json
      |
      +- .eslintrc.js # Optional file if you enabled ESLint
      +- tsconfig.dev.json # Optional file that references .eslintrc.js
      |
      +- src/     # Directory containing TypeScript source
      |   |
      |   +- index.ts  # main source file for your Cloud Functions code
      |
      +- lib/
          |
          +- index.js  # Built/transpiled JavaScript code
          |
          +- index.js.map # Source map for debugging

Sau khi khởi chạy xong, hãy huỷ nhận xét về mẫu trong index.ts và chạy npm run serve để xem hàm "Hello World" hoạt động.

Sử dụng dự án TypeScript hiện có

Nếu đã có dự án TypeScript, bạn có thể thêm một móc triển khai trước để đảm bảo dự án của bạn được dịch mã mỗi khi bạn triển khai mã lên Cloud Functions cho Firebase. Bạn sẽ cần một tệp tsconfig.json được định dạng đúng cách và một dự án Firebase, đồng thời cần thực hiện những sửa đổi sau đây đối với cấu hình Firebase của mình:

  1. Chỉnh sửa package.json để thêm tập lệnh bash nhằm tạo dự án TypeScript. Ví dụ:

     {
       "name": "functions",
       "scripts": {
         "build": "npm run lint && tsc"
       }
     ...
    
  2. Chỉnh sửa firebase.json để thêm hook trước khi triển khai nhằm chạy tập lệnh bản dựng. Ví dụ:

     {
       "functions": {
         "predeploy": "npm --prefix functions run build",
       }
     }
    

Với cấu hình này, lệnh firebase deploy --only functions sẽ tạo mã TypeScript và triển khai mã đó dưới dạng các hàm.

Di chuyển dự án JavaScript hiện có sang TypeScript

Nếu có một dự án Cloud Functions do bạn khởi tạo và phát triển trong JavaScript, thì bạn có thể di chuyển dự án đó sang TypeScript. Bạn nên tạo một điểm kiểm tra git hoặc bản sao lưu khác trước khi bắt đầu.

Cách di chuyển dự án JavaScript Cloud Functions hiện có:

  1. Tạo điểm kiểm tra git và lưu bản sao của các tệp nguồn JavaScript hiện có.
  2. Trong thư mục dự án, hãy chạy firebase init functions và chọn TypeScript khi được nhắc nhập ngôn ngữ để viết hàm.
  3. Khi được nhắc xem có ghi đè tệp package.json hiện có hay không, hãy chọn Không trừ phi bạn chắc chắn không muốn giữ tệp hiện tại.
  4. Xoá index.ts trong thư mục functions/src, thay thế bằng mã nguồn hiện có.
  5. Trong tệp tsconfig.json được tạo khi khởi chạy, hãy đặt các tuỳ chọn trình biên dịch để cho phép JavaScript: "allowJs": true.
  6. Sao chép tệp package.json đã lưu vào thư mục functions rồi chỉnh sửa để đặt "main" thành "lib/index.js".
  7. Ngoài ra, trong package.json, hãy thêm một tập lệnh bản dựng cho TypeScript như sau:

     {
       "name": "functions",
       "scripts": {
         "build": "npm run lint && tsc"
       }
     ...
    
  8. Thêm "typescript" làm phần phụ thuộc cho nhà phát triển bằng cách chạy npm install --save-dev typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser.

  9. Đối với tất cả phần phụ thuộc, hãy chạy npm install --save @types/<dependency>.

  10. Viết lại mã nguồn từ .js thành .ts nếu muốn.

Mô phỏng các hàm TypeScript

Để kiểm thử cục bộ các hàm TypeScript, bạn có thể sử dụng các công cụ mô phỏng được mô tả trong phần Chạy hàm trên máy cục bộ. Bạn phải biên dịch mã trước khi sử dụng các công cụ này. Vì vậy, hãy nhớ chạy npm run build bên trong thư mục hàm trước khi chạy firebase emulators:start hoặc firebase functions:shell. Ngoài ra, bạn có thể chạy npm run serve hoặc npm run shell dưới dạng lối tắt. Các lệnh này đều chạy bản dựng và phân phát/khởi động shell hàm.

Nhật ký hàm cho các dự án TypeScript

Trong suốt firebase deploy, index.ts của dự án sẽ được chuyển đổi thành index.js, nghĩa là nhật ký Hàm đám mây sẽ cho ra số dòng từ tệp index.js chứ không phải mã bạn đã viết. Để giúp bạn dễ dàng tìm thấy các đường dẫn và số dòng tương ứng trong index.ts, firebase deploy sẽ tạo functions/lib/index.js.map. Bạn có thể sử dụng sơ đồ nguồn này trong IDE ưa thích hoặc thông qua một mô-đun nút.