NEWS
Script in mehrere Scripts aufteilen, ein Object pro Script
-
Hallo,
ich möchte ein etwas umfangreicheres Script schreiben und der Übersicht wegen den Code auf mehrere Scripte aufteilen. Aus Java bin ich es gewöhnt für jedes Object eine Datei zu erzeugen. Geht das auch im ioBroker.
Ich habe bei meiner Suche etwas von einem Global Ordner gefunden, finde ihn aber nicht im ioBroker.
Kann man eigene Module erstellen und dann mit require einbinden?Vorab vielen Dank für Antworten.
Grüße Martin -
@martin-5 sagte: Global Ordner gefunden, finde ihn aber nicht im ioBroker.
Im Expertenmodus von Javascript findet man die Gruppe "global". Skripte dort sollten nur häufig verwendete eigene Funktionen enthalten.
@martin-5 sagte in Script in mehrere Scripts aufteilen, ein Object pro Script:
Kann man eigene Module erstellen und dann mit require einbinden?
Kann man, wenn man weis, wie Module erstellt werden.
Wenn die eigenen Module unter "iobroker-data/modules" liegen:const clock = require('../../../iobroker-data/modules/test.js');
-
@paul53 Danke.
Den globalen Ordner habe ich nun gefunden. Ist ja auch keine Leistung.
Bei den Modulen bin ich nicht weiter gekommen. Ist aber auch nicht das was ich suche. Wenn man ein größeres Script schreiben möchte wird es schnell unübersichtlich.
Beispiel:
Ich erstelle eine Klasse aus der ich mehrere weitere Klassen ableite. In Java wird jede Klasse in eine Datei geschrieben wobei der Klassenname gleich dem Dateinamen ist. Alle Klassen in einem Verzeichnis sehen sich gegenseitig. Das ist recht praktisch und nach meinem Empfinden auch übersichtlich.
Aber vielleicht sollen die Scripte auch gar nicht so groß werden.Grüße Martin
-
@martin-5 sagte in Script in mehrere Scripts aufteilen, ein Object pro Script:
Den globalen Ordner habe ich nun gefunden
Globale Scripte haben - meiner bescheidenen Meinung nach - einen entscheidenden Nachteil: Sie werden in alle anderen Scripte "reinkopiert". Auch dort, wo man sie gar nicht benötigt.
Ich würde @paul53's Vorschlag mit den Modulen verfolgen ...
-
@codierknecht Exakt, der Mechanismus der Global Scripte ist sehr gewöhnungsbedürftig, dass dies da einfach in die common reingeschrieben wird, ob sie dort gebraucht werden oder nicht. Dies übrigens noch Java-Script-Instanzen-übergreifend.
Als ehemaliger Java-Entwickler wünscht man sich, dass man den Code den man öfters benötigt in einer "anderen Stelle" (externes File, Module,...) einmal schreibt und hinterlegt und dann in den common-Scripten per import/requires einzubindet.
Vor einem halben Jahr war ich da schon sehr weit dies auszuprobieren, hatte am Ende aber aufgegeben. Da es glaub mit TypeScript dann noch schwieriger war. Kann mich generell nicht mehr erinnern, was das Problem war. Müsste hier auch Posts dazu geben zu diesem Thema.
Hast Du das Thema mit den "externen Modulen" schon verfolgt?
-
@paul53 said in Script in mehrere Scripts aufteilen, ein Object pro Script:
@martin-5 sagte: Global Ordner gefunden, finde ihn aber nicht im ioBroker.
Im Expertenmodus von Javascript findet man die Gruppe "global". Skripte dort sollten nur häufig verwendete eigene Funktionen enthalten.
@martin-5 sagte in Script in mehrere Scripts aufteilen, ein Object pro Script:
Kann man eigene Module erstellen und dann mit require einbinden?
Kann man, wenn man weis, wie Module erstellt werden.
Wenn die eigenen Module unter "iobroker-data/modules" liegen:const clock = require('../../../iobroker-data/modules/test.js');
Kannst Du mir helfen. Habe eine Docker-Umgebung. Wo genau finde ich dein Verzeichnis "iobroker-data/modules"?
-
@uwe72 sagte: Docker-Umgebung.
Davon habe ich keine Ahnung.
@uwe72 sagte in Script in mehrere Scripts aufteilen, ein Object pro Script:
Wo genau finde ich dein Verzeichnis "iobroker-data/modules"?
Unter Linux unter /opt/iobroker/iobroker-data. Darunter das Verzeichnis "modules" erstellt und darin dann die Skripte (Node-Module). Daten unter "iobroker-data" werden beim Backup gesichert.
-
@paul53 Wie heißt denn bei dir der volle absolute Pfad zu "iobroker-data/modules"?
-
const clock = require('../../../iobroker-data/modules/test.js');
Hast Du mir ein kleines Beispiel für den Inhalt von test.js, müssen da so Dinge wie export.... oder was rein? Und wie der Inhalt dann im common Script eingebunden wird bzw. verwendet wird? DANKE
-
@uwe72
Ah du hast diesen thread auch schon gefunden -
hab dir in deinem anderen Thread einen Link zu einem Beispiel von paul gepostet
-
Habe für mich mal eine funktionierende Lösung in einem neuen Post aufgeschrieben:
https://forum.iobroker.net/topic/78632/info-auslagerung-von-scripte-aus-global-aufs-filesystem