iobroker-javascript-vs-code-extension icon indicating copy to clipboard operation
iobroker-javascript-vs-code-extension copied to clipboard

Namespace wird nicht gefunden in VSCode, Script läuft aber fehlerfrei

Open neopholus opened this issue 1 year ago • 8 comments

Describe the bug Wenn man in einem Typescript eine Variable vom Typ NodeJS.Timeout anlegt, wird folgende Fehlermeldung angezeigt: grafik

Den Befehlt grafik habe ich ausgeführt. Fehler bleibt.

To Reproduce Steps to reproduce the behavior:

  1. Füge in einer Typescript-Datei folgende Zeile ein: let t:NodeJS.Timeout|null = null;
  2. Ein Fehler analog dem oben angezeigten erscheint, wenn man über das rot unterringelte NodeJS hovert.

Expected behavior Der Namensraum NodeJS sollte bekannt sein, da ioBroker auch keinen Fehler beim Kompilieren anzeigt und das Skript fehlerfrei läuft

Version information (please complete the following information):

  • Extension version: v1.6.0
  • VS Code version: 1.95.2
  • ioBroker admin version: 7.1.5
  • ioBroker nodejs version: v18.20.4
  • ioBroker javascript adapter version:0: 6.0.11

neopholus avatar Nov 10 '24 19:11 neopholus

Wenn Node.js installiert ist, können die Typdefinitionen installiert werden: npm install --save @types/node. Danach sollte der Typ bekannt sein.

nokxs avatar Nov 11 '24 21:11 nokxs

Hallo Niklas,

sorry, ich verstehe deinen Kommentar nicht so wirklich, Also:

  • iobroker ist auf einem Raspberry Pi installiert. Dort ist natürlich Node.js installiert. Dort wird aber auch korrekt kompiliert und der NodeJS-Namespace gefunden.
  • VSCode läuft auf meinem Windows-PC, dort habe ich kein Node.js installiert. Auch kein npm oder ähnliches.

Muss ich auf dem Raspberry Pi was korrigieren oder auf meinem Windows-PC, so dass die Namensräume, die auf dem iobroker erkannt werden auch zur Verfügung stehen? Ich dachte eigentlich, dass "Update JS type definition from GitHub" das macht....

Sorry für die Nachfrage und danke schon mal. Stefan

neopholus avatar Nov 13 '24 16:11 neopholus

Du kannst auf deinem Windows Recher auch npm installieren und anschließend darüber das benötigte Paket installieren: https://docs.npmjs.com/downloading-and-installing-node-js-and-npm

Ich überlege gerade aber, ob ich deinen Vorschlag umsetze. Dazu müsste ich folgendes machen (kannst du auch von Hand machen, wenn du kein npm installieren willst).

  1. Die Typdefinitionen von npm herunterladen: https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz
  2. Nach node_modules/@types/node entpacken

Ich lass den Issue hier offen, weiß aber noch nicht genau, wann ich dazu komme das umzusetzen.

nokxs avatar Nov 14 '24 17:11 nokxs

Danke für die Hilfe, ich habe es mal ausprobiert:

Sieht dann folgendermaßen aus: grafik

Danach VS Code neu gestartet. Der Fehler bleibt bestehen... vermutlich muss ich noch irgendwas machen, weil in der Datei 'node_modules/@types/node/timers.d.ts' ist die Klasse Timeout im namespace NodeJS definiert.

Hast du eine Ahnung, warum VS Code das nicht nutzt und kannst mir bitte einen Schubs in die richtige Richtung geben?

neopholus avatar Nov 14 '24 21:11 neopholus

Hallo Niklas,

ich denke, ich bin ein Stück weiter gekommen. In der Datei tsconfig.json steht:

{
  "compileOnSave": true,
  "compilerOptions": {
    "noEmit": true,
    "allowJs": true,
    "checkJs": true,
    "module": "commonjs",
    "moduleResolution": "node",
    "esModuleInterop": true,
    "resolveJsonModule": true,
    "strict": true,
    "noImplicitAny": false,
    "target": "es2018",
    "typeRoots": [
      ".iobroker/types",
      "node_modules/@types"
    ]
  },
  "include": [
    "**/*.js",
    "**/*.ts",
    ".iobroker/types/javascript.d.ts",
    ".iobroker/types/global.d.ts"
  ],
  "exclude": [
    "node_modules/**"
  ]
}

Hier sind zwei typeRoots genannt. Und obwohl ".iobroker/types" eine typeRoot ist, werden bei include z.B. ".iobroker/types/javascript.d.ts" explizit genannt. Muss das auch bei den node-Typen geschehen?

neopholus avatar Nov 17 '24 20:11 neopholus

Wenn ich

  • die Datei https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz heruntergeladen
  • und dann nach <projektfolder>\.iobroker\types entpacke findet VS Code die Typen korrekt.

Leider werden die ganzen Dateien dann aber auch durchsucht, wenn man die Search-Funktion nutzt, das macht die Suche sehr schwierig...

neopholus avatar Nov 17 '24 21:11 neopholus

Lösung ist wie von Niklas vorgeschlagen -- was ich aber nicht umsetzen konnte, da ich mich zu wenig auskannte, daher eine Schritt-für-Schritt-Anleitung für Einsteiger wie mich:

  • Die Typdefinitionen von npm herunterladen: https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz
  • Ins root directory deines ioBroker-Workspaces wechseln (dort liegt auch die Datei .iobroker-config.json und alle Skripte, die von ioBroker gesynct werden -- NICHT in das existierende node_modules\@types Verzeichnis im Installationspfad von VS Code C:\Program Files\Microsoft VS Code\resources\app\node_modules\@types !!!!)
  • Verzeichnis node_modules anlegen und in das Verzeichnis node_modules wechseln
  • Verzeichnis @types anlegen und in das Verzeichnis @types wechseln
  • Dorthin die node-20.14.10.tgz entpacken. Dabei sollte ein node-Verzeichnis angelegt werden

Nun sollten die NodeJS Namespaces erkannt werden.

neopholus avatar Nov 17 '24 21:11 neopholus

Tut mir leid, dass ich es nicht gut genug beschrieben habe, es freut mich aber, dass du es trotzdem hinbekommen hast :-)

nokxs avatar Nov 18 '24 22:11 nokxs