Catch up on highlights from Firebase at Google I/O 2023. Learn more

處理依賴關係

允許函數使用外部 Node.js 模塊以及本地數據。 Node.js 中的依賴項使用npm進行管理,並在名為package.json元數據文件中表示。 Cloud Functions Node.js 運行時通常支持使用npmyarn安裝。

要為您的函數指定依賴項,請將其添加到您的package.json文件中。

在此示例中,依賴項列在package.json文件中:

{
  "dependencies": {
    "escape-html": "^1.0.3"
  }
}

然後在函數中導入依賴項:

JavaScript

const escapeHtml = require('escape-html');

// Return a greeting with the input HTML-escaped.
exports.hello = functions.https.onRequest((req, res) => {
  res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
});

打字稿

import * as escapeHtml from 'escape-html';

// Return a greeting with the input HTML-escaped.
export let hello = functions.https.onRequest((req, res) => {
  res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
}

包括本地 Node.js 模塊

您還可以將本地 Node.js 模塊作為函數的一部分。您可以通過使用file: prefixpackage.json中聲明您的模塊來實現這一點。在以下示例中, mymodule指的是您的模塊名稱, mymoduledir是包含您的模塊的目錄:

{
  "dependencies": {
    "mymodule": "file:mymoduledir"
  }
}

此本地模塊的代碼應存儲在函數根目錄中node_modules文件夾以外的其他位置。

TypeScript 的附加步驟

當您使用具有類型信息的庫時,TypeScript 對您的幫助最大。這讓 TypeScript 可以捕獲語法錯誤,並讓編輯器為您提供更好的自動完成建議。一些庫,如firebase-adminfirebase-functions ,附帶了 TypeScript 定義。

許多庫不提供自己的 TypeScript 定義。 DefinitelyTyped項目為最流行的節點庫提供社區維護的定義。 DefinitelyTyped 在相同的 NPM 包名稱下發布這些定義,但在“@types”組織內。例如,您可以使用以下命令安裝uuid庫的類型信息:

npm install @types/uuid

隨著您對 TypeScript 越來越熟悉,您可能會發現自己結合了這兩種安裝:

npm install uuid @types/uuid

類型依賴性應該與庫依賴性相同。例如,您不應將uuid保存為普通依賴項, @types/uuid保存為開發依賴項或對等依賴項。

加載 Node.js 模塊

使用 Node.js require()函數加載您已安裝的任何 Node.js 模塊。您還可以使用require()函數導入與函數一起部署的本地文件。

如果您在 TypeScript 中編寫函數,請以相同的方式使用import語句來加載您已安裝的任何 Node.js 模塊。

使用私有模塊

您可以通過在函數目錄中的.npmrc文件中提供用於使用註冊表進行身份驗證的設置來使用私有 npm 模塊。如果您使用 Yarn v2 或更高版本作為包管理器,則此文件名為.yarnrc.yml

來自 Artifact Registry 的私有模塊

Artifact Registry Node.js 包存儲庫可以為您的函數託管私有模塊。當您部署 Google Cloud Functions 函數時,構建過程會自動為Cloud Build 服務帳戶生成 Artifact Registry 憑據。您只需在.npmrc中列出 Artifact Registry 存儲庫,而無需生成額外的憑據。例如:

@SCOPE:registry=https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
//REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME:always-auth=true

這種方法也適用於 Yarn v1 包管理器。如果您使用的是 Yarn v2 或更高版本,則只需在.yarnrc.yml中列出 Artifact Registry 存儲庫,而無需其他憑據。例如:

npmScopes:
  SCOPE:
    npmRegistryServer: https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
    npmAlwaysAuth: true

來自其他存儲庫的私有模塊

npm 文檔解釋瞭如何創建自定義只讀訪問令牌。我們不鼓勵使用在主目錄中創建的.npmrc文件,因為它包含讀寫令牌。部署期間不需要寫入權限,但可能會帶來安全風險。

如果您不使用私有存儲庫,請不要包含.npmrc文件,因為它會增加函數的部署時間。

文件格式

如果您使用.npmrc文件來設置自定義身份驗證令牌,它應該包含如下所示的行。

//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN

代替:

  • REGISTRY_DOMAIN :您的私有 npm 註冊表的域名。如果您的存儲庫由npmjs.org託管,請將此字段設置為registry.npmjs.org
  • AUTH_TOKEN :您的 npm 註冊表的授權令牌。這可以是令牌的文字文本值或文本字符串${NPM_TOKEN}npm將其替換為環境中的實際令牌值。

    您可以使用gcloud functions deploy命令--set-build-env-vars參數設置$NPM_TOKEN環境變量。有關 NPM 身份驗證令牌的更多詳細信息,請參閱有關私有模塊的 NPM 教程