Функции разрешено использовать внешние модули 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:
prefix . В следующем примере 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.Использование частных модулей
Вы можете использовать частный модуль npm , указав параметры аутентификации в реестре в файле .npmrc
в каталоге функции. Если вы используете Yarn v2 или более позднюю версию в качестве менеджера пакетов, этот файл называется .yarnrc.yml
.
Частные модули из реестра артефактов
Репозиторий пакетов Artifact Registry Node.js может содержать частные модули для вашей функции. Когда вы развертываете функцию Google Cloud Functions, процесс сборки автоматически генерирует учетные данные реестра артефактов для учетной записи службы Cloud Build . Вам нужно только указать репозиторий реестра артефактов в вашем .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 или более позднюю версию, вам нужно только указать репозиторий реестра артефактов в вашем .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 по частным модулям .
Создайте свою функцию с помощью зависимостей от поставщиков
Вендорные зависимости — это те зависимости, исходный код которых включен непосредственно в ваш пакет исходного кода и перестроен вместе с вашим собственным кодом. Вы создаете зависимости Node.js от поставщиков и пропускаете их установку во время развертывания, используя переменную среды сборки GOOGLE_VENDOR_NPM_DEPENDENCIES.
Предварительные требования для вендорных зависимостей
Убедитесь, что у вас есть рабочая функция со всеми зависимостями, которые вы хотите определить в файле
package.json
.Установите эти зависимости локально, запустив
npm install
Удалите
node_modules
из файла .gcloudignore в вашем рабочем каталоге.Разверните функцию, убедившись, что ваша локальная версия Node.js совпадает с той, которую вы указали во время развертывания.
Разверните свою функцию и предоставленные поставщиком зависимости с помощью следующей команды:
gcloud functions deploy FUNCTION_NAME \ --runtime RUNTIME_NAME \ --set-build-env-vars GOOGLE_VENDOR_NPM_DEPENDENCIES=true
Заменять:
- FUNCTION_NAME : имя функции Cloud Functions которую вы развертываете.
- RUNTIME_NAME : имя среды выполнения Node.js, в которой будет выполняться развернутая функция. Это должна быть та же версия Node.js, которую вы использовали в своей локальной среде разработки.
Пакет платформы Functions является обязательной зависимостью для функций. Для более быстрой сборки мы рекомендуем продавать этот пакет. Если вы этого не сделаете, он будет загружен и установлен при построении вашей функции.
Если вы укажете механизм npm в файле package.json, указанная версия npm будет загружена во время сборки. Чтобы подавить такое поведение, удалите его из файла package.json.