Mise à jour de 1.123.6 vers 1.123.61 -> utilisation de prom-client cassée dans les nœuds de code

Décrivez le problème/l’erreur/la question

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 ?

Veuillez partager votre workflow

Partager le résultat retourné par le dernier nœud

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

Informations sur votre configuration n8n

  • Version de n8n : 1.123.61
  • Base de données (par défaut : SQLite) : Postgres
  • Paramètre n8n EXECUTIONS_PROCESS (par défaut : own, main) : own, main
  • Exécution de n8n via (Docker, npm, n8n cloud, application de bureau) : Docker sur render.com
  • Système d’exploitation :

@Florian_Glappa

Cela semble être une régression.

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.

Salut @Florian_Glappa ,

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.

Correction 1 : Dockerfile personnalisé (Recommandé)

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 !

Merci !

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

C’était 1.123.6. Je n’utilise pas de gestionnaires de tâches externes.

@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 :slight_smile:

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.

Concernant ce problème… fix(Code Node): External modules not working even when allowed in n8n version 1.x by RomanDavydchuk · Pull Request #34093 · n8n-io/n8n · GitHub a été créée, donc tout devrait être réglé avant la fin de la semaine.

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 ?

Une nouvelle version n8n@1.123.66 a été publiée, qui inclut la PR GitHub 34093.

Nous n’avons eu que les 2 images depuis longtemps, laquelle utilisiez-vous ?