Функция может использовать внешние модули 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()
для импорта локальных файлов, которые вы развертываете вместе с вашей функцией.
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 по приватным модулям .