NEWS
[Entwicklungs-Tool] ioBroker dev-server
-
Ich habe das gleiche Problem unter Linux, Folgendermassen funktioniert es bei mir:
Terminal 1
dev-server run
Terminal 2
node --inspect=0.0.0.0:9229 .dev-server/default/node_modules/<Adapter-name>/ --logs --force
In VS code launch.json
{ "version": "0.2.0", "configurations": [ { "type": "node", "request": "attach", "name": "attach to ioBroker-Adapter", "address": "127.0.0.1", "port": 9229, "localRoot": "${workspaceFolder}", "remoteRoot": "${workspaceFolder}/.dev-server/default/node_modules/${workspaceFolderBasename}", "smartStep": true, "skipFiles": [ "<node_internals>/**" ] } }
Wichtig! Bei Verwendung von workspaceFolderBasename muß das Quellverzeichnis klein geschrieben werden, also nicht ioBroker.Xxx sondern iobroker.xxx
Ich habe gerade festgestellt, dass auch dev-server watch funtioniert und dann ohne Terminal 2 direkt attach der o.g. config aufzurufen
-
@dirkhe
ich probiere es mal aus -
@dirkhe sagte in [Entwicklungs-Tool] ioBroker dev-server:
Ich habe gerade festgestellt, dass auch dev-server watch funtioniert und dann ohne Terminal 2 direkt attach der o.g. config aufzurufen
Gehen breakpoints im ursprünglichen Code (nicht in .dev-server) dann auch?
-
@alcalzone ja, bei mir zickt die anzeige der punkte ein bisschen rum, aber anhalten tut er und dann kann man auch ganz normal debuggen.
-
@dirkhe Was genau meinst du mit zickt rum?
-
@alcalzone wenn man einen bp setzt, wird er rot und links in der liste der breakpoints angezeigt, wenn man dann einen 2. Gesetzt hat, wird der teilweise nicht angezeigt, beim 3. werden die dann wieder angezeigt. Habe ich jetzt aber nicht auf den dev server geschoben, sondern auf vc. Aber angehalten hat er immer korrekt.
-
Hallo, habe den dev-server jetzt auch laufen. So weit klappt es. Änderungen im admin-Verzeichnis (z.B. index_m.html) werden sofort wirksam. Allerdings erkennt er bei mir Änderungen im web-Verzeichnis leider nicht. Kann man das irgendwo aktivieren?
Danke und Grüße -
@s-bormann wo befindet sich dein web verzeichnis? Hot reload funktioniert nur mit der index_m.html und index_m.js.
In manchen fällen, wenn neue Dateien angelegt wurden, muss erstmalig "dev-server upload" ausgeführt werden. -
@schmakus sagte in [Entwicklungs-Tool] ioBroker dev-server:
@s-bormann wo befindet sich dein web verzeichnis? Hot reload funktioniert nur mit der index_m.html und index_m.js.
In manchen fällen, wenn neue Dateien angelegt wurden, muss erstmalig "dev-server upload" ausgeführt werden.Hallo,
das web-Verzeichnis befindet sich direkt im Adapter-Ordner (so wie der admin-Ordner auch). Es müsste nach iobroker-data/files/iqontrol gemappt werden. -
@s-bormann hat der Inhalt des web-ordners direkt etwas mit der admin config zu tun? wenn ja, sollte der web ordner nicht unterhalb von admin angelegt werden?
Ich habe die Erfahrung gemacht, dass das hot reload nur mit der index_m.html funktioniert. alles andere muss über dev-server upload erfolgen.
Jedoch wird der adapter immer neu gestartet, sollte sich etwas an einer Datei oberhalb vom admin ordner ändern. also z.b. der main.js oder sonstigen code files unter z.b. lib, etc. -
@schmakus Hi, der web-folder enthält Dateien, die mit dem web-Adapter als webseite zur Verfügung gestellt werden. Konkret geht es um iQontrol, eine Visualisierung. Hier liegen alle Dateien des Front-Ends im www-Folder.
-
irgendwo müsste ja konfiguriert sein, was "gewatcht" wird, vlt kann man da ja den www folder hinzufügen?
-
das müsste package.json, Abschnitt files sein
Der build wird durch das tool rimraf unterstützt
Die detailanweisungen wie der build (zumindest für den adapter) zu erfolgen hat steht im package
https://www.npmjs.com/package/@iobroker/adapter-devtiefer bin ich in die funktionsweise nicht eingestiegen.
ich mach das halt immer manuellfür mich ist nur der adapter und die adminoberfläche unterstützt anderes nicht
-
@oliverio sagte in [Entwicklungs-Tool] ioBroker dev-server:
das müsste package.json, Abschnitt files sein
Der build wird durch das tool rimraf unterstützt
Die detailanweisungen wie der build (zumindest für den adapter) zu erfolgen hat steht im package
https://www.npmjs.com/package/@iobroker/adapter-devtiefer bin ich in die funktionsweise nicht eingestiegen.
ich mach das halt immer manuellfür mich ist nur der adapter und die adminoberfläche unterstützt anderes nicht
Sieht bei mir so aus:
"files": [ "admin/", "!admin/i18n/", "img/", "lib/", "www/", "LICENSE", "main.js", "io-package.json", "package-lock.json" ],
Da steht ja www mit drin, klappt aber leider trotzdem nicht.
Habe jetzt ein vs-code-Plugin gefunden: fsdeploy. Damit kann ich erreichen, dass das www-Verzeichnis bei Änderungen geuploaded wird - mit diesem Umweg klappt es gut.
Denke trotzdem, dass das der dev-server selbst erledigen sollte, vielleicht ist es ja eine Anregung für die Entwickler.
Danke für Eure Hilfe!
VG
-
@s-bormann Dann erstelle doch ein Issue auf GitHub, damit dies nicht untergeht und der Entwickler es prüfen kann.
-
@s-bormann um was für Dateitypen handelt es sich denn? Habe aktuell die Info aus der DEV Gruppe, dass nur js/ts Dateien gewatched werden.
-
@schmakus html, js und css files. Aber auch die index.js wurde nicht deployed.
Ich habe es jetzt in vs code mit dem plugin fsdeploy gelöst, hier kann man source und target verzeichnisse angeben, die dann entsprechend synchron gehalten werden. Werde trotzdem ein issue eröffnen, vielleicht hilft es ja anderen.
Danke und VG!! -
@schmakus
ja, scheint sieht so aus.
der files Ordner sorgt dafür, das die Ordner zwar beobachtet werden und dann der entsprechende builder aufgerufen wird.
der builder kümmert sich aber nur um js und ts dateien -
@UncleSam
Hallo, kann es sein, dass der Befehl "dev-server update" den npm pack Befehl nicht ausführt um ein tgz file zu erzeugen. Ich bekomme folgenden Fehler:npm ERR! code ENOENT npm ERR! syscall open npm ERR! path /home/afuerhoff/ioBroker.fb-checkpresence/iobroker.fb-checkpresence-1.1.26.tgz npm ERR! errno -2 npm ERR! enoent ENOENT: no such file or directory, open '/home/afuerhoff/ioBroker.fb-checkpresence/iobroker.fb-checkpresence-1.1.26.tgz' npm ERR! enoent This is related to npm not being able to find a file. npm ERR! enoent
Wenn ich vorher selber npm pack ausführe funktioniert alles.
-
@afuerhoff @UncleSam
Ich habe dasselbe Problem.PS C:\iob-dev\ioBroker.frontier_silicon> dev-server update force Using profile name "force" Using adapter name "frontier_silicon" Updating everything... C:\iob-dev\ioBroker.frontier_silicon\.dev-server\force> npm update --loglevel error npm ERR! code ENOENT npm ERR! syscall open npm ERR! path C:\iob-dev\ioBroker.frontier_silicon\iobroker.frontier_silicon-0.1.1.tgz npm ERR! errno -4058 npm ERR! enoent ENOENT: no such file or directory, open 'C:\iob-dev\ioBroker.frontier_silicon\iobroker.frontier_silicon-0.1.1.tgz' npm ERR! enoent This is related to npm not being able to find a file. npm ERR! enoent npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\Jens\AppData\Local\npm-cache\_logs\2023-09-13T12_28_23_535Z-debug-0.log index.js update [profile] Update ioBroker and its dependencies to the latest versions Options: --version Show version number [boolean] -t, --temp Temporary directory where the dev-server data will be located [string] [default: ".dev-server"] --help Show help [boolean] Error: Command failed: npm update --loglevel error at checkExecSyncError (node:child_process:885:11) at Object.execSync (node:child_process:957:15) at DevServer.execSync (C:\Users\Jens\AppData\Roaming\npm\node_modules\@iobroker\dev-server\dist\index.js:1315:19) at DevServer.update (C:\Users\Jens\AppData\Roaming\npm\node_modules\@iobroker\dev-server\dist\index.js:286:14) at async Object.handler (C:\Users\Jens\AppData\Roaming\npm\node_modules\@iobroker\dev-server\dist\index.js:99:129) { status: 4294963238, signal: null, output: [ null, null, null ], pid: 8868, stdout: null, stderr: null }
Gibt es dazu schon eine Lösung? (npm pack habe ich bisher nicht probiert).
Ein entsprechendes issue zum dev-server habe ich auf github nicht gefunden.
Bevor ich eins aufmache, möchte ich hier nachfragen. Womöglich handelt es sich ja um einen bekannten Fehler oder einen Bedienfehler meinerseits.