FirexportBlog

Node.js 20 retirado en Cloud Functions for Firebase: pasa a Node.js 24 o 22

El 30 de octubre de 2026 se retiró (decommission) Node.js 20 como entorno de ejecución de Cloud Functions. Ya no puedes desplegar ni actualizar funciones en Node.js 20, así que firebase deploy se detiene con el error de abajo. Lo que hay que cambiar es una línea de functions/package.json. Si solo tienes funciones de 2.ª gen., pasa a Node.js 24; si tienes funciones de 1.ª gen., a Node.js 22.

Error: Runtime Node.js 20 was decommissioned on 2026-10-30. To deploy you must
first upgrade your runtime version.

En resumen

  • No solo se bloquean los despliegues. Las funciones ya desplegadas todavía se ejecutan, pero dejaron de recibir parches de seguridad y pueden inhabilitarse sin una fecha fijada. Fechas y qué significan
  • Cambia una línea y vuelve a desplegar. Configura engines.node como "24" o "22". Si firebase.json tiene runtime, ese valor tiene prioridad. Cómo hacerlo
  • 24 para la 2.ª gen. y 22 para la 1.ª gen. Node.js 22 es el último entorno de ejecución de las funciones de 1.ª gen., así que tienen que pasar a la 2.ª gen. antes de que Node.js 22 termine, el 31 de octubre de 2027. Funciones de 1.ª gen.
  • Si actualizas los SDK, revisa dos cosas. firebase-functions 7 eliminó functions.config(), y firebase-admin 14 solo funciona en Node.js 22 o posterior. Versiones de los SDK

Fechas y qué significan

Este es el calendario de compatibilidad de entornos de ejecución de Google Cloud. En la fase de obsolescencia (deprecation) todavía puedes desplegar; tras la retirada (decommission), ya no puedes crear funciones nuevas ni actualizar las existentes con ese entorno de ejecución.

Entorno de ejecuciónFunciones que pueden usarloObsolescenciaRetirada
Node.js 181.ª gen., 2.ª gen.2025-04-302025-10-30
Node.js 201.ª gen., 2.ª gen.2026-04-302026-10-30
Node.js 221.ª gen., 2.ª gen.2027-04-302027-10-31
Node.js 24Solo 2.ª gen.2028-04-302028-10-31

Esto es lo que cambia con la retirada.

En la fase de obsolescenciaTras la retirada
Desplegar o actualizarSíNo
Funciones ya desplegadasSe ejecutanSe ejecutan, pero pueden inhabilitarse
Parches de seguridad de Node.js y del SOSíNinguno

La política no fija ninguna fecha de inhabilitación. Incluso una función que hoy va bien no se puede volver a desplegar en cuanto necesites corregir un error, y no sabes cuándo se detendrá. Tampoco hay forma de esquivarlo: aunque desactives la comprobación del entorno de ejecución en la CLI, el servidor lo bloquea por su cuenta (código de la CLI).

Pasar a Node.js 24 o 22

  1. Comprueba la generación y el entorno de ejecución de cada función. Ejecuta firebase functions:list. En la columna Version, v1 es 1.ª gen. y v2 es 2.ª gen.; la columna Runtime muestra el entorno de ejecución actual.
  2. Elige una versión. Hay un entorno de ejecución por base de código (normalmente la carpeta functions), no uno por función. Si hay al menos una función de 1.ª gen., elige 22; si todas son de 2.ª gen., elige 24. Node.js 24 se puede usar hasta el 31 de octubre de 2028, pero no admite la 1.ª gen. La lista de versiones de la documentación de Firebase todavía no incluye 24, pero el calendario de Cloud lo recoge para la 2.ª gen. y Firebase CLI lo admite desde la versión 14.26.0.
  3. Cambia una línea de package.json. El valor es un único número de versión principal. Con un rango como >=22 o 22.x, la CLI falla con el error Detected node engine ... which is not a supported version.
    {
      "engines": {
        "node": "24"
      }
    }

    Si firebase.json tiene runtime, la CLI usa primero ese valor. En ese caso, cámbialo ahí.

    {
      "functions": {
        "source": "functions",
        "runtime": "nodejs24"
      }
    }
  4. Usa la misma versión de Node.js en local y en CI. El emulador ejecuta tus funciones con el Node.js que tengas instalado. Si las versiones no coinciden, solo muestra la advertencia Your requested "node" version "24" doesn't match your global version "20" y las sigue ejecutando en 20, así que tus pruebas corren en una versión distinta de la de producción.
  5. Despliega. Ejecuta firebase deploy --only functions y comprueba que la columna Runtime de firebase functions:list haya cambiado a nodejs24 (o nodejs22).

Versiones de los SDK

Si actualizas los SDK a la vez que Node.js, revisa lo siguiente.

PaqueteQué revisar
firebase-tools (CLI)Puede desplegar nodejs22 desde la 13.11.0 y nodejs24 desde la 14.26.0.
firebase-functionsPor debajo de la 6.2.0, el código ESM con un await de nivel superior falla en Node.js 22.12 y posteriores. La 7.0.0 eliminó functions.config(), y cada llamada da un error en tiempo de ejecución.
firebase-adminLa 14 solo funciona en Node.js 22 o posterior y hay que usarla con firebase-functions 7.3.0 o posterior (dependencia peer). La 13 funciona en Node.js 18 o posterior.

Si todavía usas functions.config(), deja firebase-functions en 6.x y cambia solo Node.js. Desplegar con functions.config() también fallará después de marzo de 2027, así que antes tienes que pasar a variables de entorno o Secret Manager.

Funciones de 1.ª gen.

El último entorno de ejecución que pueden usar las funciones de 1.ª gen. es Node.js 22, que se retira el 31 de octubre de 2027. Antes de esa fecha tienen que pasar a la 2.ª gen. Firebase CLI 15.35.0 muestra en sus advertencias 2028-10-31 como fecha de retirada de Node.js 22, pero la que cuenta es la del calendario de Google Cloud, 2027-10-31 (código de la CLI). Como no se puede cambiar una función directamente con el mismo nombre, Firebase recomienda desplegar la función de 2.ª gen. con un nombre nuevo, migrar el tráfico y luego borrar la de 1.ª gen. (guía de actualización). Estos son los puntos que pueden complicar el cambio.

  • Las URL cambian. En las funciones de HTTP, las que admiten llamadas y las de listas de tareas en cola, un nombre nuevo es una URL nueva. Pasa tus apps y webhooks a la URL nueva y luego borra la función antigua con firebase functions:delete.
  • Los eventos se procesan dos veces. Mientras existan las dos funciones, los activadores de eventos, como los de Firestore o Storage, ejecutan las dos con el mismo evento. Haz que el resultado sea el mismo aunque se ejecuten dos veces.
  • Faltan cosas. La 2.ª gen. no tiene functions.config() ni activadores de eventos de Analytics, y los activadores de Authentication de creación y eliminación de usuarios (onUserCreated, onUserDeleted) todavía están en versión preliminar.
  • Los valores predeterminados son otros. Una instancia atiende de forma predeterminada hasta 80 solicitudes a la vez, y la cuenta de servicio predeterminada pasa a ser la cuenta de servicio predeterminada de Compute Engine. Si guardas en variables globales valores distintos en cada solicitud o diste permisos de IAM a la cuenta de servicio predeterminada de App Engine, tienes que corregirlo.

Extensiones

Las extensiones instaladas también se ejecutan en Cloud Functions, y su entorno de ejecución lo determina la versión de la extensión. Firebase recomienda actualizar las extensiones a su versión más reciente.

firebase ext:update <instance-id>
firebase deploy --only extensions

El servicio de Extensiones de Firebase se cerrará el 31 de marzo de 2027. Las extensiones instaladas seguirán ejecutándose después, pero las tareas de administración, como actualizarlas, ya no estarán disponibles. La mayoría están hechas con funciones de 1.ª gen., así que pueden detenerse o inhabilitarse cuando se retire su entorno de ejecución. Si vas a seguir usando lo que hace una extensión, planea también pasarlo a una función propia.

Fuentes

Todos los artículos →