Ich laufe auf einem MacBook Air. Ich habe MS Code als IDE installiert und TypeScript installiert.
Ich habe eine einfache Datei mit nur dieser Zeile:
import fs = require('fs');
Ich bekomme ein rotes Schnörkel unter dem 'fs' in der Klammer und die Fehlermeldung lautet [ts] Cannot find module 'fs'.
Die Datei hat die Erweiterung .ts. Ich bin neu in JavaScript und TypeScript, aber ich hatte den Eindruck, dass fs
es sich um ein Kernmodul handelt. Wie konnte es also nicht gefunden werden? Wie behebe ich das Problem?
Andere Dinge, die ich bereits versucht habe:
- Einfügen eines einfachen Funktionskörpers in die Datei und anschließendes Kompilieren in der Befehlszeile mit
tsc
. Ich erhalte dort einen im Wesentlichen äquivalenten Fehler:error TS2307: Cannot find module 'fs'.
- In der Kommandozeile
sudo npm install fs -g
. Dies meldet offensichtlichen Erfolg, behebt das Problem jedoch nicht.
Ich habe mich in SE und im Internet umgesehen, aber die Antworten, die nah zu sein schienen, scheinen alle davon auszugehen, dass 'fs' verfügbar ist.
javascript
typescript
tsc
Backstein
quelle
quelle
node
?Antworten:
Sie müssen die Definitionsdatei für den Knoten einschließen.
TypeScript 2.0+
Installation mit npm:
TypeScript <2.0
Wenn Sie Typisierungen verwenden , können Sie diesen Befehl ausführen:
typings install dt~node --global --save
Oder wenn Sie Typings <1.0 verwenden, führen Sie Folgendes aus:
Wenn alles andere fehlschlägt, laden Sie die Datei hier manuell herunter und fügen Sie sie in Ihr Projekt ein.
quelle
typings install node --ambient --save
) Danke!yarn add @types/node --dev
@types/node
müssen Sie möglicherweise Code neu starten, damit er die Module richtig erkennt. Dies sollte nur bei nativen Knotenmodulen der Fall sein und ist je nach Code-Build möglicherweise nicht einmal ein Problem für Sie.Es gibt jetzt einen besseren Weg, ohne zu den vorherigen tsd- oder Tippwerkzeugen zu wechseln. NPM hat jetzt das @ types-Paket für Typoskript. In diesem Beispiel benötigen Sie das Paket
@types/node
:npm install "@types/node" --save-dev
Stellen Sie sicher, dass Sie die Option save-dev verwenden, um die Typen nur im Entwicklungsmodus und nicht in der Produktion zu installieren. Sie sollten über die neuesten Knotenbibliotheken verfügen, wenn Sie die npm-Installationssyntax "@ types /" verwenden ...
Das fs-Paket wurde nicht gefunden, da bei den vorherigen Tools-Eingaben höchstwahrscheinlich nicht die neueste Definitionsdatei node.d.ts verwendet wurde.
Ihre Datei tsconfig.json muss aktualisiert werden, um diese Typpakete zu finden. Mein Beispiel bei Verwendung von jquery-, jqueryui- und Knotentypen. Angenommen, Sie benötigen die Syntax, um auch für Ihren Code-Editor zu funktionieren, in diesem Fall den 'Atom'-Code-Editor
{ "compileOnSave": false, "compilerOptions": { "rootDir": "src", "sourceMap": true, "target": "es5", "module": "amd", "declaration": false, "noImplicitAny": false, "removeComments": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "moduleResolution": "node", "lib": ["es2015", "dom"], "baseUrl": "./", "typeRoots": [ "node_modules/@types" ], "types": [ "jquery", "jqueryui", "node" ], "paths": { "src/*": ["src/*"] } }, "exclude": [ "node_modules", "dist", "build" ], "filesGlob": [ "./src/**/*.ts", "./test/**/*.ts", "./typings/index.d.ts", "./custom_typings/**/*.d.ts", "./node_modules/@types/**/*.d.ts" ], "atom": { "rewriteTsconfig": false } }
quelle
"fs" ist ein Kernknotenmodul und ich denke, Ihre Syntax für Importanweisungen ist ein wenig anders. Versuchen:
import * as fs from "fs";
quelle
Alles was Sie brauchen ist "moduleResolution", das in Ihrer tsconfig.json auf "node" gesetzt ist:
{ "compilerOptions": { ... "moduleResolution": "node" ... } }
ausführen
und jetzt können Sie den Standard-TypeScript-Import verwenden:
import * as fs from "fs";
quelle
Sie haben drei Möglichkeiten
tsconfig.json
(hier: Knoten 11+), siehe Dokumentation :Geben Sie entweder beide
typeRoots
undtypes
nur antypeRoots
oder entfernen Sie beide Zeilen vollständig (empfohlen):{"compilerOptions": { ... "typeRoots": ["node_modules/@types"], // "typeRoots": [] -> won't work "types": ["node"] // "types": [] -> won't work }}
Installationstypen:
Verwenden Sie ein auf Versprechen basierendes Dateisystem (z. B. um async / await zu verwenden):
import {promises as fs} from 'fs'; async function foo() { ... await fs.writeFile('./yourPath', 'YourContent'); }
quelle
.d.ts
Dateien und eintypeRoots
Array in meinem Ordner erstellt habe, hattecompilerOptions
ich das nicht angegeben,node_modules/@types
und das hat den Fehler für mich verursacht. Nachdem ich das demtypeRoots
Array hinzugefügt hatte, funktionierte es wieder.Typoskript kennt Module auf Konventionen beruhen, überprüfen Auflösung Modul für mehr Details.
Damit IDE über das
fs
Modul Bescheid weiß , müssen Sie Typisierungen für den Knoten bereitstellen.Überprüfen Sie auch dieses Github-Problem
quelle