Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Hilfe bei Strukturierung von Klassen in TypeScript

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Hilfe bei Strukturierung von Klassen in TypeScript

    This topic has been deleted. Only users with topic management privileges can see it.
    • Xenon
      Xenon Forum Testing Developer @AlCalzone last edited by

      @alcalzone sagte in Hilfe bei Strukturierung von Klassen in TypeScript:

      Abgesehen davon müssen relative Pfade relativ zum sandbox.js-Modul vom Adapter sein, welches in /opt/iobroker/node_modules/iobroker.javascript/lib liegt. Deshalb zeigt @Xenon's Import auch auf /opt/iobroker/test/class.js und nicht dahin wo die Datei wirklich liegt.

      Das bedeutet nun genau? Wenn die Datei unter opt/iobroker/test/class.js liegt, was muss ich dann im import angeben, damit er nicht in den node_modules sucht?

      AlCalzone 1 Reply Last reply Reply Quote 0
      • AlCalzone
        AlCalzone Developer @Xenon last edited by

        @xenon Von /opt/iobroker/node_modules/iobroker.javascript/lib ausgehend ist /opt/test/class.js unter dem relativen Pfad ../../../../test/class.js zu finden.

        Hier als Beispiel mal mit /home/iobroker/test.js:
        11e3f836-55c6-47bb-8089-9656b5d8dd46-grafik.png

        U Xenon 2 Replies Last reply Reply Quote 1
        • U
          uwe72 @AlCalzone last edited by uwe72

          @alcalzone said in Hilfe bei Strukturierung von Klassen in TypeScript:

          /opt/iobroker/node_modules/iobroker.javascript/lib

          Ich bin zu doof dafür 😞

          599e4971-29f5-4966-ab10-2b0772ee3c27-image.png

          Update: Habe nun das Mirror-Verzeichnis rausgenommen (weiß nicht ob es wirklich damit zusammen hängt), funktioniert nun aber:
          8d4a7a6e-935f-4f18-9d21-60c8dbfe3e8e-image.png

          F 1 Reply Last reply Reply Quote 0
          • F
            fastfoot @uwe72 last edited by

            @uwe72 sagte in Hilfe bei Strukturierung von Klassen in TypeScript:

            Update: Habe nun das Mirror-Verzeichnis rausgenommen (weiß nicht ob es wirklich damit zusammen hängt), funktioniert nun aber:

            upps, das ist mir gar nicht aufgefallen dass da ein Unterschied ist. Aber an der Fehlermeldung kannst du es auch sehen, da stehen 5 x ../, also brauchst du im require nur 1x ../ so wie ich es schon mal gepostet hatte. Mir war es aber früher mal nicht gelungen unterhalb von /opt/iobroker zu kommen, das werde ich mal noch ohne mirror probieren

            1 Reply Last reply Reply Quote 0
            • AlCalzone
              AlCalzone Developer last edited by

              Ich bin mir nicht sicher, was Mirror damit zu tun haben soll. Alle Skripte laufen in einer Sandbox, die sich in /opt/iobroker/node_modules/iobroker.javascript/lib befindet. Von dort aus werden alle requires aufgelöst.

              Aber an der Fehlermeldung kannst du es auch sehen, da stehen 5 x ../, also brauchst du im require nur 1x ../ so wie ich es schon mal gepostet hatte

              Die Fehlermeldung ist irreführend. Der JS-Adapter versucht erst den gegebenen Pfad und wenn das schief läuft hängt er vorne noch ../../ an. Das wird dann geloggt.

              @uwe72 Du scheinst Docker zu verwenden. Welchen (absoluten) Pfad hat denn dein Test-Skript innerhalb Docker?

              1 Reply Last reply Reply Quote 0
              • Xenon
                Xenon Forum Testing Developer @AlCalzone last edited by Xenon

                @alcalzone sagte in Hilfe bei Strukturierung von Klassen in TypeScript:

                @xenon Von /opt/iobroker/node_modules/iobroker.javascript/lib ausgehend ist /opt/test/class.js unter dem relativen Pfad ../../../../test/class.js zu finden.

                Danke dir, funktioniert ! 🙂

                Ist es sinnvoll das im /opt/iobroker anzulegen? Oder kann da was durch Updates des ioBrokers kaputt gehen?

                F 1 Reply Last reply Reply Quote 0
                • F
                  fastfoot @Xenon last edited by

                  @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 1 Reply Last reply Reply Quote 1
                  • Xenon
                    Xenon Forum Testing Developer @fastfoot last edited by Xenon

                    @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 😄 )

                    2021-11-15 18_20_30-Window.png

                    F T 2 Replies Last reply Reply Quote 0
                    • F
                      fastfoot @Xenon last edited by fastfoot

                      @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

                      1 Reply Last reply Reply Quote 1
                      • Xenon
                        Xenon Forum Testing Developer last edited by

                        @fastfoot kommando zurück....... hatte https aktiv.... jetzt gehts 🙂

                        1 Reply Last reply Reply Quote 0
                        • Scrounger
                          Scrounger Developer @AlCalzone last edited by

                          @alcalzone

                          Geht das auch inzwischen mit Typescript?

                          Folgendes versuche ich gerade, Typescript liegt unter /opt/iobroker/test

                          myModule.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)
                          
                          U 1 Reply Last reply Reply Quote 0
                          • U
                            uwe72 @Scrounger last edited by

                            @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?_=1699738698812

                            Typescript-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.

                            1 Reply Last reply Reply Quote 1
                            • T
                              ticaki Developer last edited by ticaki

                              3 Topics zum gleichen Thema? EDIT - oh 2 Jahre alt...

                              Lösung:
                              https://github.com/ticaki/script-library-example

                              1 Reply Last reply Reply Quote 0
                              • T
                                ticaki Developer @Xenon last edited by ticaki

                                ... ... ...

                                1 Reply Last reply Reply Quote 0
                                • First post
                                  Last post

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                1.0k
                                Online

                                31.7k
                                Users

                                79.8k
                                Topics

                                1.3m
                                Posts

                                6
                                29
                                1783
                                Loading More Posts
                                • Oldest to Newest
                                • Newest to Oldest
                                • Most Votes
                                Reply
                                • Reply as topic
                                Log in to reply
                                Community
                                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                The ioBroker Community 2014-2023
                                logo