Обработка зависимостей

Функция может использовать внешние модули 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 как часть своей функции. Вы можете добиться этого, объявив свой модуль в package.json , используя file: префикс . В следующем примере 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() для импорта локальных файлов, которые вы развертываете вместе с вашей функцией.

Если вы пишете функции на TypeScript, используйте оператор import таким же образом для загрузки любого установленного вами модуля Node.js.

Использование приватных модулей

Вы можете использовать частный модуль npm , указав параметры аутентификации в реестре в файле .npmrc в каталоге функции.

Приватные модули из Artifact Registry

Репозиторий пакетов Artifact Registry Node.js может содержать частные модули для вашей функции. При развертывании в Cloud Functions процесс сборки автоматически генерирует учетные данные Artifact Registry для учетной записи службы Cloud Build . Вам нужно только указать репозиторий Artifact Registry в вашем .npmrc без создания дополнительных учетных данных. Например:

@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>