Umstieg auf NodeJS 20

Hallo,

Ich habe diese Warnung beim Ausführen von Aktionen in GitHub gesehen

Node.js 16 actions sind veraltet.

Tatsächlich ist NodeJS 16 in den Aktionen veraltet, und sie empfehlen, auf NodeJS LTS 20 umzusteigen (GitHub Actions: Transitioning from Node 16 to Node 20 - GitHub Changelog)

Unser Plan ist, alle Aktionen bis zum Frühjahr 2024 auf Node 20 umzustellen

Sollen wir versuchen, auf NodeJS 20.11.0 (npm 10.2.4) umzusteigen?

Eigentlich nutzen wir Node 18, aber ich habe trotzdem einen PR erstellt, um auf die neueste Version der GitHub-Aktionen zu wechseln.

Absolut heiß, um auf Node 20 für Gladys + die GitHub-Aktionen zu wechseln :slight_smile:

Danke für die PRs, lass mich wissen, wenn es bereit für die Überprüfung ist!

Also, bei Node 20 haben wir ein kleines Problem :thinking:

Nach zwei Tagen, in denen ich mich mit endlosen Docker-Builds herumgeschlagen habe, bin ich auf dieses Issue gestoßen NPM install stucks with node:20 · Issue #1946 · nodejs/docker-node · GitHub

Soweit ich das verstehe, kann man npm nicht in den node-20-Images für die Plattformen linux/arm/v6, linux/arm/v7 verwenden, und das passt zu meinem endlosen Build.

Diese Plattformen entsprechen den älteren Versionen der RPI (1, Zero / Zero W/WH und 2 Mod. A). Unterstützen wir weiterhin den Build für diese Plattformen?

Ansonsten ist ein Test-Image cicoub13/gladys:node-20 seit einigen Tagen auf meinem RPI4 deployed, keine Probleme.

Gladys - Node 20 by cicoub13 · Pull Request #2039 · GladysAssistant/Gladys · GitHub
Gladys Gateway NICHT GETESTET - chore(node): Update to node 20 by cicoub13 · Pull Request #159 · GladysAssistant/gladys-gateway · GitHub
Gladys Dokumentation - docs: Update to node 20 by cicoub13 · Pull Request #256 · GladysAssistant/v4-website · GitHub

Danke für die PRs und all die Arbeit @cicoub13 :clap:

Offensichtlich ist das jetzt behoben, oder?

Ich bin eher dafür, zu warten, bis das Node-20-Image stabil ist und auf diesen Plattformen funktioniert :slight_smile:

Nein, das sind Leute aus anderen Open-Source-Projekten, die ARM v7 entfernen, aber es ist immer noch nicht behoben. Wir können noch ein bisschen warten :hourglass_flowing_sand:

Ok.

Solange es keine Auswirkungen auf die Benutzer (oder die Entwicklung) hat, können wir bei Node 18 bleiben, denn eine Plattform zu entfernen, wird tatsächlich Auswirkungen haben.

Wenn wir irgendwann das Bedürfnis verspüren, auf Node 20 umzusteigen, werden wir das neu bewerten.

Halte uns auf dem Laufenden, falls sich etwas an den Images ändert :slight_smile:

Zur Info, der Bug ist immer noch vorhanden und betrifft auch Node 22:

Zur Info, ich musste den Support für arm/v6 mit dem Wechsel zu DuckDB fallen lassen, da die Node.js-Image-Version -slim basierend auf Debian dies nicht mehr unterstützt.

Ich habe dennoch den Eindruck, dass das Problem mit Node 20 und arm/v7 weiterhin besteht…

Wenn sich das fortsetzt, werden wir gezwungen sein, den Support für arm/v7 fallen zu lassen. Vielleicht ist das ein notwendiges Übel, da am Ende sogar die Pi 3 in arm64 sind, soweit ich weiß, also verlieren wir auch keine großen Plattformen.

Kleine Aktualisierung zu diesem Thema!

Wir werden bald zwei Major-Versionen von Node.js im Rückstand sein, da Node 22 voraussichtlich im Laufe des Monats LTS wird.

Ich habe beschlossen, die Unterstützung für arm/v7 fallen zu lassen, die ich ohnehin nicht mehr empfehle.

→ Die Mini-PCs, die ich empfehle, sind amd64
→ Die Raspberry Pi seit dem Pi 3 sind arm64

Meiner Meinung nach verlieren wir keine großen Plattformen und das ermöglicht uns wirklich, voranzukommen.

Das wird zwei Dinge ermöglichen:

  • Umstieg auf Node 22, sobald die LTS verfügbar ist
  • Beschleunigung der Builds (Wir werden von 4 Stunden auf einige Minuten umsteigen :stuck_out_tongue: …)

Der PR ist hier:

Edit: Ein Build dauert jetzt 42 Minuten statt 4 Stunden und 10 Minuten :sweat_smile:

Die verbleibenden 3 Stunden sind nur für den Build der armv7-Version?!

Es ist noch schlimmer, die Builds werden parallel gestartet, also ist die Gesamtzeit die Zeit des längsten Builds, also 4h10 für armv7 :slight_smile:

Node 22 ist jetzt LTS :partying_face:

Ich habe versucht, lokal zu aktualisieren, aber es ist nicht so einfach :sweat_smile:

Frontend startet nicht mit Node 22:

63: 0x10226dc60 node::StartExecution(node::Environment*, char const*) [/Users/pierre-gillesleymarie/.volta/tools/image/node/22.11.0/bin/node]
64: 0x10226db80 node::StartExecution(node::Environment*, std::__1::function<v8::MaybeLocal<v8::Value> (node::StartExecutionCallbackInfo const&)>) [/Users/pierre-gillesleymarie/.volta/tools/image/node/22.11.0/bin/node]
65: 0x1021d6460 node::LoadEnvironment(node::Environment*, std::__1::function<v8::MaybeLocal<v8::Value> (node::StartExecutionCallbackInfo const&)>, std::__1::function<void (node::Environment*, v8::Local<v8::Value>, v8::Local<v8::Value>)>) [/Users/pierre-gillesleymarie/.volta/tools/image/node/22.11.0/bin/node]
66: 0x1022fdc98 node::NodeMainInstance::Run(node::ExitCode*, node::Environment*) [/Users/pierre-gillesleymarie/.volta/tools/image/node/22.11.0/bin/node]
67: 0x1022fda90 node::NodeMainInstance::Run() [/Users/pierre-gillesleymarie/.volta/tools/image/node/22.11.0/bin/node]
68: 0x10227159c node::Start(int, char**) [/Users/pierre-gillesleymarie/.volta/tools/image/node/22.11.0/bin/node]
69: 0x19d314274 start [/usr/lib/dyld]

----- JavaScript stack trace -----

1: /Users/pierre-gillesleymarie/code/gladys/front/node_modules/esm/esm.js:1:34535
2: /Users/pierre-gillesleymarie/code/gladys/front/node_modules/esm/esm.js:1:34176
3: /Users/pierre-gillesleymarie/code/gladys/front/node_modules/esm/esm.js:1:34506
4: /Users/pierre-gillesleymarie/code/gladys/front/node_modules/esm/esm.js:1:173374
5: /Users/pierre-gillesleymarie/code/gladys/front/node_modules/esm/esm.js:1:173420
6: /Users/pierre-gillesleymarie/code/gladys/front/node_modules/esm/esm.js:1:173521
7: /Users/pierre-gillesleymarie/code/gladys/front/node_modules/esm/esm.js:1:258942
8: /Users/pierre-gillesleymarie/code/gladys/front/node_modules/esm/esm.js:1:261569
9: e (/Users/pierre-gillesleymarie/code/gladys/front/node_modules/esm/esm.js:1:262673)
10: get (/Users/pierre-gillesleymarie/code/gladys/front/node_modules/esm/esm.js:1:262740)

Bei der Suche stellte sich heraus, dass das Problem auch unter Node 20 auftritt:

Das Problem ist, dass preact-cli nicht mehr gewartet wird, man muss anscheinend zu vite wechseln:

Offensichtlich gibt es eine Lösung:

Quelle: preact-cli errors out with node 20.10.0 (but not with 20.9.0) · Issue #1822 · preactjs/preact-cli · GitHub

Danke, Internet! :heart_eyes:

Node 22 :rocket:

Der PR:

Ich habe gerade einen echten Test mit einem Docker-Testimage durchgeführt, und es war ein Erfolg!

@contributors Ich habe gerade in master gemerged, denkt daran, eure Umgebungen zu aktualisieren :slight_smile:

Oh das ist super, danke!! Jetzt kann ich Module in Node-RED hinzufügen, die mit Node18 nicht installiert werden konnten :yum:

@mutmut ich glaube, du verwechselst hier zwei Dinge, ich spreche von Gladys, nicht von Node-RED!

Über Node-RED wird hier gesprochen: