Функция может использовать как внешние модули Node.js, так и локальные данные. Зависимости в Node.js управляются с помощью npm и указываются в файле метаданных package.json . Среды выполнения Cloud Functions Node.js поддерживают установку с помощью npm , yarn или pnpm .
Чтобы указать зависимость для вашей функции, добавьте её в файл package.json .
В этом примере зависимость указана в файле package.json :
{ "dependencies": { "escape-html": "^1.0.3" } }
Затем зависимость импортируется в функцию:
JavaScript
const onRequest = require("firebase-functions/https");
const escapeHtml = require("escape-html");
// Return a greeting with the input HTML-escaped.
exports.hello = onRequest((req, res) => {
res.send(Hello ${escapeHtml(req.query.name || req.body.name || "World")}!`);
});
Машинопись
import { onRequest } from "firebase-functions/https";
import * as escapeHtml from "escape-html";
// Return a greeting with the input HTML-escaped.
export let hello = 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 предоставляет поддерживаемые сообществом определения для наиболее популярных библиотек Node.js. DefinitelyTyped публикует эти определения под тем же именем пакета NPM, но внутри организации "@types". Например, вы можете установить информацию о типах для библиотеки uuid следующим образом:
npm install @types/uuid
По мере того, как вы будете лучше осваивать TypeScript, вы можете обнаружить, что вам потребуется объединить обе установки:
npm install uuid @types/uuid
Типовые зависимости должны быть того же типа, что и зависимости библиотек. Например, не следует сохранять uuid как обычную зависимость, а @types/uuid как зависимость для разработки или одноранговую зависимость.
Загрузка модулей Node.js
Используйте функцию require() в Node.js для загрузки любого установленного модуля Node.js. Вы также можете использовать функцию require() для импорта локальных файлов, которые вы развертываете вместе с вашей функцией.
Если вы пишете функции на TypeScript, используйте оператор import аналогично для загрузки любого установленного вами модуля Node.js.
Использование приватных модулей
Вы можете использовать приватный модуль npm , указав параметры аутентификации в реестре в файле .npmrc в каталоге функции. Если вы используете Yarn версии 2 или выше в качестве менеджера пакетов, этот файл называется .yarnrc.yml .
Приватные модули из Реестра артефактов
Репозиторий пакетов Node.js в Artifact Registry может содержать частные модули для вашей функции. При развертывании функции Google 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
Этот подход также работает для менеджера пакетов Yarn v1. Если вы используете Yarn v2 или более позднюю версию, вам нужно всего лишь указать репозиторий Artifact Registry в файле .yarnrc.yml без дополнительных учетных данных. Например:
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заменяет фактическим значением токена из окружения.Вы можете установить переменную среды
$NPM_TOKENс помощью аргумента--set-build-env-varsкомандыgcloud functions deploy. Более подробную информацию о токене аутентификации NPM см. в руководстве по NPM для частных модулей .