NEWS
(gelöst) NPM-Modul "node-fetch" in der Javascript-Instanz
-
@alcalzone
ich habe alles hier
entfernt, Instanz neu gestartet, der error bleibt.node-fetch
wieder hinzugefügt, Instanz heu gestartet, Fehler bleibt. -
@ice987 sagte: error wie folgt:
Wie ist es in das Skript eingebunden?
-
aktuell (zu Testzwecken) nur so:
const fetch = require('node-fetch');
welches bereits den Fehler ergibt:
-
@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.
-
Dann ist da im Adapter irgendwas faul...
import
wird unter der Haube inrequire
umgeschrieben, sollte sich also gleich verhalten.@ice987 Probier mal als Workaround:
cd /opt/iobroker/node_modules/iobroker.javascript npm install --production
-
@paul53
so hätte ich die Fehlermeldung auch interpretiert. Da hab' ich's manuell probiert, was funktionierte, jedoch nicht der "korrekten Installation" entspricht...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.
-
@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.
-
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, dassnode-fetch
sich weder im Unterordner, noch in der übergeordneten Struktur befindet.@ice987
Was kommt hier raus?cd /opt/iobroker find -iname node-fetch
-
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
-
@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. -
@ice987 Probier mal folgendes:
- Adapter stoppen,
node-fetch
aus der Adapter-Konfig entfernen.
cd /opt/iobroker/node_modules/iobroker.javascript npm uninstall node-fetch
- In der Adapterkonfiguration
node-fetch@2
eintragen und Adapter starten.
- Adapter stoppen,
-
@alcalzone sagte in (gelöst) NPM-Module in der Javascript instanz:
@ice987 Probier mal folgendes:
- Adapter stoppen,
node-fetch
aus der Adapter-Konfig entfernen.
cd /opt/iobroker/node_modules/iobroker.javascript npm uninstall node-fetch
- 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?
- Adapter stoppen,
-
@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.
-
@alcalzone sagte in (gelöst) NPM-Modul "node-fetch" in der Javascript-Instanz:
@ice987 Probier mal folgendes:
- Adapter stoppen,
node-fetch
aus der Adapter-Konfig entfernen.
cd /opt/iobroker/node_modules/iobroker.javascript npm uninstall node-fetch
- 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.
- Adapter stoppen,
-
gelöscht
-
@ice987 sagte: funktioniert, bis ioBroker neu gestartet wird. Anschliessend kommt wieder der genannte Fehler
Bei mir kommt der Fehler nach Neustart nicht.
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",
-
@paul53
sind bei mir identisch:{ "_from": "node-fetch@2", "_id": "node-fetch@2.6.2",
-
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 vonimport 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 einfachaxios
verwendet. Das funktioniert. -
@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.
-
@dukkha habe das gleiche Problem mit node-fetch.
Hast Du mir ein Code-Besipiel wie Du dann axios verwendest?
Möchte einen post http request durchführen und ein Image übergeben.