NEWS
Symbole aus global scripts werden nicht aufgelöst
-
Hallo,
ich habe ein globales (TypeScript-) Script (im global Ordner) was Funktionen und Klassen nutzt die wiederum in einem anderen globalen Script definiert sind. Diese Konstellation scheint fast zufällig manchmal zu funktionieren und manchmal nicht. Wenn es nicht funktioniert bekomme ich eine Fehlermeldung, dass das entsprechende Element nicht definiert sei.
Ich habe ein bisschen herumexperimentiert und es scheint mit der Reihenfolge zusammen zu hängen in der die Script-dateien erstellt worden sind. Das scheint die selbe Reihenfolge zu sein in der sie auch compiliert werden.
Kann man diese Reihenfolge irgendwie ändern?
Oder wird es generell nicht unterstützt globale scripts in anderen globalen scripts wieder zu verwenden?viele Grüße,
schwane -
@schwane Generell sollte man Globale Scripts so weit wie möglich begrenzen, am besten ganz vermeiden. Jedes globale Script wird an komplett an jedes andere Script gehängt und braucht Resourcen. In 99% der Fälle kann man Scripte, die man überall braucht auch in einen "normalen" Ordner hängen und dann den Trigger (und evtl. notwendige Parameter) über eigene Datenpunkte in "0_userdata" organisieren.
-
@schwane sagte: Kann man diese Reihenfolge irgendwie ändern?
Mit "copy & paste".
-
@ahnungsbefreit Danke für die Info. Aber es gibt keine andere Möglichkeit code wieder zu verwenden, bzw in mehrere Dateien auf zu teilen?
Meine Idee war zB eine "Lighting" klasse zu implementieren und dann LivingroomLighting, BedroomLighting, etc davon erben zu lassen. Normalerweise würde ich da mehrere Dateien für erstellen und die dann über imports verknüpfen. Aber um so mehr ich von ioBroker mitbekomme scheint so eine Klassenstruktur sowieso nicht die Bevorzugte Architektur zu sein. Gibt es irgendwo einen Guide, wie man Scripte am besten organisiert?
-
@schwane sagte: Aber es gibt keine andere Möglichkeit code wieder zu verwenden, bzw in mehrere Dateien auf zu teilen?
Unter Node.js verwendet man dafür Node-Module.
-
Schaffe es leide nicht Module irgendeiner Art (Javascript / Typescritp / Node) mit dem Scripteditor zum laufen zu bringen, ich glaube er erkennt die Pfade der anderen Dateien nicht richtig. Gibt es irgendwo eine Anleitung oder ein Beispiel dazu?
-
@schwane sagte: die Pfade der anderen Dateien
Beispiel für eigene Node-Module unter "iobroker-data/modules":
const clock = require('../../../iobroker-data/modules/test.js'); log(clock(new Date()));
Inhalt der Datei "test.js":
'use strict'; module.exports = function (date) { let hour = date.getHours(); let min = date.getMinutes(); if(min < 10) min = '0' + min; return hour + ':' + min; };
-
@paul53 Danke! habe damit erst verstanden das ich es in einen anderen Ordner legen muss. Vorher hatte ich versucht das beide scrips über den Editor auf der Webplatform an zu legen. Also mit JavaScript funktioniert es jetzt. Eigendlich wollte ich aber in TypeScript programmieren und da habe ich dann noch ein bisschen länger dran gehangen. Habe es schließlich aber auch geschafft.
Für alle mit ähnlichem Problem:
Ich mich an dem vorletzten post in diesem Thread hier orientiert: Modulare Skripe
Anstatt dann in dem neuen node module in JavaScript zu programmieren habe ich dort TypeScript über npm als dev-dependency installiert. Jetzt kann ich dort mit TypeScript programmieren, und das Ergebnis per Import in ioBroker scripteditor benutzen. Nachteil ist das ich das externe TypeScript extra nochmal compilieren und dann Adapter neu starten muss. Allerdings kann ich so auf meinem Desktop in WebStorm entwickeln und dann am ende nur die compilierten .js Dateien synchronisieren. Bin also ganz zufrieden mit der Lösung.Danke nochmal @paul53 und @Ahnungsbefreit für eure Hilfe!