Catch up on highlights from Firebase at Google I/O 2023. Learn more

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

Функция может использовать внешние модули 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 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 в каталоге функции. Если вы используете Yarn версии 2 или выше в качестве менеджера пакетов, этот файл называется .yarnrc.yml .

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

Репозиторий пакетов Artifact Registry Node.js может содержать частные модули для вашей функции. При развертывании функции 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 по приватным модулям .