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 模塊。
來自 Artifact Registry 的私有模塊
Artifact Registry Node.js 包存儲庫可以為您的函數託管私有模塊。部署到 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
來自其他存儲庫的私有模塊
npm 文檔解釋瞭如何創建自定義只讀訪問令牌。我們不鼓勵使用在主目錄中創建的.npmrc
文件,因為它包含讀寫令牌。部署期間不需要寫入權限,但可能會帶來安全風險。
如果您不使用私有存儲庫,請不要包含.npmrc
文件,因為它會增加函數的部署時間。
文件格式
如果您使用.npmrc
文件來設置自定義身份驗證令牌,它應該包含如下所示的行。將<YOUR_AUTH_TOKEN>
替換為您的 NPM 提供的身份驗證令牌。
//registry.npmjs.org/:_authToken=<YOUR_AUTH_TOKEN>