Actualización de 1.123.6 a 1.123.61 → prom-client roto en nodo de código

Describe el problema/error/pregunta

Recientemente actualizamos de 1.123.6 a 1.123.61. Tenemos un flujo de trabajo OTEL para rastrear métricas personalizadas que utiliza el nodo de código y la biblioteca prom-client utilizada internamente de la siguiente manera: const client = require('prom-client');. Esto ya no funciona debido al error “Cannot find module ‘prom-client’”. Habilitamos N8N_METRICS y también establecimos NODE_FUNCTION_ALLOW_EXTERNAL en "prom-client". Esto funcionaba en 1.123.6. ¿Es esto una regresión o un cambio importante?

Por favor, comparte tu flujo de trabajo

Comparte el resultado devuelto por el último nodo

[
{
“name”: “n8n_learning_progress_achievement_sync_total”,
“description”: “Number of learning progress syncs from achievement webhook”,
“values”: {
“academy”: “faps-fernstudium”,
“testStatus”: “passed”,
“assignment”: 17392228439111
},
“error”: “Cannot find module ‘prom-client’ [line 1, for item 0]”
}
]

Información sobre tu configuración de n8n

  • Versión de n8n: 1.123.61
  • Base de datos (predeterminada: SQLite): Postgres
  • Configuración de EXECUTIONS_PROCESS de n8n (predeterminada: own, main): own, main
  • Ejecutando n8n mediante (Docker, npm, n8n cloud, desktop app): Docker en render.com
  • Sistema operativo:

@Florian_Glappa

Esto parece ser una regresión.

Puedes modificar tu Comando de inicio en Render para instalar el paquete antes de iniciar n8n:

npm install prom-client && n8n start

O puedes fijar tu versión de imagen Docker a 1.123.6 hasta que se lance una corrección.

Si decides abrir un problema en GitHub, puedes categorizarlo como una Regresión.

  • Versión afectada: 1.123.61
  • Versión que funciona: 1.123.6
  • Entorno: Docker
  • Problema: prom-client ya no se promueve a la raíz de node_modules, lo que rompe require('prom-client') en nodos de Código a pesar de que NODE_FUNCTION_ALLOW_EXTERNAL está configurado.

Hola @Florian_Glappa ,

Este problema es un efecto secundario de las actualizaciones recientes de empaquetamiento de dependencias y refactorización de paquetes en n8n, más que un cambio disruptivo intencional del nodo Code.

Por qué dejó de funcionar:

Antes, prom-client estaba presente como una dependencia de nivel superior sin empaquetar en node_modules raíz de n8n. Configurar NODE_FUNCTION_ALLOW_EXTERNAL=prom-client permitía que el nodo Code resolviera la copia interna de n8n. En versiones recientes, n8n actualizó su estructura de paquetes interna/empaquetador (aislando dependencias internas), por lo que prom-client ya no se expone directamente en el directorio node_modules raíz para que el resolutor de módulos de Node la encuentre.

Confiar en las subdependencias internas de n8n a través de require() puede fallar en actualizaciones de versiones cuando los paquetes internos se desplazan.


Cómo solucionarlo (Ya que estás ejecutando Docker en Render.com):

La solución permanente es instalar explícitamente prom-client como un módulo externo en tu contenedor Docker para que Node.js siempre pueda resolverlo.

Solución 1: Dockerfile personalizado (Recomendado)

Si despliegas mediante un Dockerfile en Render, actualiza tu Dockerfile para instalar prom-client explícitamente:

FROM n8nio/n8n:1.123.61

USER root
# Instalar prom-client globalmente para que el nodo Code pueda requerirlo
RUN npm install -g prom-client
USER node

# Asegurar que NODE_PATH incluya módulos globales
ENV NODE_PATH=/usr/local/lib/node_modules

Asegúrate de que tu variable de entorno siga configurada:

NODE_FUNCTION_ALLOW_EXTERNAL=prom-client

Solución 2: Comando de inicio en Render (Alternativa)

Si estás ejecutando la imagen oficial n8nio/n8n directamente en Render sin un Dockerfile personalizado, puedes añadir un script de inicio u invalidar el comando antes de iniciar n8n:

cd /home/node/.n8n && npm install prom-client && n8n start

¡Una vez que prom-client esté explícitamente instalado en el entorno del contenedor, el require(‘prom-client’) de tu nodo Code volverá a funcionar sin problemas!

¡Gracias!

@Florian_Glappa ¿puedes compartir tu configuración completa incluyendo cómo estás instalando el paquete npm? ¿También estás usando task runners ya que eso cambiará las cosas.

No instalo el paquete npm, como dicen los documentos, n8n usa el paquete internamente, simplemente me enganchI en esa funcionalidad con las dos variables de entorno que mencioné en el post.

@Florian_Glappa Solo para verificar, ¿era 1.123.6 o 1.123.60 antes de actualizar y estás usando ejecutores de tareas externos?

Podría ser que algunos de los pasos de endurecimiento recientes estén impidiendo que se cargue el paquete.

Era la versión 1.123.6. No uso ejecutores de tareas externos.

@Florian_Glappa He estado investigando y parece que dejó de funcionar en la versión 1.123.42, pero aparentemente está funcionando de nuevo en la última versión beta actual, así que podría valer la pena hacer una actualización v2 si es posible.

Sin embargo, he creado N8N-10510 como un ticket de desarrollo para ver también si podemos solucionar esto.

Gracias por investigar esto. Una actualización v2 requiere investigación sobre cambios importantes, lo cual no es posible para nosotros en este momento. Así que estamos esperando N8N-10510 :slight_smile:

Podría ser útil tener en cuenta que v1 llegará a fin de vida antes de finales de año, así que podría valer la pena empezar a planificarlo.

Sobre este problema… se ha creado fix(Code Node): External modules not working even when allowed in n8n version 1.x by RomanDavydchuk · Pull Request #34093 · n8n-io/n8n · GitHub así que todo debería estar bien antes de finales de semana.

¡Veo que ya está fusionado y lanzado en la versión 1.123.66, eso es genial! Desafortunadamente, solo hay imágenes de Docker para amd y arm de esta versión, no la genérica. ¿Supongo que tengo que esperar a eso?

Se lanzó una nueva versión n8n@1.123.66 que incluye la solicitud de cambios de GitHub 34093.

Solo hemos tenido las 2 imágenes durante mucho tiempo, ¿cuál estabas usando?