Node.js 20 mis hors service sur Cloud Functions for Firebase : passez à 24 ou 22
Le 30 octobre 2026, l’environnement d’exécution Node.js 20 de Cloud Functions a été mis hors service (decommission). Vous ne pouvez plus déployer ni mettre à jour de fonctions sur Node.js 20, si bien que firebase deploy s’arrête sur l’erreur ci-dessous. La correction tient en une ligne de functions/package.json. Si vous n’avez que des fonctions de 2e génération, passez à Node.js 24 ; si vous avez des fonctions de 1re génération, passez à Node.js 22.
Error: Runtime Node.js 20 was decommissioned on 2026-10-30. To deploy you must
first upgrade your runtime version.En bref
- Il n’y a pas que les déploiements. Les fonctions déjà déployées tournent encore, mais ne reçoivent plus de correctifs de sécurité et peuvent être désactivées, sans date fixée. Les dates et leur sens
- Changez une ligne et redéployez. Définissez
engines.nodesur"24"ou"22". Sifirebase.jsoncontientruntime, c’est cette valeur qui prime. Comment faire - 24 pour la 2e génération, 22 pour la 1re. Node.js 22 est le dernier environnement d’exécution des fonctions de 1re génération : elles doivent passer à la 2e génération avant la fin de Node.js 22, le 31 octobre 2027. Fonctions de 1re génération
- Si vous mettez à jour les SDK, vérifiez deux points.
firebase-functions7 a suppriméfunctions.config(), etfirebase-admin14 ne fonctionne qu’à partir de Node.js 22. Versions des SDK
Les dates et leur sens
Voici le calendrier de prise en charge des environnements d’exécution de Google Cloud. Pendant la période d’obsolescence (deprecation), vous pouvez encore déployer ; après la mise hors service (decommission), vous ne pouvez plus ni créer ni mettre à jour de fonctions sur cet environnement d’exécution.
| Environnement d’exécution | Fonctions qui peuvent l’utiliser | Obsolescence | Mise hors service |
|---|---|---|---|
| Node.js 18 | 1re génération, 2e génération | 2025-04-30 | 2025-10-30 |
| Node.js 20 | 1re génération, 2e génération | 2026-04-30 | 2026-10-30 |
| Node.js 22 | 1re génération, 2e génération | 2027-04-30 | 2027-10-31 |
| Node.js 24 | 2e génération uniquement | 2028-04-30 | 2028-10-31 |
Voici ce qui change à la mise hors service.
| Pendant l’obsolescence | Après la mise hors service | |
|---|---|---|
| Déployer ou mettre à jour | Oui | Non |
| Fonctions déjà déployées | S’exécutent | S’exécutent, mais peuvent être désactivées |
| Correctifs de sécurité de Node.js et de l’OS | Oui | Aucun |
La politique ne fixe aucune date de désactivation. Une fonction qui tourne bien aujourd’hui ne peut plus être redéployée au moment où vous devez corriger un bug, et vous ne savez pas quand elle risque de s’arrêter. Impossible non plus de contourner le blocage : même si vous désactivez la vérification d’environnement d’exécution de la CLI, le serveur bloque de son côté (code source de la CLI).
Passer à Node.js 24 ou 22
- Vérifiez la génération et l’environnement d’exécution de chaque fonction. Exécutez
firebase functions:list. Dans la colonne Version,v1correspond à la 1re génération etv2à la 2e ; la colonne Runtime indique l’environnement d’exécution actuel. - Choisissez une version. L’environnement d’exécution se définit par codebase (en général le dossier
functions), et non par fonction. Si au moins une fonction est de 1re génération, choisissez 22 ; si toutes sont de 2e génération, choisissez 24. Node.js 24 reste utilisable jusqu’au 31 octobre 2028, mais n’est pas compatible avec la 1re génération. La liste des versions de la documentation Firebase ne mentionne pas encore 24, mais le calendrier de Cloud l’indique pour la 2e génération, et la Firebase CLI le prend en charge depuis la version 14.26.0. - Changez une ligne dans
package.json. La valeur est un seul numéro de version majeure. Avec une plage comme>=22ou22.x, la CLI échoue avec l’erreurDetected node engine ... which is not a supported version.{ "engines": { "node": "24" } }Si
firebase.jsoncontientruntime, la CLI utilise d’abord cette valeur : c’est alors elle qu’il faut modifier.{ "functions": { "source": "functions", "runtime": "nodejs24" } } - Utilisez la même version de Node.js en local et en CI. L’émulateur exécute vos fonctions avec le Node.js installé sur la machine. Si les versions diffèrent, il affiche seulement l’avertissement
Your requested "node" version "24" doesn't match your global version "20"et les exécute quand même sous Node.js 20 : vos tests tournent alors sur une autre version que la production. - Déployez. Exécutez
firebase deploy --only functions, puis vérifiez que la colonne Runtime defirebase functions:listindique désormaisnodejs24(ounodejs22).
Versions des SDK
Si vous mettez à jour les SDK en même temps que Node.js, vérifiez les points suivants.
| Package | À vérifier |
|---|---|
firebase-tools (CLI) | Peut déployer nodejs22 à partir de la 13.11.0 et nodejs24 à partir de la 14.26.0. |
firebase-functions | Avant la 6.2.0, du code ESM avec un await au niveau supérieur plante sur Node.js 22.12 et versions ultérieures. La 7.0.0 a supprimé functions.config() : l’appeler provoque une erreur d’exécution. |
firebase-admin | La 14 ne fonctionne qu’à partir de Node.js 22 et doit être utilisée avec firebase-functions 7.3.0 ou version ultérieure (dépendance peer). La 13 fonctionne à partir de Node.js 18. |
Si vous utilisez encore functions.config(), gardez firebase-functions en 6.x et ne changez que Node.js. Les déploiements avec functions.config() échoueront aussi après mars 2027 : d’ici là, passez aux variables d’environnement ou à Secret Manager.
Fonctions de 1re génération
Le dernier environnement d’exécution utilisable par les fonctions de 1re génération est Node.js 22, qui sera mis hors service le 31 octobre 2027. D’ici là, elles doivent passer à la 2e génération. Les avertissements de la Firebase CLI 15.35.0 donnent 2028-10-31 comme date de mise hors service de Node.js 22, mais c’est la date du calendrier de Google Cloud, 2027-10-31, qui fait foi (code source de la CLI). Comme on ne peut pas convertir directement une fonction en gardant le même nom, Firebase recommande de déployer la fonction de 2e génération sous un nouveau nom, d’y migrer le trafic, puis de supprimer celle de 1re génération (guide de mise à niveau). Voici les points qui peuvent coincer pendant la migration.
- Les URL changent. Pour les fonctions HTTP, appelables et de file d’attente de tâches, un nouveau nom signifie une nouvelle URL. Faites pointer vos applications et vos webhooks vers la nouvelle URL, puis supprimez l’ancienne fonction avec
firebase functions:delete. - Les événements sont traités deux fois. Tant que les deux fonctions coexistent, les déclencheurs d’événements comme ceux de Firestore ou de Storage exécutent les deux pour un même événement. Faites en sorte que deux exécutions donnent le même résultat.
- Certaines choses manquent. La 2e génération n’a ni
functions.config()ni déclencheurs d’événements Analytics, et les déclencheurs Authentication de création et de suppression d’utilisateurs (onUserCreated,onUserDeleted) sont encore en version Preview. - Les valeurs par défaut diffèrent. Une instance traite par défaut jusqu’à 80 requêtes à la fois, et le compte de service par défaut devient le compte de service par défaut Compute Engine. Si vous stockez dans des variables globales des valeurs propres à chaque requête, ou si vous avez accordé des autorisations IAM au compte de service par défaut App Engine, vous devez corriger cela.
Extensions
Les extensions installées tournent elles aussi sur Cloud Functions, et c’est la version de l’extension qui détermine leur environnement d’exécution. Firebase recommande de mettre à jour les extensions vers leur dernière version.
firebase ext:update <instance-id>
firebase deploy --only extensionsLe service d’extensions Firebase sera arrêté le 31 mars 2027. Les extensions installées continueront de s’exécuter ensuite, mais les fonctionnalités de gestion, comme les mises à jour, ne seront plus disponibles. La plupart reposent sur des fonctions de 1re génération : elles peuvent s’arrêter ou être désactivées une fois leur environnement d’exécution mis hors service. Si vous comptez continuer à utiliser ce que fait une extension, prévoyez aussi de le reprendre dans votre propre fonction.
Sources
- Calendrier de prise en charge des environnements d’exécution, notes de version de Cloud Functions : dates, sens de l’obsolescence et de la mise hors service, prise en charge de Node.js 22 en 1re génération et de Node.js 24 en 2e génération
- Gérer les fonctions (définir la version de Node.js), questions fréquentes sur Cloud Functions :
enginesetruntime, environnement d’exécution des extensions - Code source de la Firebase CLI 15.35.0 : vérification de l’environnement d’exécution et message d’erreur, dates des environnements d’exécution, lecture d’
engines, choix de Node.js par l’émulateur, vérifications côté serveur - Notes de version de firebase-tools, firebase-functions et firebase-admin 14.0.0, configuration de l’environnement
- Passer de la 1re à la 2e génération, comparaison des générations, déclencheurs Authentication, questions fréquentes sur les extensions, référence d’extension.yaml
