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?
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.
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!
@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 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
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?