NEWS
Best practice für node.js und npm Update unter Windows ?
-
Hi Leute,
nachdem ich nun mehrere vergebliche Updateversuche für node.js und npm bei meiner iobroker Umgebung unter Windows hinter mir habe würde ich mich freuen wenn mir jemand eine kurze step-by-step Anleitung schreiben könnte, wie man ein entsprechendes Update der beiden Komponenten durchführen kann, ohne dass danach Probleme am laufenden Band passieren …
Ich habe mehrere Anleitungen hier im Forum durchprobiert, hab mir aber jedes Mal entweder iobroker komplett zerschossen oder zumindest einzelne Adapter irreparabel beleidigt(meistens den SQL Adapter).
Es half in allen Fällen nur ein kompletter Restore meiner iobroker-VM ...
Weiters wäre es toll, wenn iobroker die Installation von node.js Versionen, mit denen es bekannte Probleme gibt, gar nicht zulassen würde, oder zumindest davor warnen würde...
Danke für eure Unterstützung.
Beste Grüße
-
Hey,
ich bin mir nicht sicher ob es genügend Windows-User gibt die hier genügend best practices gesammelt haben.
Von daher hier einige Allgemeine Infos die, aber allgemeingültig sein sollten.
ioBroker unterstützt grundsätzlich die LTS Versionen von nodejs, also aktuell 6,8 und (noch nicht zu empfehlen weil einige Adapter Libraries brauchen die noch Probleme machen) 10. Dies wird vom Admin-UI auch geprüft und ggf. eine Meldung angezeigt das eine nicht unterstützte nodejs Version genutzt wird.
Mehr kann ioBroker nicht tun weil das nodejs ja auf dem Rechner getrennt von ioBroker installiert ist. Da hat iobroker keine Kontrolle.
Jetzt ist es noch so , dass nodejs 8.x und 10.x eine npm Version mitbringen die grundsätzlich Bugs hat die bei IoBroker zu grossen problemen führen können. Das haben wir auch versucht bei allen Installationsprozessen zu prüfen und zu warnen. Also hier gilt npm 5.0.0 bis 5.7.0 sind böse und kaputt. Alles ab mpm 5.7.1 geht wieder. AUch hier gilt npm existiert getrennt von ioBroker … also kann man nur im Nachhinein prüfen.
Wenn man die nodejs Version uodatet muss man die Pakete neubauen die ggf. kompilirte Komponenten enthalten - SQL Adapter beispielsweise wegen sqlite für die die das nutzen anstelle einer echten Datenbank.
Von daher aus meiner Erfahrung:
-
ioBroker stoppen
-
nodejs Version updaten (aktuell wäre 6 oder 8 zu empfehlen). Bei Windows am besten den offiziekllen Installer nehmen
-
npm Version prüfen (cmd -> npm -v) und ggf updaten (npm -g install npm@latest)
-
für WIndows fehlt noch das reinstall.sh, aber es sollte (am besten als Admin) ein Rebuild reichen (cmd -> cd iobroker-Verzeichnis -> npm rebuild)
-
dann starten und alles sollte noch tun
Wenn nicht - und auch hier vor allem was genau bei sql kaputt geht, am besten posten ... das wäre interessant
-
-
Bei Windows am besten den offiziekllen Installer nehmen
- npm Version prüfen (cmd -> npm -v) und ggf updaten (npm -g install npm@latest) `
Eine globale Version 6.1.0 hilft nicht, denn bei Adapter-Update wird auf die Version 5.6.0, die bei der Installation von nodejs 8 installiert wird, zurückgegriffen mit den entsprechenden Meldungen und Abbruch.
Ich habe es nach vielen vergeblichen Versuchen so gemacht: nodejs 10.5.0 installiert mit npm 6.1.0 und anschließend die https://nodejs.org/download/release/v8.11.3/win-x64/ ausgetauscht gegen die Version 8.11.3.
- npm Version prüfen (cmd -> npm -v) und ggf updaten (npm -g install npm@latest) `
-
Heisst das unter WIndows geht ein npm update mit "-g" nicht sodass es auch verwendet wird? Na das ist ja schrott
-
Das kann ich bestätigen.
-
Vielen Dank @apollon und paul !
Das waren die entscheidenden Hinweise.
Jetzt hats geklappt!
Falls sonst noch jemand vor dem Problem steht hier nochmal die Schritte die bei mir zum Erfolg geführt haben:
****<size size="150">- ioBroker stoppen
-
nodejs Version updaten (Windows Installer 10.5.0 inkl. npm 6.1.0 von nodejs.org downloaden und installieren)
-
https://nodejs.org/download/release/v8.11.3/win-x64/ austauschen gegen die Version 8.11.3.
-
elevated cmd -> cd iobroker-Verzeichnis -> npm rebuild ausführen
-
iobroker starten</size>****
Soweit läuft alles bei mir.
Einzig neue Fehlermeldung seit dem Update ist folgende:
host.iobroker 2018-06-24 13:51:12.625 error Caught by controller[0]: Cannot parse "C:\ioBroker\node_modules\iobroker.vis\lib/../../iobroker.vis-plumb/io-package.json": SyntaxError: Unexpected string in JSON at position 318
und der statistics Adapter läuft jetzt nicht mehr, da der aber noch alpha Status ist, denke ich es liegt eher am Adapter …
host.iobroker 2018-06-24 13:59:06.205 info Restart adapter system.adapter.statistics.0 because enabled host.iobroker 2018-06-24 13:59:06.205 error instance system.adapter.statistics.0 terminated with code 0 (OK) host.iobroker 2018-06-24 13:59:06.205 error Caught by controller[0]: at tryOnImmediate (timers.js:768:5) host.iobroker 2018-06-24 13:59:06.205 error Caught by controller[0]: at runCallback (timers.js:810:20) host.iobroker 2018-06-24 13:59:06.205 error Caught by controller[0]: at Immediate._onImmediate (C:\ioBroker\node_modules\iobroker.js-controller\lib\adapter.js:3429:38) host.iobroker 2018-06-24 13:59:06.205 error Caught by controller[0]: at Adapter.emit (events.js:214:7) host.iobroker 2018-06-24 13:59:06.205 error Caught by controller[0]: at emitTwo (events.js:126:13) host.iobroker 2018-06-24 13:59:06.205 error Caught by controller[0]: at Adapter. <anonymous>(C:\ioBroker\node_modules\iobroker.statistics\main.js:988:13) host.iobroker 2018-06-24 13:59:06.205 error Caught by controller[0]: at newSumDeltaValue (C:\ioBroker\node_modules\iobroker.statistics\main.js:436:11) host.iobroker 2018-06-24 13:59:06.205 error Caught by controller[0]: at Object.waterfall (C:\ioBroker\node_modules\iobroker.statistics\node_modules\async\dist\async.js:5334:5) host.iobroker 2018-06-24 13:59:06.205 error Caught by controller[0]: at nextTask (C:\ioBroker\node_modules\iobroker.statistics\node_modules\async\dist\async.js:5324:14) host.iobroker 2018-06-24 13:59:06.205 error Caught by controller[0]: at async.waterfall.delta (C:\ioBroker\node_modules\iobroker.statistics\main.js:439:36) host.iobroker 2018-06-24 13:59:06.205 error Caught by controller[0]: TypeError: Cannot read property 'val' of undefined statistics.0 2018-06-24 13:59:06.156 debug stopped yearreset statistics.0 2018-06-24 13:59:06.156 debug stopped quarterreset statistics.0 2018-06-24 13:59:06.156 debug stopped monthreset statistics.0 2018-06-24 13:59:06.156 debug stopped weekreset statistics.0 2018-06-24 13:59:06.156 debug stopped dayreset statistics.0 2018-06-24 13:59:06.156 debug stopped yearsave statistics.0 2018-06-24 13:59:06.156 debug stopped quartersave2 statistics.0 2018-06-24 13:59:06.156 debug stopped quartersave1 statistics.0 2018-06-24 13:59:06.156 debug stopped monthsave statistics.0 2018-06-24 13:59:06.156 debug stopped weeksave statistics.0 2018-06-24 13:59:06.156 debug stopped daysave statistics.0 2018-06-24 13:59:06.156 debug stopped 5min statistics.0 2018-06-24 13:59:06.156 info cleaned everything up... statistics.0 2018-06-24 13:59:06.156 error TypeError: Cannot read property 'val' of undefined at async.waterfall.delta (C:\ioBroker\node_modules\iobroker.statistics\main.js:439:36) at nextTask (C:\ioBroker\node_modules\iobroker.statist statistics.0 2018-06-24 13:59:06.156 error uncaught exception: Cannot read property 'val' of undefined</anonymous>
Vielen Dank an alle!
Beste Grüße
-
-
VIS plump: da ist eine Datei kaputt am besten installiert den Adapter nochmal drüber/neu
Statistics: ja scheinbar Adapter Fehler. Mach ggf issue auf beim adapter
Gesendet vom Handy …
-
Hi, wo liegt die node.exe normalerweise bei Windows ? Ich finde die garnicht so das ich sie austauschen könnte :roll:
So..habe es gefunden. Der ioBroker läuft aber die Adminoberfläche kann ich nach wie vor nicht aufrufen.
-
node-v6.14.3-x64.msi gib, werde ich gleich updaten. `
Mit nodejs Version 6 gibt es keine Probleme; erst mit den höheren Versionen (8, 10) tauchen Probleme auf. -
<u>Mein vorgeschlagener Weg zur NPM-Korrektur bei Node-Version 6-10:</u>
-
Nodejs in Version 8.11.3 LTS von https://nodejs.org/en/download/ je nach Windows-OS in der 32 oder 64Bit-Variante installieren.
-
Der in der Node-Installation enthaltene npm-Paketmanager ist veraltet.
-
Mit
npm install -g npm@6
in der Kommandozeile die aktuelle Version 6.3 nachinstallieren. -
Aus dem Ordner
C:\Program Files\nodejs\node_modules\npm
die Dateinpmrc
sichern. (bei 64bit) -
Den Ordner
C:\Program Files\nodejs\node_modules\npm
löschen oder umbenennen. -
Anschließend den Ordner
C:\Users\<hier_deine_windows_user_id_einfügen>\AppData\Roaming\npm\node_modules\npm
nachC:\Program Files\nodejs\node_modules\npm
kopieren und damit das veraltete npm aus der Nodejs-Installation updaten.</hier_deine_windows_user_id_einfügen> -
Die gesicherte Datei
npmrc
wieder in den OrdnerC:\Program Files\nodejs\node_modules\npm
zurückspielen. Eine vorhandene Datei dabei überschreiben. -
Das muss bei jedem Node-Update gemacht werden.
-
-
Ich möchte dieses Thema noch einmal aufgreifen, weil es mich viel Zeit gekostet hat den für mich, aber sicherlich auch für viele andere, richten Weg zum Upgrade von nodejs auf 12.16.3 unter Windows zu finden.
Die vorstehede Anleitung enthält die entscheidenen Hinweise, führte mich mich aber nicht (mehr) zum Erfolg.Meine Systemumgebung:
Platform: Windows
os: win32
Architecture: x64
js-controller: 3.0.21
Installationspfad: C:\iobroker\InstanznameNode.js vorher: v10.17.0
NPM (bleibt unverändert): 6.14.4Die ursprüngliche Installtion wurde mithilfe des auf der Homepage befindlichen Windows-Setups durchgeführt.
Vor der eigentlichen Installation habe ich unter C:\iobroker\Instanzname den Befehl
npm install --global windows-build-tools
ausgeführt. Dies wurde ohne Fehlermeldung durchgeführt und schadet bestimmt nicht.Alle folgenden Befehle werden unter
C:\iobroker\Instanzname
ausgeführt.- Stopp der iobroker-Instanz
iobroker stop
- Unter Dienste den automatischen Start von iobroker temporör auf manuell stellen, damit er sich nicht nach jedem Reboot startet
- Deinstallation der alten Node.js-Installation über die normale Windows-Deinstallation (Programme entfernen) mit anschließendem Reboot (sicher ist sicher)
- Löschen des Verzeichnisses
C:\Program Files\nodejs
, falls noch vorhanden - Node.js node-v12.16.3-x64 von der Homepage runtergeladen und nach Standardvorgaben installiert; Chocolate auch installiert (aber keine Ahnung, ob es benötigt wird); dies installiert die aktuelle Version unter
C:\Program Files\nodejs
; anschließend sicherheitshalber wieder ein Neustart - Umbenennen des Ordners
C:\iobroker\Instanzname\nodejs
(z.B. in nodejs_10_17_0) - Kopieren des Ordners
C:\Program Files\nodejs
nachC:\iobroker\Instanzname\nodejs
- jetzt sollte der Befehl
node -v
schon die aktuelle Verison ausgeben - die Datei
nodevars.bat
aus dem umbenannten Ordner nodejs_10_17_0 in den neuen nodejs-Ordner kopieren; hierdurch wird die cmd-Box auch weiterhin mit dem richtigen Umgebungsvariablen und im richtigen Ordner gestartet - Die cmd-Box zum Test neustarten
- ich habe jetzt noch den Befehlt
npm rebuild
ausgeführt; ob es notwendig ist weiß ich nicht - den Dienst wieder auf automatisch stellen und mit
iobroker start
iobroker starten
Entscheidend war für mich zu verstehen, dass der iobroker nach Standard-Installation sein nodejs bereits im eigenen Verzeichnis mitbringt und jede Installation einer neuen Version unter Program Files garkeine Veränderung mit sich brachte.
Sollte ich bei irgendetwas nicht richtig liegen bitte ich um Korrektur. Alle Tipps natürlich auf eigene Gefahr. Bei mir hat es so funktioniert. - Stopp der iobroker-Instanz