Google致力於提高黑人社區的種族平等。 怎麼看。
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

將TypeScript用於雲功能

對於喜歡使用TypeScript編寫函數的開發人員,Cloud Functions提供了兩種類型的支持:

  • 創建並配置TypeScript項目,以便在初始化時自動編譯(firebase初始化firebase init functions )。
  • 通過部署前掛鉤將現有TypeScript源轉換為JavaScript。

按照本指南中的說明,您可以將現有的JavaScript項目遷移到TypeScript,並繼續使用預部署鉤子來部署源代碼來部署功能。在編寫函數時,TypeScript與普通JavaScript相比具有許多優點:

  • TypeScript支持最新的JavaScript功能(例如異步/等待),從而簡化了承諾管理
  • 在編寫代碼時,Cloud Functions linter會突出顯示常見問題
  • 類型安全性可幫助您避免已部署函數中的運行時錯誤

有關以TypeScript編寫的Cloud Functions的工作示例,請參閱我們的GitHub存儲庫中的typescript-getting-started 。如果您不熟悉TypeScript,請在5分鐘內查看TypeScript

使用TypeScript初始化新的Cloud Functions項目

在新目錄中運行firebase init 。該工具為您提供了使用JavaScript或TypeScript構建項目的選項。選擇TypeScript以輸出以下項目結構:

 myproject
 +- functions/     # Directory containing all your functions code
      |
      +- package.json  # npm package file describing your Cloud Functions code
      |
      +- tsconfig.json
      |
      +- tslint.json # Optional file
      |
      +- 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
 

使用現有的TypeScript項目

如果您有一個現有的TypeScript項目,則可以添加一個預部署鉤子,以確保每次將代碼部署到Cloud Functions for Firebase時都可以編譯您的項目。您將需要一個格式正確的tsconfig.json文件和一個Firebase項目,並且需要對Firebase配置進行以下修改:

  1. 編輯package.json以添加一個bash腳本來構建您的TypeScript項目。例如:

      {
       "name": "functions",
       "scripts": {
         "build": "./node_modules/.bin/tslint -p tslint.json && ./node_modules/.bin/tsc"
       }
     ...
     
  2. 編輯firebase.json以添加一個預部署鉤子以運行構建腳本。例如:

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

使用此配置, firebase deploy --only functions命令將構建您的TypeScript代碼並將其部署為函數。

將現有的JavaScript項目遷移到TypeScript

如果您有使用JavaScript初始化和開發的現有Cloud Functions項目,則可以將其遷移到TypeScript。強烈建議您在開始之前創建git檢查點或其他備份。

要遷移現有的JavaScript Cloud Functions項目:

  1. 創建一個git檢查點並保存現有JavaScript源文件的副本。
  2. 在項目目錄中,運行firebase init functions並在提示您輸入用於編寫函數的語言時選擇TypeScript
  3. 當提示您是否覆蓋現有的package.json文件時,請選擇“ 否”,除非您確定不想保留現有文件。
  4. 刪除目錄functions/src中的index.ts ,將其替換為現有的源代碼。
  5. 在初始化時創建的tsconfig.json文件中,將編譯器選項設置為允許JavaScript: "allowJs": "true"
  6. 將保存的package.json文件複製到functions目錄,並對其進行編輯以將"main"設置為"lib/index.js"
  7. 同樣在package.json ,為TypeScript添加一個構建腳本,如下所示:

      {
       "name": "functions",
       "scripts": {
         "build": "./node_modules/.bin/tslint --project tsconfig.json && ./node_modules/.bin/tsc"
       }
     ...
     
  8. 通過運行npm install --save --only=dev tslint typescript "typescript"添加為dev依賴npm install --save --only=dev tslint typescript

  9. 對於所有依賴項,運行npm install --save @types/<dependency>

  10. 根據需要將源代碼從.js重寫為.ts。

模擬TypeScript函數

要在本地測試TypeScript函數,可以使用在本地運行函數中描述的仿真工具。在使用這些工具之前編譯代碼很重要,因此請確保在運行firebase emulators:startfirebase functions:shell之前在功能目錄中運行npm run build 。或者,將npm run servenpm run shell作為快捷方式npm run shell ;這些命令都運行構建並提供/啟動功能外殼。

TypeScript項目的功能日誌

index.ts firebase deploy期間,您項目的index.ts被轉換為index.js ,這意味著Cloud Functions日誌將輸出index.js文件中的行號,而不是您編寫的代碼。為了使您更輕鬆地在index.ts找到相應的路徑和行號, index.ts firebase deploy創建了functions/lib/index.js.map 。您可以在首選的IDE中或通過節點模塊使用此源映射。