Atualização de 1.123.6 para 1.123.61 → usando prom-client em nó de código quebrado

Descreva o problema/erro/pergunta

Recentemente atualizamos da versão 1.123.6 para 1.123.61. Temos um workflow OTEL para rastrear métricas customizadas que usa o nó de código e a biblioteca prom-client usada internamente desta forma: const client = require('prom-client');. Isso não funciona mais devido ao erro “Cannot find module ‘prom-client’”. Habilitamos N8N_METRICS e também configuramos NODE_FUNCTION_ALLOW_EXTERNAL para "prom-client". Isso funcionava na versão 1.123.6. É uma regressão ou uma mudança de ruptura?

Por favor, compartilhe seu workflow

Compartilhe a saída retornada pelo último nó

[
{
“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]”
}
]

Informações sobre sua configuração n8n

  • Versão n8n: 1.123.61
  • Banco de dados (padrão: SQLite): Postgres
  • Configuração n8n EXECUTIONS_PROCESS (padrão: own, main): own, main
  • Executando n8n via (Docker, npm, n8n cloud, aplicativo de desktop): Docker no render.com
  • Sistema operacional:

@Florian_Glappa

Isso parece ser uma regressão.

Você pode modificar seu Start Command no Render para instalar o pacote antes de iniciar o n8n:

npm install prom-client && n8n start

Ou você pode fixar a versão da sua imagem Docker em 1.123.6 até que uma correção seja lançada.

Se você optar por abrir uma issue no GitHub, pode categorizá-la como uma Regressão.

  • Versão afetada: 1.123.61
  • Versão funcionando: 1.123.6
  • Ambiente: Docker
  • Problema: prom-client não está mais sendo hoisted para o node_modules raiz, quebrando require('prom-client') em Code nodes mesmo com NODE_FUNCTION_ALLOW_EXTERNAL configurado.

Oi @Florian_Glappa ,

Este problema é um efeito colateral de atualizações recentes de bundling de dependências e refatoração de pacotes no n8n, e não uma mudança proposital que quebra a funcionalidade do nó Code.

Por que parou de funcionar:

Antes, prom-client estava presente como uma dependência de nível superior não bundled no node_modules raiz do n8n. Configurar NODE_FUNCTION_ALLOW_EXTERNAL=prom-client permitia que o nó Code resolvesse a cópia interna do n8n. Nas versões recentes, o n8n atualizou sua estrutura de pacotes interna/bundler (isolando dependências internas), então prom-client não fica mais exposto diretamente no diretório node_modules raiz para o resolvedor de módulos do Node encontrar.

Depender de sub-dependências internas do n8n via require() pode quebrar entre atualizações de versão quando pacotes internos se movem.


Como corrigir (Já que você está rodando via Docker no Render.com):

A solução permanente é instalar explicitamente prom-client como um módulo externo no seu container Docker para que o Node.js sempre consiga resolvê-lo.

Correção 1: Dockerfile Customizado (Recomendado)

Se você faz deploy via Dockerfile no Render, atualize seu Dockerfile para instalar prom-client explicitamente:

FROM n8nio/n8n:1.123.61

USER root
# Instale prom-client globalmente para que o nó Code consiga requisitá-lo
RUN npm install -g prom-client
USER node

# Garanta que NODE_PATH inclua módulos globais
ENV NODE_PATH=/usr/local/lib/node_modules

Certifique-se de que sua variável de ambiente permanece configurada:

NODE_FUNCTION_ALLOW_EXTERNAL=prom-client

Correção 2: Comando de Inicialização no Render (Alternativa)

Se você está rodando a imagem oficial n8nio/n8n diretamente no Render sem um Dockerfile customizado, você pode adicionar um script de inicialização ou sobrescrever o comando antes de iniciar o n8n:

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

Uma vez que prom-client esteja explicitamente instalado no ambiente do container, o const client = require(‘prom-client’) do seu nó Code funcionará perfeitamente novamente!

Obrigado!

@Florian_Glappa você pode compartilhar sua configuração completa, incluindo como você está instalando o pacote npm? Você também está usando task runners, pois isso mudará as coisas.

Não instalo o pacote npm, pois conforme a documentação diz, o n8n usa o pacote internamente, apenas conectei nessa funcionalidade com as duas variáveis de ambiente que mencionei no post.

@Florian_Glappa Só para confirmar, era 1.123.6 ou 1.123.60 antes de você atualizar e você está usando task runners externos?

Pode ser que alguns dos passos de endurecimento recentes estejam impedindo o carregamento do pacote.

Era 1.123.6. Eu não uso executores de tarefas externos.

@Florian_Glappa Fiz algumas pesquisas e parece que parou de funcionar na versão 1.123.42, mas parece estar funcionando novamente na versão beta mais recente, então pode ser que valha a pena fazer uma atualização v2 se possível.

Criei, porém, N8N-10510 como um ticket de desenvolvimento para também ver se conseguimos corrigir isso.

Muito obrigado por investigar isso. Uma atualização v2 requer pesquisa sobre mudanças quebradas, o que não é possível para nós neste momento. Então estou ansioso por N8N-10510 :slight_smile:

Vale a pena ter em mente que a v1 chegará ao fim da vida útil antes do final do ano, então pode ser interessante começar a se preparar para isso.

Neste problema porém… fix(Code Node): External modules not working even when allowed in n8n version 1.x by RomanDavydchuk · Pull Request #34093 · n8n-io/n8n · GitHub foi criado, então tudo deve estar resolvido antes do final da semana.

Vejo que já foi mesclado e lançado na versão 1.123.66, ótimo! Infelizmente existem apenas imagens Docker amd e arm dessa versão, não a genérica. Acho que preciso esperar por essa?

Nova versão n8n@1.123.66 foi lançada, que inclui o GitHub PR 34093.

Temos apenas as 2 imagens há muito tempo. Qual delas você estava usando?