Environnement d'exécution Node.js
Cloud Functions est compatible avec les environnements d'exécution Node.js suivants :
- Node.js 20
- Node.js 18 (recommandé)
- Node.js 16
- Node.js 14
- Node.js 12
- Node.js 10
Pour découvrir comment exécuter localement votre fonction Node.js, consultez la page Exécuter des fonctions avec les frameworks des fonctions.
Pour commencer à utiliser Node.js avec Cloud Functions, consultez le démarrage rapide.
Sélectionner l'environnement d'exécution
Vous pouvez sélectionner l'environnement d'exécution Node.js de votre choix pour votre fonction lors du déploiement.
gcloud
Si vous utilisez Google Cloud CLI, vous pouvez spécifier l'environnement d'exécution à l'aide du paramètre --runtime
. Exemple :
gcloud functions deploy NAME --runtime nodejs20 --trigger-http
Pour connaître les arguments qu'il est possible de spécifier lors du déploiement, consultez la page Déployer à l'aide de l'outil gcloud.
Console
Si vous utilisez la console Google Cloud, vous pouvez sélectionner la région lorsque vous créez et déployez une fonction. Consultez le guide de démarrage rapide de la console Google Cloud pour obtenir des instructions détaillées.
Environnement d'exécution
L'environnement d'exécution comprend l'exécution, le système d'exploitation, les packages et une bibliothèque appelant votre fonction.
Node.js version 18 utilise un environnement d'exécution basé sur Ubuntu 22.04. Les environnements d'exécution Node.js antérieurs à la version 18 sont basés sur Ubuntu 18.04. Pour plus d'informations, consultez la section Environnements d'exécution Cloud Functions.
La bibliothèque qui appelle votre fonction est le framework des fonctions Node.
Structure du code source
Pour que Cloud Functions trouve la définition de votre fonction, chaque environnement d'exécution a certaines exigences en matière de structuration pour votre code source. Pour en savoir plus, consultez la page Écrire des fonctions Cloud Functions.
Spécifier des dépendances
Vous pouvez spécifier des dépendances pour vos fonctions en les répertoriant dans un fichier package.json
. Pour en savoir plus, consultez la page Spécifier des dépendances dans Node.js.
Script de compilation NPM
Par défaut, l'environnement d'exécution Node.js exécute npm run build
si un script build
est détecté dans le projet package.json
. Si vous avez besoin d'exercer un contrôle supplémentaire sur vos étapes de compilation avant de démarrer votre application, vous pouvez fournir une étape de compilation personnalisée en ajoutant un script gcp-build
à votre fichier package.json
.
Vous pouvez empêcher votre compilation d'exécuter le script npm run build
de l'une des manières suivantes :
En ajoutant un script
gcp-build
avec une valeur vide dans votre fichierpackage.json
:"gcp-build":""
.En définissant la variable d'environnement de compilation
GOOGLE_NODE_RUN_SCRIPTS
sur la chaîne vide pour empêcher tous les scripts de s'exécuter.
Signaler l'arrêt d'une fonction
Lorsque vous travaillez avec des tâches asynchrones qui impliquent des rappels ou des objets Promise
, vous devez explicitement informer l'environnement d'exécution que votre fonction a terminé l'exécution de ces tâches. Pour ce faire, vous pouvez procéder de différentes manières, comme indiqué dans les exemples ci-dessous. L'essentiel est que votre code attende que la tâche asynchrone ou Promise
se termine avant de renvoyer, faute de quoi le composant asynchrone de votre fonction risque d'être interrompu avant qu'il ne se termine.
Fonctions basées sur les événements
Renvoi implicite
exports.implicitlyReturning = async (event, context) => {
return await asyncFunctionThatReturnsAPromise();
};
Renvoi explicite
exports.explicitlyReturning = function (event, context) {
return asyncFunctionThatReturnsAPromise();
};
Fonctions HTTP
Node.js
Utiliser un middleware pour gérer les requêtes HTTP
Afin de simplifier le traitement des requêtes HTTP, les fonctions Cloud Functions HTTP Node.js fournissent des objets request
et response
compatibles avec ExpressJS. Cloud Functions lit automatiquement le corps de la requête, vous recevrez donc toujours le corps d'une requête indépendamment du type de contenu. Ainsi, les requêtes HTTP doivent être considérées comme ayant été entièrement lues au moment de l'exécution de votre code. L'imbrication avec des applications ExpressJS est possible à condition de prendre cela en compte. En effet, certains composants middleware ne s'attendant pas à ce que le corps d'une requête soit préalablement lu risquent de ne pas se comporter comme prévu.
Utiliser des modules ES
Les modules ECMAScript (modules ES ou ESM) sont une fonctionnalité standard TC39 non signalée dans Node version 14 et ultérieure, qui permet de charger des modules JavaScript. Contrairement à CommonJS, ESM fournit une API asynchrone pour le chargement de modules. Il fournit également une amélioration appréciée de la syntaxe via les instructions import
et export
, qui peuvent être utilisées dans une fonction Cloud au lieu d'instructions require
.
Pour utiliser ESM dans une fonction Cloud, vous devez déclarer "type": "module"
dans votre fichier package.json
.
{
...
"type": "module",
...
}
Vous pouvez alors utiliser les instructions import
et export
.