NEWS
Nach Nodejs 22 Update - Adapter nicht updatefähig
-
@ticaki sagte in Nach Nodejs 22 Update - Adapter nicht updatefähig:
Frag mich nicht wieso das was mit backitup zutun hat.
Nichts direkt. Allerdings macht der Paketmanager npm nichts mehr, wenn da eine nicht auflösbare Konstellation auftaucht.
Also Trouble bei yahaka verhindert ein Update von backitup (oder anderen Adaptern). -
Downgrade Yahka auf die 1.0.3 und es läuft unter node 22
-
Fazit?
Wenn ein Adapter nicht für die aktuelle Nodejs Version (hier:22) aktuell gehalten wird, kann man ioBroker-Adapter nicht mehr updaten? Der nicht korrekte Adapter muss dann deinstalliert werden!
Habe es mal bei chatGPT eingegeben:
️ Warum schlägt ein einzelnes Adapter-Upgrade unter Node.js 22 fehl?
Hintergrund: Node.js + native Module
Viele ioBroker-Adapter (z. B. modbus, zigbee, mqtt, shelly) nutzen sogenannte native Node-Module (geschriebene C++-Addons). Diese Module sind kompiliert gegen eine bestimmte Node-ABI-Version, z. B. für Node.js 18 oder 20.Wenn du ein Adapter-Update machst, dann passiert:
ioBroker nutzt npm → installiert Adapter inkl. package.json
npm prüft automatisch:
alle Abhängigkeiten
ob native Addons kompiliert werden müssen
Ist ein Abhängigkeitsmodul nicht kompatibel mit Node.js 22 → npm install schlägt fehl → Adapter-Update komplett abgebrochen
Und dabei prüft npm nicht nur das Zielmodul, sondern auch die Abhängigkeiten des gesamten Adapter-Trees, inklusive aller peer dependencies oder optionals.
Typisches Beispiel:
Du willst hm-rega updaten, aber:ein indirektes Abhängigkeitsmodul wie node-serialport ist noch nicht kompatibel mit Node.js 22
npm kann es nicht bauen → npm install schlägt komplett fehl → Adapter wird nicht aktualisiert
Warum kann ioBroker das nicht umgehen?
ioBroker selbst verwendet keine eigene Abhängigkeitsverwaltung – er nutzt npm install nativ. Das ist gewollt, da ioBroker-Adapter auf package.json-Basis gepflegt werden.Der Update-Prozess ist also immer so etwas wie:
cd /opt/iobroker/node_modules/iobroker.adaptername npm install iobroker.adaptername@latest
Wenn das fehlschlägt (egal bei welchem Modul), stoppt der gesamte Update-Prozess.
🧩 Lösungsideen (theoretisch):
Adapter in isolierte Container packen (→ wäre Overhead)
Adapter einzeln in eigene node_modules-Kontexte installieren (aber npm unterstützt das nicht gut)
iobroker könnte ein eigenes Paketmanagement nutzen (aber aktuell zu aufwendig)
EDIT
Da wäre dann die Frage, kann man das vorher durch einen Befehl prüfen lassen , bevor man das nodejs-update macht?Bzw. Info an die Entwickler immer nur
>={letzte geprüfte Nodejs-Version}
in der packgae.json zu verwenden und nicht spezielle Angaben=20 || = 22
. -
npm error notsup Required: {"node":"^18 || ^20"}
Das bedeutet halt es ist nur 18 oder 20 zulässig.
Sonst nix -
@oliverio Wäre ja auch für einen Adapter (hier: ring) dann ok. Aber das dadurch auch das Update für andere Adapter scheitert, ist mir neu.
EDIT
Bedeutet dann, wenn die Abhängigkeiten aller genutzten Adapter nicht gepflegt wird, mit deren genutzten Abhängigkeiten, APIs usw., kann man ioBroker, in der ,für jeden unterschiedlichen, Ausprägung, nicht mehr komplett nutzen. -
-
@oliverio sagte in Nach Nodejs 22 Update - Adapter nicht updatefähig:
@mcu
Wir hatten da letztens schon einen komischen Fall. Ich glaube das was @ticaki erwähnte. Das müsste sich mal jemand anschauen der viel Ahnung von npm hat.muss mal suchen, wenn es interessiert.
@thomas-braun hatte sich da durch die npm Abhängigkeiten durchgekämpft -
@oliverio sagte in Nach Nodejs 22 Update - Adapter nicht updatefähig:
@mcu
Wir hatten da letztens schon einen komischen Fall. Ich glaube das was @ticaki erwähnte. Das müsste sich mal jemand anschauen der viel Ahnung von npm hat.Ja das war ich, der das ansprochen hatte. Ist halt blöd das man nicht sofort beim nodejs-update eine Fehlermeldung bekommt, sondern irgendwann später mal.
-
@ticaki sagte in Nach Nodejs 22 Update - Adapter nicht updatefähig:
Ist halt blöd das man nicht sofort beim nodejs-update eine Fehlermeldung bekommt, sondern irgendwann später mal.
Im aktuellen Code (aber noch nicht released) ist zumindest ein rudimentärer Check drin.
Da wird nach dem nodejs-Ugrade eincd /opt/iobroker npm i --dry-run
ausgeführt und Fehler/Inkompaibilitäten werden dann ausgespuckt. Sieht dann im günstigsten Fall so aus:
echad@chet:/opt/iobroker $ npm i --dry-run up to date in 6s 248 packages are looking for funding run `npm fund` for details echad@chet:/opt/iobroker $
Im ungünstigen Fall kannst du eine ellenlange Liste mit Meldungen bekommen.
-
@thomas-braun sagte in Nach Nodejs 22 Update - Adapter nicht updatefähig:
@ticaki sagte in Nach Nodejs 22 Update - Adapter nicht updatefähig:
Frag mich nicht wieso das was mit backitup zutun hat.
Nichts direkt. Allerdings macht der Paketmanager npm nichts mehr, wenn da eine nicht auflösbare Konstellation auftaucht.
Also Trouble bei yahaka verhindert ein Update von backitup (oder anderen Adaptern).Nur zur Klarstellung - ich konnte damals noch pakete aktualisieren erst bei Backitup ist es dann nicht mehr gegangen - Apollon hat das mit Magie, Wetter, Sternenkonstellation erklärt ^^