欢迎参加我们将于 2022 年 10 月 18 日举办的 Firebase 峰会(线上线下同时进行),了解 Firebase 如何帮助您加快应用开发速度、满怀信心地发布应用并在之后需要时轻松地扩大应用规模。立即报名

Gestion des dépendances

Une fonction est autorisée à utiliser des modules Node.js externes ainsi que des données locales. Les dépendances dans Node.js sont gérées avec npm et exprimées dans un fichier de métadonnées appelé package.json . Les environnements d'exécution Cloud Functions Node.js prennent généralement en charge l'installation à l'aide de npm ou yarn .

Pour spécifier une dépendance pour votre fonction, ajoutez-la à votre fichier package.json .

Dans cet exemple, une dépendance est répertoriée dans le fichier package.json :

{
  "dependencies": {
    "escape-html": "^1.0.3"
  }
}

La dépendance est ensuite importée dans la fonction :

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')}!`);
});

Manuscrit

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')}!`);
}

Y compris les modules Node.js locaux

Vous pouvez également inclure des modules Node.js locaux dans votre fonction. Vous pouvez y parvenir en déclarant votre module dans package.json à l'aide du file: prefix . Dans l'exemple suivant, mymodule fait référence au nom de votre module et mymoduledir est le répertoire contenant votre module :

{
  "dependencies": {
    "mymodule": "file:mymoduledir"
  }
}

Le code de ce module local doit être stocké ailleurs que dans le dossier node_modules du répertoire racine de votre fonction.

Étapes supplémentaires pour TypeScript

TypeScript vous aide le plus lorsque vous utilisez des bibliothèques contenant des informations de type. Cela permet à TypeScript de détecter les erreurs de syntaxe et aux éditeurs de vous proposer de meilleures suggestions de saisie semi-automatique. Certaines bibliothèques, comme firebase-admin et firebase-functions , sont livrées avec les définitions TypeScript incluses.

De nombreuses bibliothèques ne fournissent pas leur propre définition TypeScript. Le projet DefinitelyTyped fournit des définitions gérées par la communauté pour les bibliothèques de nœuds les plus populaires. DefinitelyTyped publie ces définitions sous le même nom de package NPM, mais à l'intérieur de l'organisation "@types". Par exemple, vous pouvez installer les informations de type pour la bibliothèque uuid avec ce qui suit :

npm install @types/uuid

Au fur et à mesure que vous vous familiariserez avec TypeScript, vous pourriez vous retrouver à combiner les deux installations :

npm install uuid @types/uuid

Les dépendances de type doivent être du même type que la dépendance de bibliothèque. Par exemple, vous ne devez pas enregistrer uuid en tant que dépendance normale et @types/uuid en tant que dépendance dev ou dépendance d'homologue.

Chargement des modules Node.js

Utilisez la fonction Node.js require() pour charger n'importe quel module Node.js que vous avez installé. Vous pouvez également utiliser la fonction require() pour importer des fichiers locaux que vous déployez avec votre fonction.

Si vous écrivez des fonctions dans TypeScript, utilisez l'instruction import de la même manière pour charger n'importe quel module Node.js que vous avez installé.

Utiliser des modules privés

Vous pouvez utiliser un module npm privé en fournissant des paramètres d'authentification auprès du registre dans un fichier .npmrc dans le répertoire de la fonction.

Modules privés d'Artifact Registry

Un référentiel de packages Artifact Registry Node.js peut héberger des modules privés pour votre fonction. Lors du déploiement sur Cloud Functions, le processus de compilation génère automatiquement les identifiants Artifact Registry pour le compte de service Cloud Build . Il vous suffit de répertorier le référentiel Artifact Registry dans votre .npmrc sans générer d'informations d'identification supplémentaires. Par exemple:

@SCOPE:registry=https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
//REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME:always-auth=true

Modules privés d'autres référentiels

La documentation npm explique comment créer des jetons d'accès en lecture seule personnalisés. Nous vous déconseillons d'utiliser le fichier .npmrc créé dans le répertoire de base car il contient un jeton de lecture-écriture. Les autorisations d'écriture ne sont pas requises pendant le déploiement et peuvent poser un risque de sécurité.

N'incluez pas le fichier .npmrc si vous n'utilisez pas de référentiels privés, car cela peut augmenter le temps de déploiement de vos fonctions.

Format de fichier

Si vous utilisez un fichier .npmrc pour définir un jeton d'authentification personnalisé, il doit inclure la ligne ci-dessous. Remplacez <YOUR_AUTH_TOKEN> par votre jeton d'authentification fourni par NPM.

//registry.npmjs.org/:_authToken=<YOUR_AUTH_TOKEN>