允許函數使用外部 Node.js 模塊以及本地數據。 Node.js 中的依賴項使用npm進行管理,並在名為package.json
元數據文件中表示。 Cloud Functions Node.js 運行時通常支持使用npm或yarn安裝。
要為您的函數指定依賴項,請將其添加到您的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:
prefix在package.json
中聲明您的模塊來實現這一點。在以下示例中, mymodule
指的是您的模塊名稱, mymoduledir
是包含您的模塊的目錄:
{ "dependencies": { "mymodule": "file:mymoduledir" } }
此本地模塊的代碼應存儲在函數根目錄中node_modules
文件夾以外的其他位置。
TypeScript 的附加步驟
當您使用具有類型信息的庫時,TypeScript 對您的幫助最大。這讓 TypeScript 可以捕獲語法錯誤,並讓編輯器為您提供更好的自動完成建議。一些庫,如firebase-admin
和firebase-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()
函數導入與函數一起部署的本地文件。
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 教程。