Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. [gelöst] npm registry umstellen

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] npm registry umstellen

    This topic has been deleted. Only users with topic management privileges can see it.
    • smartmeta
      smartmeta last edited by smartmeta

      Hallo,

      bei mir läuft im Docker ein Nexus für eigne npm-Repositories.
      (Genaugenommen ein eigenes Repo und ein Repo-Proxy der auf registry.npmjs.org zeigt und eine Repository Gruppe über die man aus beiden Repos laden kann.)

      Ich möchte nun das der iobroker nicht bei registry.npmjs.org nach den Modulen (die man im Javascript-Adapter einbinden kann) sucht, sondern in meinem Repo
      registry=http://<IP>:8081/repository/npm_group/

      dazu habe ich in
      /opt/iobroker die registry in der .npmrc gesetzt und ein
      sudo -u iobroker login

      (Anmeldung hat funktioniert.)

      Anschliessend noch
      sudo service iobroker stop
      sudo service iobroker start

      Wenn ich nun im Javascript-Adapter ein neues Modul angebe, soll dies aus der Registry http://<IP>:8081/repository/npm_group/ geladen werden.
      Leider nimmt der iobroker noch immer registry.npmjs.org.

      Kann mir bitte jemand einen Tipp geben was ich noch machen muss, damit das klappt.

      1 Reply Last reply Reply Quote 0
      • smartmeta
        smartmeta last edited by smartmeta

        Habe es gefunden.

        Ich hatte die .npmrc nicht Verzichnis des Javascript-Adapters.

        Hier noch mal der Ablauf:

        cd /opt/iobroker/node_modules/iobroker.javascript
        sudo -u iobroker vi .npmrc
        

        und da in die Datei die neue Registry eintragen

        registry=http://<HOST>:8081/repository/npm_group/
        

        Dann in die package.json im Abschitt Dependencies das neue Modu aus dem Repo eintragen
        z.B.

        "iobroker-tools": "^1.0.0",
        

        und dann noch

        sudo -u iobroker npm i
        

        Aber leider kann ich das Modul noch nicht in den Scripten nutzen. Mal sehen ...

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

          @smartmeta sagte in npm registry umstellen:

          Dann in die package.json im Abschitt Dependencies das neue Modu aus dem Repo eintragen

          So geht das auch nicht. Du musst die dependency in der Adapterkonfiguration des JS-Adapters hinzufügen.

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

            @AlCalzone

            Vielen Dank für dein schnelles Feedback @AlCalzone.

            Ich wollte auf dem Weg schon mal sicherstellen, dass das Modul überhaupt geladen werden kann.

            Denn im nächsten Schritt habe ich es in

            9254f077-cb31-413a-a624-09379a14f7f8-grafik.png

            eingetragen, in der Hoffunung, dass es dann im Script nutzbar wird.
            Geht aber nicht. 😉


            Noch mal kurz zusammengefasst:
            Es geht erst mal nur um ein ganz einfaches Modul:

            export class A {
              public add(a: number, b: number): number {
                return a + b;
              }
            }
            

            Das TS-Script ist super simpel:

            import {A} from '/oho-iobroker-tools/A/A';
            const a = new A;
            const r = a.add(1,2);
            console.log("\nR = "+r);
            
            '* * * * *'
            
            

            Aber (wie du schon schreibst) funktioniert das nicht.

            ef725375-b7d1-41b2-9f18-44f33b942623-grafik.png


            Ich habe mir eben mal den Quellcode des Javascript.Adapers angesehen und festgestellt, dass du/ihr virtual-tsc verwendet.
            Jetzt ist mir auch klar warum das Modul nicht im node-modules geladen wird und nicht richtig erreichbar ist.

            Wie ist denn der saubere Weg (sprich über das iobroker Admin interface) mein Modul mit

            provideAmbientDeclarations()
            

            bekannt zu machen?
            Leider habe ich auch in den Sourcen vom virtual-tsc keine entsprechenden Tests gefunden die sowas vorsehen.
            Oder gibt es noch irgendwo eine Dokumentation über TypeScript im Javascript.Adapter die ich noch nicht gefunden habe?

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

              @smartmeta Sofern das Modul in package.json unter "types" die Definitionsdateien benennt, einfach in der Adapterkonfiguration hier einfügen:
              55d8db8e-9a61-4371-bad8-fcd302a407ee-grafik.png
              Typdefinitionen werden nicht mehr standardmäßig geladen, weil manche Typdefinitionen alleine (z.B. googleapis) mehrere 100 MB RAM benötigen.

              Außerdem ist dein Import-Pfad falsch - der führende Slash muss weg.

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

                @AlCalzone

                vielen Dank für die Info. Schaue ich mir an...

                1 Reply Last reply Reply Quote 0
                • smartmeta
                  smartmeta last edited by smartmeta

                  @AlCalzone

                  Ich habe jetzt die Typdefinitionen in der package.json meines Moduls angegeben und

                  e00e1349-daa4-4640-be5a-f67f048849fd-grafik.png

                  aber damit wird doch jetzt noch nicht eine neue Version des Moduls aus dem npm-repository gezogen, oder?

                  Mir ist noch nicht ganz klar, wo ich sehe, dass das Modul erfolgreich geladen wurde.
                  Oder muss ich es doch in der package.json selber eintragen?

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

                    @smartmeta Updates macht der JS-Adapter nicht. Das musst du dann wohl manuell updaten:

                    cd /opt/iobroker/node_modules/iobroker.javascript
                    npm i oho-iobroker-tools@latest
                    

                    oder (@ver.si.on)

                    Dann Adapter neu starten.

                    1 Reply Last reply Reply Quote 0
                    • smartmeta
                      smartmeta last edited by smartmeta

                      Hi @AlCalzone,

                      okay

                      npm i oho-iobroker-tools@latest
                      

                      und Adapter neu starten habe ich gemacht. Leider keine Verbesserung.

                      Ich habe den Adapter jetzt mal mit Chrome remote gedebuggt.
                      Die Types werden auch laut log richtig geladen

                      2020-07-02 15:27:56.404  - debug: javascript.0 (9826) Loaded TypeScript definitions for node: ["@types/node/index.d.ts","@types/node/base.d.ts","@types/node/globals.global.d.ts","@types/node/assert.d.ts","@types/node/globals.d.ts","@types/node/async_hooks.d.ts","@types/node/buffer.d.ts","@types/node/child_process.d.ts","@types/node/cluster.d.ts","@types/node/console.d.ts","@types/node/constants.d.ts","@types/node/crypto.d.ts","@types/node/dgram.d.ts","@types/node/dns.d.ts","@types/node/domain.d.ts","@types/node/events.d.ts","@types/node/fs.d.ts","@types/node/http.d.ts","@types/node/http2.d.ts","@types/node/https.d.ts","@types/node/inspector.d.ts","@types/node/module.d.ts","@types/node/net.d.ts","@types/node/os.d.ts","@types/node/path.d.ts","@types/node/perf_hooks.d.ts","@types/node/process.d.ts","@types/node/punycode.d.ts","@types/node/querystring.d.ts","@types/node/readline.d.ts","@types/node/repl.d.ts","@types/node/stream.d.ts","@types/node/string_decoder.d.ts","@types/node/timers.d.ts","@types/node/tls.d.ts","@types/node/trace_events.d.ts","@types/node/tty.d.ts","@types/node/url.d.ts","@types/node/util.d.ts","@types/node/v8.d.ts","@types/node/vm.d.ts","@types/node/worker_threads.d.ts","@types/node/zlib.d.ts"]
                      2020-07-02 15:29:06.080  - debug: javascript.0 (9826) Loaded TypeScript definitions for request: []
                      2020-07-02 15:30:22.450  - debug: javascript.0 (9826) Loaded TypeScript definitions for oho-iobroker-tools: ["@types/oho-iobroker-tools/lib/index.d.ts"]
                      2020-07-02 15:31:05.172  - info: javascript.0 (9826) requesting all states
                      

                      Trotzdem kann ich das Modul nicht in den Scripten nutzen:
                      a81ade0f-02f9-4aa8-afc4-02df019fa2d5-grafik.png

                      Das Modul habe ich auch schon auf das nötigste reduziert um Fehler auszuschliessen (naja die test.js könnte ich auch noch löschen):
                      d56eda23-274a-4050-8d1f-96d641fbd9ff-grafik.png

                      Zusätzlich habe ich noch mal ein neues Node-Projekt erstellt, in dem genau der Code (wie im Script) verwendet wird:

                      import {A} from 'oho-iobroker-tools';
                      
                      const a = new A();
                      console.log (a.add(1,2));
                      
                      

                      Da klappt das wunderbar.


                      Wo muss ich den Breakpoint setzen,
                      damit ich mit

                      iobroker stop iobroker.javascript
                      >The adapter "javascript.0" was stopped.
                      
                      node --inspect-brk=0.0.0.0:9229 node_modules/iobroker.javascript/main.js --debug
                      

                      das Ausführen meine Sciptes MODULEX im Javascript-Adapter debuggen kann?

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

                        @smartmeta das @types vor dem modulnamen erscheint mir in deinem Fall falsch. Dein Modul bringt ja die Typen mit. Müsste ich mir mal anschauen. Gibt es das auf npm?

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

                          @AlCalzone

                          Nein, das gibt es nicht auf NPM. Ich habe leider nicht genug Zeit um ein Modul auf NPM dauerhaft zu betreuen.

                          Habs dir hier mal angehangen:

                          oho-iobroker-tools-1.0.4.tgz

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

                            @smartmeta Fix ist hier:
                            https://github.com/ioBroker/ioBroker.javascript/pull/610

                            Du kannst ihn testen, indem du den Adapter von der URL https://github.com/AlCalzone/ioBroker.javascript/tarball/types-resolve-fixes installierst.

                            AlCalzone created this issue in ioBroker/ioBroker.javascript

                            closed Fixes for type definition resolution #610

                            1 Reply Last reply Reply Quote 0
                            • smartmeta
                              smartmeta last edited by

                              @AlCalzone sagte in npm registry umstellen:

                              https://github.com/AlCalzone/ioBroker.javascript/tarball/types-resolve-fixes

                              Hi @AlCalzone,
                              vielen Dank schon mal für den PR. Sehr cool, dass du mir hilfst.

                              Ich habe

                               "iobroker.javascript": "https://github.com/AlCalzone/ioBroker.javascript/tarball/types-resolve-fixes",
                              

                              in die package.json eingetragen und

                              sudo -u iobroker  npm i
                              

                              aufgerufen. Bekomme nun

                              ╭─────────────────────────────────────────────────────────╮
                              │                                                         │
                              │ Manual installation of ioBroker is no longer supported  │
                              │ on Linux, OSX and FreeBSD!                              │
                              │ Please refer to the documentation on how to install it! │
                              │ https://github.com/ioBroker/ioBroker/wiki/Installation  │
                              │                                                         │
                              ╰─────────────────────────────────────────────────────────╯
                              

                              Wie ist denn der vorgesehene Weg für das manuelle Nachinstallieren von Adaptern?

                              Denn in der Doku habe ich leider auch nichts dazu gefunden.
                              4e4a8878-44a7-4d11-94e1-b4af5b0d1b25-grafik.png

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

                                @smartmeta package.json solltest du nur im absoluten Notfall bearbeiten, z.B. um eine kaputte Datei zu korrigieren.

                                Du suchst das hier: https://www.iobroker.net/#de/documentation/tutorial/adapter.md, was übrigens der 1. Link in dem von dir gefundenen Artikel war 🙈

                                Entweder du installierst den Adapter direkt per npm:

                                cd /opt/iobroker
                                npm i https://github.com/AlCalzone/ioBroker.javascript/tarball/types-resolve-fixes
                                

                                Benutzerwechsel ist hier nicht nötig, das passiert automatisch.

                                Oder (bevorzugt) über den Admin:
                                4fde7d6d-1c66-4a2c-9eac-4b8fbc84fc46-grafik.png

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

                                  @AlCalzone

                                  der erste Link in dem von mir gefunden Dokument (Update eines Adapters) ist leider nicht verlinkt.
                                  😉

                                  Aber der Link https://www.iobroker.net/#de/documentation/tutorial/adapter.md ist gut. Danke!

                                  Installation über
                                  f5a8e982-20b8-4b78-8f3d-4c43f9c69feb-grafik.png
                                  probiere ich später aus.

                                  Danke

                                  1 Reply Last reply Reply Quote 0
                                  • smartmeta
                                    smartmeta last edited by

                                    @AlCalzone
                                    Okay, eingetragen und der Adapter ist neu geladen.

                                    Zur Sicherheit auch noch mal nachgesehen, dass deine Änderung in

                                    /lib/typescriptTools.js 
                                    

                                    auch drin ist. Alles okay.

                                    Dann zur Sicherheit noch mal

                                    iobroker stop
                                    iobroker start
                                    

                                    Leider funktioniert das TS-Modul noch immer nicht.
                                    7dac6abb-2fef-4fb6-8e59-336d3e4907c3-grafik.png

                                    Ich versuche das am Wochenende mal zu debuggen.

                                    1 Reply Last reply Reply Quote 0
                                    • smartmeta
                                      smartmeta last edited by

                                      Hi @AlCalzone,

                                      da mein Typescript ModulX bei mir noch immer nicht läuft, bin ich noch mal einen Schritt zurück gegangen.

                                      Ich versuche jetzt das Modul oho-iobroker-tools in einer reinen Javascript Umgebung.

                                      Zuerst ein Test in PHPStorm ganz ohne iobroker:
                                      7ded8cc1-e0fd-4e7b-80d2-a79d01738516-grafik.png

                                      Nun den gleichen Code

                                      var oho_iobroker_tools_1 = require("oho-iobroker-tools");
                                      var a = new oho_iobroker_tools_1.A();
                                      console.log(a.add(1, 20));
                                      

                                      im Javascript-Adapter :
                                      2e64eb45-1c04-4d4a-b3ab-2138de4b8155-grafik.png

                                      Wie auch in der Typescript-Variante wird die Klasse A nicht gefunden.
                                      751e3eea-dbd5-40d5-8cb2-26f931635e66-grafik.png

                                      Kannst du noch mal bitte schauen, ob das bei dir klappt. Vielleicht mache ich ja nur etwas ganz banales falsch.

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

                                        @smartmeta Installier bitte nochmal die neueste Version aus dem Branch:

                                        8228dc7d-57dd-4a2d-8c49-c54be86d0906-grafik.png

                                        1 Reply Last reply Reply Quote 1
                                        • smartmeta
                                          smartmeta last edited by

                                          @AlCalzone

                                          vielen Dank, sehr cool.
                                          Mit deinem Branch funktioniert es jetzt sowohl im Javascript als auch im Typescript.

                                          1 Reply Last reply Reply Quote 0
                                          • smartmeta
                                            smartmeta last edited by

                                            @AlCalzone

                                            Nur aus Neugier: Wann kommen die Änderungen in den Master?

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            790
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            javaskript adapter nexus npm registry
                                            2
                                            22
                                            1077
                                            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