Update von 1.123.6 auf 1.123.61 -> prom-client im Code-Node beschädigt

Beschreibe das Problem/den Fehler/die Frage

Wir sind kürzlich von 1.123.6 zu 1.123.61 aktualisiert worden. Wir verwenden einen OTEL-Workflow zum Tracking von benutzerdefinierten Metriken, der einen Code-Node und die intern verwendete prom-client-Bibliothek wie folgt nutzt: const client = require('prom-client');. Das funktioniert nicht mehr wegen des Fehlers „Cannot find module ‘prom-client’" (Modul ‘prom-client’ nicht gefunden). Wir haben N8N_METRICS aktiviert und auch NODE_FUNCTION_ALLOW_EXTERNAL auf "prom-client" gesetzt. Das funktionierte in 1.123.6. Ist das eine Regression oder eine Breaking Change?

Bitte teile deinen Workflow

Teile die Ausgabe des letzten Nodes

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

Informationen zu deinem n8n-Setup

  • n8n-Version: 1.123.61
  • Datenbank (Standard: SQLite): Postgres
  • n8n-Einstellung EXECUTIONS_PROCESS (Standard: own, main): own, main
  • n8n wird ausgeführt über (Docker, npm, n8n cloud, Desktop-App): Docker auf render.com
  • Betriebssystem:

@Florian_Glappa

Das scheint eine Regression zu sein.

Du kannst deinen Start Command auf Render ändern, um das Paket vor dem Start von n8n zu installieren:

npm install prom-client && n8n start

Alternativ kannst du deine Docker-Image-Version auf 1.123.6 zurücksetzen, bis ein Fix veröffentlicht wird.

Wenn du ein GitHub Issue öffnen möchtest, kannst du es als Regression kategorisieren.

  • Betroffene Version: 1.123.61
  • Funktionierende Version: 1.123.6
  • Umgebung: Docker
  • Issue: prom-client wird nicht länger in das Root-node_modules gehievt, was require('prom-client') in Code Nodes bricht, obwohl NODE_FUNCTION_ALLOW_EXTERNAL gesetzt ist.

Hallo @Florian_Glappa,

Dieses Problem ist eine Nebenwirkung der kürzlichen Dependency-Bundling- und Package-Refactoring-Updates in n8n und kein beabsichtigter Breaking Change am Code-Node.

Warum es nicht mehr funktioniert:

Zuvor war prom-client als unbündelte, Top-Level-Abhängigkeit in n8ns root node_modules vorhanden. Das Setzen von NODE_FUNCTION_ALLOW_EXTERNAL=prom-client ermöglichte dem Code-Node, n8ns interne Kopie zu finden. In neueren Versionen hat n8n seine interne Paketstruktur/seinen Bundler aktualisiert (interne Abhängigkeiten isoliert), sodass prom-client nicht mehr direkt im root node_modules-Verzeichnis für Nodes Modul-Resolver verfügbar ist.

Sich auf n8ns interne Sub-Abhängigkeiten via require() zu verlassen, kann bei Versions-Updates fehlschlagen, wenn interne Pakete verschoben werden.


So beheben Sie es (Da Sie Docker auf Render.com verwenden):

Die dauerhafte Lösung besteht darin, prom-client explizit als externes Modul in Ihrem Docker-Container zu installieren, damit Node.js es immer auflösen kann.

Lösung 1: Custom Dockerfile (Empfohlen)

Wenn Sie über ein Dockerfile auf Render bereitstellen, aktualisieren Sie Ihr Dockerfile, um prom-client explizit zu installieren:

FROM n8nio/n8n:1.123.61

USER root
# Installiere prom-client global, damit Code-Node es require-n kann
RUN npm install -g prom-client
USER node

# Stelle sicher, dass NODE_PATH globale Module enthält
ENV NODE_PATH=/usr/local/lib/node_modules

Stellen Sie sicher, dass Ihre Umgebungsvariable gesetzt bleibt:

NODE_FUNCTION_ALLOW_EXTERNAL=prom-client

Lösung 2: Render-Startbefehl (Alternative)

Wenn Sie das offizielle n8nio/n8n-Image direkt auf Render ohne ein Custom Dockerfile ausführen, können Sie vor dem Start von n8n ein Start-Script oder einen Befehls-Override hinzufügen:

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

Sobald prom-client explizit in der Container-Umgebung installiert ist, funktioniert const client = require(‘prom-client’) Ihres Code-Nodes wieder einwandfrei!

Danke!

@Florian_Glappa könntest du dein vollständiges Setup teilen, einschließlich wie du das npm-Paket installierst? Nutzt du auch Task Runner, da das die Dinge verändern würde.

Ich installiere das npm-Paket nicht, da laut der Dokumentation n8n das Paket intern verwendet. Ich habe mich einfach mit den zwei Umgebungsvariablen, die ich im Beitrag erwähnt habe, in diese Funktionalität eingeklinkt.

@Florian_Glappa Nur zur Bestätigung: War es 1.123.6 oder 1.123.60, bevor du aktualisiert hast, und verwendest du externe Task Runner?

Es könnte sein, dass einige der letzten Härtungsmaßnahmen das Laden des Pakets verhindern.

Es war 1.123.6. Ich verwende keine externen Task Runner.

@Florian_Glappa Ich habe etwas recherchiert und es sieht so aus, als hätte es in Version 1.123.42 zu funktionieren aufgehört, aber es scheint wieder in der aktuellen neuesten Beta-Version zu funktionieren. Es könnte also sinnvoll sein, wenn möglich ein v2-Update zu machen.

Ich habe jedoch N8N-10510 als Dev-Ticket erstellt, um auch zu sehen, ob wir das beheben können.

Vielen Dank dafür, dass du dich damit auseinandergesetzt hast. Ein v2-Update erfordert Recherche zu Breaking Changes, das ist für uns im Moment nicht möglich. Wir freuen uns daher auf N8N-10510 :slight_smile:

Es könnte sich lohnen, im Hinterkopf zu behalten, dass v1 vor Ende des Jahres EoL sein wird, daher könnte es sich lohnen, dafür zu planen.

Zu diesem Problem… fix(Code Node): External modules not working even when allowed in n8n version 1.x by RomanDavydchuk · Pull Request #34093 · n8n-io/n8n · GitHub wurde erstellt, daher sollte alles bis Ende der Woche in Ordnung sein.

Ich sehe, dass es bereits gemergt und in Version 1.123.66 veröffentlicht wurde, das ist großartig! Leider gibt es von dieser Version nur amd- und arm-Docker-Images, nicht das generische. Ich nehme an, ich muss darauf warten?

Eine neue Version n8n@1.123.66 wurde veröffentlicht, die den GitHub PR 34093 enthält.

Wir haben schon lange nur die 2 Bilder gehabt. Welches hast du verwendet?