Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. (gelöst) NPM-Modul "node-fetch" in der Javascript-Instanz

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    (gelöst) NPM-Modul "node-fetch" in der Javascript-Instanz

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

      @ice987 entferne es mal, starte den Adapter neu, dann füge es wieder hinzu.

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

        @alcalzone
        ich habe alles hier
        31b0f607-d79f-4326-b9dd-dbb2c8fc8cd9-image.png
        entfernt, Instanz neu gestartet, der error bleibt. node-fetch wieder hinzugefügt, Instanz heu gestartet, Fehler bleibt.

        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @ice987 last edited by

          @ice987 sagte: error wie folgt:

          Wie ist es in das Skript eingebunden?

          ice987 1 Reply Last reply Reply Quote 0
          • ice987
            ice987 @paul53 last edited by ice987

            @paul53

            aktuell (zu Testzwecken) nur so:

            const fetch = require('node-fetch');
            

            welches bereits den Fehler ergibt:

            paul53 1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @ice987 last edited by paul53

              @ice987
              require erwartet es im Verzeichnis /opt/iobroker/node_modules, wo es offenbar nicht (mehr) installiert ist.

              Error: Cannot find module '/opt/iobroker/node_modules/iobroker.javascript/lib/../../node-fetch'
              

              import reagiert anders.

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

                Dann ist da im Adapter irgendwas faul...
                import wird unter der Haube in require umgeschrieben, sollte sich also gleich verhalten.

                @ice987 Probier mal als Workaround:

                cd /opt/iobroker/node_modules/iobroker.javascript
                npm install --production
                
                paul53 1 Reply Last reply Reply Quote 0
                • ice987
                  ice987 last edited by ice987

                  @paul53
                  so hätte ich die Fehlermeldung auch interpretiert. Da hab' ich's manuell probiert, was funktionierte, jedoch nicht der "korrekten Installation" entspricht...

                  @AlCalzone

                  cd /opt/iobroker/node_modules/iobroker.javascript
                  npm install --production
                  

                  habe ich ausgeführt: fehler bleibt:

                  Script nur eine Zeile:

                  const fetch = require('node-fetch');
                  

                  fehler:

                  15:20:40.276	error	javascript.2 (1358) script.js.08_Wetterstation.Skript_1: Error: Cannot find module '/opt/iobroker/node_modules/iobroker.javascript/lib/../../node-fetch'
                  

                  wenns was zur Sache tut: ioBroker läuft auf einem QNAP im Container, unter dem offiziellen Dockerimage von Buanet.

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

                    @alcalzone sagte: Probier mal als Workaround:

                    cd /opt/iobroker/node_modules/iobroker.javascript
                    npm install --production
                    

                    Dorthin hat es der Javascript-Adapter installiert. Es wird dort aber nicht von require gefunden.

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

                      Laut https://github.com/ioBroker/ioBroker.javascript/blob/1a05db402d3c5ad83623825734141a22c34e04b9/lib/sandbox.js#L410-L423 sollte zuerst

                      /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-fetch
                      

                      und anschließend

                      /opt/iobroker/node_modules/node-fetch
                      

                      versucht werden.
                      In diesem Fall würde das bedeuten, dass node-fetch sich weder im Unterordner, noch in der übergeordneten Struktur befindet.

                      @ice987
                      Was kommt hier raus?

                      cd /opt/iobroker
                      find -iname node-fetch
                      
                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @AlCalzone last edited by

                        @alcalzone

                        const fetch = require('iobroker.javascript/node_modules/node-fetch');
                        

                        ergibt

                        Error [ERR_REQUIRE_ESM] [ERR_REQUIRE_ESM]: Must use import to load ES Module: /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-fetch/src/index.js
                        
                        AlCalzone 1 Reply Last reply Reply Quote 0
                        • AlCalzone
                          AlCalzone Developer @paul53 last edited by

                          @paul53 Ahhhh, klick!

                          d.h. in /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-fetch ist das Modul zu finden, aber in einer Version, die der Adapter nicht laden kann.
                          Dann probiert er /opt/iobroker/node_modules/node-fetch, wo es nicht ist.

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

                            @ice987 Probier mal folgendes:

                            1. Adapter stoppen, node-fetch aus der Adapter-Konfig entfernen.
                            cd /opt/iobroker/node_modules/iobroker.javascript
                            npm uninstall node-fetch
                            
                            1. In der Adapterkonfiguration node-fetch@2 eintragen und Adapter starten.
                            ice987 2 Replies Last reply Reply Quote 1
                            • ice987
                              ice987 @AlCalzone last edited by ice987

                              @alcalzone sagte in (gelöst) NPM-Module in der Javascript instanz:

                              @ice987 Probier mal folgendes:

                              1. Adapter stoppen, node-fetch aus der Adapter-Konfig entfernen.
                              cd /opt/iobroker/node_modules/iobroker.javascript
                              npm uninstall node-fetch
                              
                              1. In der Adapterkonfiguration node-fetch@2 eintragen und Adapter starten.

                              das funktioniert!

                              cd /opt/iobroker/node_modules/iobroker.javascript
                              npm install --production
                              

                              muss/soll/kann dies wieder Rückgängig gemacht werden?

                              paul53 1 Reply Last reply Reply Quote 0
                              • paul53
                                paul53 @ice987 last edited by paul53

                                @ice987 sagte: muss/soll/kann dies wieder Rückgängig gemacht werden?

                                Nein, denn node-fetch wurde gerade durch

                                In der Adapterkonfiguration node-fetch@2 eintragen und Adapter starten.

                                dort neu installiert.

                                const fetch = require('node-fetch');
                                

                                erzeugt keinen Fehler mehr.

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

                                  @alcalzone sagte in (gelöst) NPM-Modul "node-fetch" in der Javascript-Instanz:

                                  @ice987 Probier mal folgendes:

                                  1. Adapter stoppen, node-fetch aus der Adapter-Konfig entfernen.
                                  cd /opt/iobroker/node_modules/iobroker.javascript
                                  npm uninstall node-fetch
                                  
                                  1. In der Adapterkonfiguration node-fetch@2 eintragen und Adapter starten.

                                  Diese Prozedur funktioniert, bis ioBroker neu gestartet wird. Anschliessend kommt wieder der genannte Fehler

                                  script.js.08_Wetterstation.082_Meteoblue: Error: Cannot find module '/opt/iobroker/node_modules/iobroker.javascript/lib/../../node-fetch'
                                  

                                  wird die Prozedur wieder durchgeführt, funktioniert es wieder ohne Fehler. Ggf. ist da was nicht i.O.

                                  AlCalzone paul53 2 Replies Last reply Reply Quote 0
                                  • AlCalzone
                                    AlCalzone Developer @ice987 last edited by AlCalzone

                                    gelöscht

                                    1 Reply Last reply Reply Quote 0
                                    • paul53
                                      paul53 @ice987 last edited by paul53

                                      @ice987 sagte: funktioniert, bis ioBroker neu gestartet wird. Anschliessend kommt wieder der genannte Fehler

                                      Bei mir kommt der Fehler nach Neustart nicht.

                                      Bild_2021-09-16_124030.png

                                      Die ersten 3 Zeilen der Datei /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-fetch/package.json:

                                      {
                                        "_from": "node-fetch@2",
                                        "_id": "node-fetch@2.6.2",
                                      
                                      ice987 1 Reply Last reply Reply Quote 0
                                      • ice987
                                        ice987 @paul53 last edited by

                                        @paul53
                                        sind bei mir identisch:

                                        {
                                          "_from": "node-fetch@2",
                                          "_id": "node-fetch@2.6.2",
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • D
                                          dukkha last edited by dukkha

                                          iobroker-Neuling hier. Ich versuche, node-fetch in TypeScript zu verwenden. Ich habe es zu dem JavaScript-Adapter als Modul (node-fetch@2) ergänzt, bekomme beim Verwenden von import fetch from 'node-fetch'; aber dann folgenden Fehler:

                                          Error [ERR_REQUIRE_ESM]: require() of ES Module /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-fetch/src/index.js from /opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js not supported

                                          Jemand eine Idee?

                                          Edit: Tatsächlich passiert das auch mit einer reinen JavaScript-Datei und const fetch = require('node-fetch');.
                                          Edit 2: Ich habe nun einfach axios verwendet. Das funktioniert.

                                          AlCalzone U 2 Replies Last reply Reply Quote 0
                                          • AlCalzone
                                            AlCalzone Developer @dukkha last edited by

                                            @dukkha sagte in (gelöst) NPM-Modul "node-fetch" in der Javascript-Instanz:

                                            require() of ES Module ... from ... not supported

                                            Die Version, die installiert ist, hat das ES Modules Format, welches von ioBroker nicht geladen werden kann. Installiere eine ältere Version, dann müsste es gehen.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            796
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            39
                                            3355
                                            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