Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

處理依賴

允許函數使用外部 Node.js 模塊以及本地數據。在Node.js的依賴性與管理NPM和所謂的元數據文件中表達package.json 。雲功能的Node.js運行時通常支持使用安裝NPM

要指定你的函數的依賴,將其添加到您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 模塊作為函數的一部分。您可以通過聲明你的模塊中實現這一目標package.json使用file:前綴。在下面的例子中, mymodule是指你的模塊名稱和mymoduledir是包含你的模塊目錄:

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

這個本地模塊的代碼應該存放的地方以外的node_modules你的函數的根目錄文件夾內。

TypeScript 的附加步驟

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

許多庫不提供自己的 TypeScript 定義。該DefinitelyTyped項目提供了最流行的節點庫社區維護的定義。 FreedomTyped 以相同的 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的模塊中,你已經安裝了。

使用私有模塊

為了使用一個私人NPM模塊,您必須提供在故宮登記證書(身份驗證令牌) .npmrc位於函數的目錄文件。在NPM文檔介紹了如何創建自定義的只讀訪問令牌。我們不鼓勵使用.npmrc在主目錄中創建的文件,因為它包含讀寫令牌。部署期間不需要寫入權限,可能會帶來安全風險。

不包括.npmrc如果你不使用私有倉庫,因為它可以增加你的功能部署時間的文件。

文件格式

如果您使用的是.npmrc文件設置自定義身份驗證令牌,它應該包括如下所示的線。替換<YOUR_AUTH_TOKEN>與您的NPM提供的身份驗證令牌。

//registry.npmjs.org/:_authToken=<YOUR_AUTH_TOKEN>