NEWS
Hilfe bei Strukturierung von Klassen in TypeScript
-
@xenon Von
/opt/iobroker/node_modules/iobroker.javascript/libausgehend ist/opt/test/class.jsunter dem relativen Pfad../../../../test/class.jszu finden.Hier als Beispiel mal mit
/home/iobroker/test.js:

@alcalzone sagte in Hilfe bei Strukturierung von Klassen in TypeScript:
@xenon Von
/opt/iobroker/node_modules/iobroker.javascript/libausgehend ist/opt/test/class.jsunter dem relativen Pfad../../../../test/class.jszu finden.Danke dir, funktioniert !

Ist es sinnvoll das im /opt/iobroker anzulegen? Oder kann da was durch Updates des ioBrokers kaputt gehen?
-
@alcalzone sagte in Hilfe bei Strukturierung von Klassen in TypeScript:
@xenon Von
/opt/iobroker/node_modules/iobroker.javascript/libausgehend ist/opt/test/class.jsunter dem relativen Pfad../../../../test/class.jszu finden.Danke dir, funktioniert !

Ist es sinnvoll das im /opt/iobroker anzulegen? Oder kann da was durch Updates des ioBrokers kaputt gehen?
@xenon sagte in Hilfe bei Strukturierung von Klassen in TypeScript:
Ist es sinnvoll das im /opt/iobroker anzulegen? Oder kann da was durch Updates des ioBrokers kaputt gehen?
Also ich hatte meine Skripte immer in /opt/iobroker/scripts und bisher nie Probleme durch Updates etc. gehabt.
Allerdings bin ich jetzt endlich dem Rat von @Thomas-Braun gefolgt und und habe seit Kurzem den mirror nach /home/iobroker/scripts verlegt. Im Docker kann man das einfach nach Aussen mappen so dass ich auch weiterhin Zugriff mit VS Code habe
-
@xenon sagte in Hilfe bei Strukturierung von Klassen in TypeScript:
Ist es sinnvoll das im /opt/iobroker anzulegen? Oder kann da was durch Updates des ioBrokers kaputt gehen?
Also ich hatte meine Skripte immer in /opt/iobroker/scripts und bisher nie Probleme durch Updates etc. gehabt.
Allerdings bin ich jetzt endlich dem Rat von @Thomas-Braun gefolgt und und habe seit Kurzem den mirror nach /home/iobroker/scripts verlegt. Im Docker kann man das einfach nach Aussen mappen so dass ich auch weiterhin Zugriff mit VS Code habe
@fastfoot du nutzt das vs code tool? Ich habe es versucht, bekomme es aber nicht hin. Auch wenns jetzt OT ist, aber muss ich in meinem LXC irgendwie eine Freigabe erteilen? So sieht es bei mir immer aus (bin in sowas nicht so der Profi
)
-
@fastfoot du nutzt das vs code tool? Ich habe es versucht, bekomme es aber nicht hin. Auch wenns jetzt OT ist, aber muss ich in meinem LXC irgendwie eine Freigabe erteilen? So sieht es bei mir immer aus (bin in sowas nicht so der Profi
)
@xenon sagte in Hilfe bei Strukturierung von Klassen in TypeScript:
@fastfoot du nutzt das vs code tool? Ich habe es versucht, bekomme es aber nicht hin. Auch wenns jetzt OT ist, aber muss ich in meinem LXC irgendwie eine Freigabe erteilen?
ja, den vs code Editor unter Windows. Mit LXC kenne ich mich leider null aus, beim Docker ist dieses Mapping so eine Art mount mit dem man fast beliebig Ordner ausserhalb des Containers bringt. Als Standard empfiehlt sich zB /opt/iobroker so dass bei einem Wechsel/Update des Containers die iobroker installation völlig(!) unberührt bleibt. Falls LXC bzw LXD diese Möglichkeit nicht bietet würde ich das über einen mount probieren
Edit: Ich greife mit vs code direkt auf ein Share zu und benutze kein Add-on
-
@uwe72 sagte in Hilfe bei Strukturierung von Klassen in TypeScript:
Wie kann ich in einer dritten Datei die Klassen A und B einbinden? Ich weiß, dass ich A und B in global verschieben kann.
Geht nicht direkt im Skript-Editor wenn du global vermeiden willst. Packe alles in ein einzelnes Skript oder lagere die gemeinsamen Dinge wie die Klassen in externe Module (Dateien) aus, die du auf der Platte in einem Ordner ablegst, der für den Nutzer
iobrokerlesbar ist. Die kannst du dann perrequire("/pfad/zur/datei.js")laden.Geht das auch inzwischen mit Typescript?
Folgendes versuche ich gerade, Typescript liegt unter
/opt/iobroker/testmyModule.ts:
export class testClass { public static readonly testString = "alias.0"; }Wenn ich das aufrufen will:
const myModule = require('../../../test/myModule.ts'); console.warn(myModule.testClass.testString);bekomme ich folgende Fehlermeldung:
2023-01-24 09:04:15.881 - error: javascript.0 (2305) script.js.alias.Licht.Test: /opt/iobroker/test/myModule.ts:1 2023-01-24 09:04:15.881 - error: javascript.0 (2305) at wrapSafe (node:internal/modules/cjs/loader:1094:15) 2023-01-24 09:04:15.881 - error: javascript.0 (2305) at Module._compile (node:internal/modules/cjs/loader:1129:27) 2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1219:10) 2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Module.load (node:internal/modules/cjs/loader:1043:32) 2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Function.Module._load (node:internal/modules/cjs/loader:878:12) 2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Module.require (node:internal/modules/cjs/loader:1067:19) 2023-01-24 09:04:15.882 - error: javascript.0 (2305) at require (node:internal/modules/cjs/helpers:103:18) 2023-01-24 09:04:15.882 - error: javascript.0 (2305) at require (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:509:32) 2023-01-24 09:04:15.882 - error: javascript.0 (2305) at script.js.alias.Licht.Test:3:16 2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Script.runInContext (node:vm:141:12) 2023-01-24 09:04:15.883 - error: javascript.0 (2305) script.js.alias.Licht.Test: script.js.alias.Licht.Test:4 2023-01-24 09:04:15.883 - error: javascript.0 (2305) console.warn(myModule.testClass.testString); 2023-01-24 09:04:15.883 - error: javascript.0 (2305) ^ 2023-01-24 09:04:15.883 - error: javascript.0 (2305) TypeError: Cannot read properties of undefined (reading 'testClass') 2023-01-24 09:04:15.883 - error: javascript.0 (2305) at script.js.alias.Licht.Test:4:23 2023-01-24 09:04:15.883 - error: javascript.0 (2305) at Script.runInContext (node:vm:141:12) -
Geht das auch inzwischen mit Typescript?
Folgendes versuche ich gerade, Typescript liegt unter
/opt/iobroker/testmyModule.ts:
export class testClass { public static readonly testString = "alias.0"; }Wenn ich das aufrufen will:
const myModule = require('../../../test/myModule.ts'); console.warn(myModule.testClass.testString);bekomme ich folgende Fehlermeldung:
2023-01-24 09:04:15.881 - error: javascript.0 (2305) script.js.alias.Licht.Test: /opt/iobroker/test/myModule.ts:1 2023-01-24 09:04:15.881 - error: javascript.0 (2305) at wrapSafe (node:internal/modules/cjs/loader:1094:15) 2023-01-24 09:04:15.881 - error: javascript.0 (2305) at Module._compile (node:internal/modules/cjs/loader:1129:27) 2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1219:10) 2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Module.load (node:internal/modules/cjs/loader:1043:32) 2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Function.Module._load (node:internal/modules/cjs/loader:878:12) 2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Module.require (node:internal/modules/cjs/loader:1067:19) 2023-01-24 09:04:15.882 - error: javascript.0 (2305) at require (node:internal/modules/cjs/helpers:103:18) 2023-01-24 09:04:15.882 - error: javascript.0 (2305) at require (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:509:32) 2023-01-24 09:04:15.882 - error: javascript.0 (2305) at script.js.alias.Licht.Test:3:16 2023-01-24 09:04:15.882 - error: javascript.0 (2305) at Script.runInContext (node:vm:141:12) 2023-01-24 09:04:15.883 - error: javascript.0 (2305) script.js.alias.Licht.Test: script.js.alias.Licht.Test:4 2023-01-24 09:04:15.883 - error: javascript.0 (2305) console.warn(myModule.testClass.testString); 2023-01-24 09:04:15.883 - error: javascript.0 (2305) ^ 2023-01-24 09:04:15.883 - error: javascript.0 (2305) TypeError: Cannot read properties of undefined (reading 'testClass') 2023-01-24 09:04:15.883 - error: javascript.0 (2305) at script.js.alias.Licht.Test:4:23 2023-01-24 09:04:15.883 - error: javascript.0 (2305) at Script.runInContext (node:vm:141:12)@scrounger Es läuft gerade ein ähnliches/gleiches Thema auf:
https://forum.iobroker.net/topic/70069/einfügen-von-js-klassen-aus-eigenem-npm-modul/46?_=1699738698812Typescript-Klassen/Code lassen sich einbinden. Problem ist aktuell, dass wenn im externen Script was wie "sendTo()" vorkommt, dies dann in iobroker angemeckert wird, da nicht erkannt wird.
-
3 Topics zum gleichen Thema? EDIT - oh 2 Jahre alt...
-
@fastfoot du nutzt das vs code tool? Ich habe es versucht, bekomme es aber nicht hin. Auch wenns jetzt OT ist, aber muss ich in meinem LXC irgendwie eine Freigabe erteilen? So sieht es bei mir immer aus (bin in sowas nicht so der Profi
)
... ... ...