Nous avons récemment mis à jour la version 1.123.6 à 1.123.61. Nous avons un workflow OTEL pour suivre les métriques personnalisées qui utilise le nœud de code et la bibliothèque prom-client utilisée en interne de cette façon : const client = require('prom-client');. Cela ne fonctionne plus en raison de l’erreur « Cannot find module ‘prom-client’ ». Nous avons activé N8N_METRICS et avons également défini NODE_FUNCTION_ALLOW_EXTERNAL sur "prom-client". Cela fonctionnait dans la version 1.123.6. S’agit-il d’une régression ou d’un changement disruptif ?
Vous pouvez modifier votre Commande de démarrage sur Render pour installer le package avant de démarrer n8n :
npm install prom-client && n8n start
Sinon, vous pouvez épingler votre version d’image Docker à 1.123.6 en attendant qu’un correctif soit publié.
Si vous choisissez d’ouvrir un problème sur GitHub, vous pouvez le catégoriser comme une Régression.
Version affectée : 1.123.61
Version fonctionnelle : 1.123.6
Environnement : Docker
Problème : prom-client n’est plus remonté à la racine node_modules, ce qui casse require('prom-client') dans les nœuds Code malgré le paramètre NODE_FUNCTION_ALLOW_EXTERNAL.
Ce problème est un effet secondaire des mises à jour récentes de bundling de dépendances et de refactorisation de paquets dans n8n, plutôt qu’un changement cassant intentionnel du nœud Code.
Pourquoi ça a cessé de fonctionner :
Auparavant, prom-client était présent en tant que dépendance non bundlée au niveau supérieur dans le node_modules racine de n8n. Définir NODE_FUNCTION_ALLOW_EXTERNAL=prom-client permettait au nœud Code de résoudre la copie interne de n8n. Dans les versions récentes, n8n a mis à jour sa structure de paquets interne/bundler (isolant les dépendances internes), donc prom-client n’est plus exposé directement dans le répertoire node_modules racine pour que le résolveur de modules de Node le trouve.
S’appuyer sur les sous-dépendances internes de n8n via require() peut se casser à travers les mises à jour de version lorsque les paquets internes se déplacent.
Comment le corriger (Puisque vous exécutez via Docker sur Render.com) :
La solution permanente est d’installer explicitement prom-client en tant que module externe dans votre conteneur Docker afin que Node.js puisse toujours le résoudre.
Si vous déployez via un Dockerfile sur Render, mettez à jour votre Dockerfile pour installer prom-client explicitement :
FROM n8nio/n8n:1.123.61
USER root
# Install prom-client globally so Code node can require it
RUN npm install -g prom-client
USER node
# Ensure NODE_PATH includes global modules
ENV NODE_PATH=/usr/local/lib/node_modules
Assurez-vous que votre variable d’environnement reste définie :
NODE_FUNCTION_ALLOW_EXTERNAL=prom-client
Correction 2 : Commande de démarrage Render (Alternative)
Si vous exécutez l’image officielle n8nio/n8n directement sur Render sans Dockerfile personnalisé, vous pouvez ajouter un script de démarrage ou un remplacement de commande avant de lancer n8n :
cd /home/node/.n8n && npm install prom-client && n8n start
Une fois que prom-client est explicitement installé dans l’environnement du conteneur, le const client = require(‘prom-client’) de votre nœud Code fonctionnera à nouveau sans problème !
@Florian_Glappa peux-tu partager ta configuration complète, y compris comment tu installes le package npm. Utilises-tu aussi des task runners, car cela changerait les choses.
Je n’installe pas le package npm, car comme l’indique la documentation, n8n utilise le package en interne, j’ai juste branché sur cette fonctionnalité avec les deux variables d’environnement que j’ai mentionnées dans le post.
@Florian_Glappa Juste pour confirmer, était-ce la version 1.123.6 ou 1.123.60 avant votre mise à jour et utilisez-vous des exécuteurs de tâches externes ?
Il est possible que certaines des étapes de renforcement récentes empêchent le chargement du package.
@Florian_Glappa J’ai fait quelques recherches et il semble que ça a cessé de fonctionner dans la version 1.123.42, mais ça semble fonctionner à nouveau dans la dernière version bêta actuelle, donc il se pourrait qu’une mise à jour v2 vaille le coup si c’est possible.
J’ai cependant créé N8N-10510 comme ticket de développement pour voir si nous pouvons également résoudre ce problème.
Merci beaucoup d’avoir creusé la question. Une mise à jour v2 nécessite une recherche concernant les changements qui cassent le code, ce n’est pas possible pour nous en ce moment. On a hâte de voir N8N-10510
Il pourrait être utile de garder à l’esprit que v1 arrivera en fin de vie avant la fin de l’année, il serait donc peut-être judicieux de commencer à planifier cela.
Je vois que c’est déjà fusionné et sorti en 1.123.66, c’est super ! Malheureusement, il n’y a que les images Docker amd et arm pour cette version, pas la version générique. Je suppose que je dois attendre ?