NEWS
(gelöst) NPM-Modul "node-fetch" in der Javascript-Instanz
-
@ice987
iobroker
drin lassen. Der Rest dürfte raus können. -
@alcalzone
ok, hab alles gelistete entfernt (ausseriobroker
). Nun habe ich aber erneut das Problem mit dem Error:Module sind wie folgt eingetragen:
error wie folgt:
14:52:47.875 error javascript.2 (185) script.js.08_Wetterstation.082_Meteoblue: Error: Cannot find module '/opt/iobroker/node_modules/iobroker.javascript/lib/../../node-fetch'
root@iobroker-v510:/opt/iobroker# npm ls node-fetch iobroker.inst@2.0.3 /opt/iobroker └─┬ iobroker.javascript@5.2.8 └── node-fetch@3.0.0
-
@ice987 entferne es mal, starte den Adapter neu, dann füge es wieder hinzu.
-
@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",