Ich versuche es mit Typoskript. Es funktioniert gut auf der Hallo-Weltbühne. Ich versuche jetzt, ein npm-Modul zu verwenden:
index.ts
=
import _ = require('lodash')
console.log(_.toUpper('Hello, world !'))
Das funktioniert nicht:
tsc index.ts
->Cannot find module 'lodash'. (2307)
node-ts index.js
->Cannot find module 'lodash'. (2307)
Ein Blick auf die Typoskript-Dokumentation und auf Google hat nicht geholfen. Andere S / O-Fragen sind entweder unbeantwortet ( hier und hier ) oder haben nichts damit zu tun.
Elemente:
- Typoskript 1.8 spätestens
- Ja, lodash ist installiert
npm i --save lodash
und in meinem Dateisystem vorhanden ( aktiviert ) - Ich habe es auch getan
typings i --save lodash
- Varianten
import * as _ from 'lodash'
oderconst _ = require('lodash')
funktionieren auch nicht - Ich habe versucht, die Optionen von tsconfig.json zu optimieren, wie in anderen Antworten vorgeschlagen,
"moduleResolution": "node"
und"module": "commonjs"
wie in einigen Antworten vorgeschlagen, funktioniert immer noch nicht
Wie verbrauchen wir ein npm-Paket in Typoskript?
node.js
typescript
npm
tsc
Offirmo
quelle
quelle
///<reference path="../typings/lodash/lodash.d.ts"/>
Antworten:
[EDIT] Vielen Dank für diese Antwort! Ab 2018 ist es jedoch veraltet. Leser, schauen Sie sich die anderen Antworten an.
Es gibt verschiedene Möglichkeiten, Module aus npm zu importieren. Wenn Sie jedoch keine Eingaben erhalten,
tsc
wird sich immer beschweren, dass das gewünschte Modul nicht gefunden werden kann (auch wenn transpiled js tatsächlich funktioniert).Wenn Sie über Typisierungen verfügen und keine verwenden
tsconfig.json
,reference
importieren Sie die Typisierungen mit:Wenn Sie eine
tsconfig.json
Datei verwenden, stellen Sie sicher, dass Ihre Schreibdatei enthalten ist (oder nicht ausgeschlossen ist, Ihre Wahl), und machen Sieimport
im vorherigen Beispiel das Gleiche .Für den Fall, dass keine Eingaben verfügbar sind. Sie haben zwei Möglichkeiten: Schreiben Sie Ihre eigene in eine
.d.ts
Datei oder ignorieren Sie die Typprüfung für die Bibliothek.Importieren Sie die Bibliothek in eine Variable vom Typ, um die Typprüfung vollständig zu ignorieren (dies ist nicht die empfohlene Methode)
any
.tsc
werde mich beschweren, dassrequire
es nicht existiert. Geben Sienode
Eingaben ein oderdeclare
verwerfen Sie den Fehler.quelle
ts-node
, solange der Typisierungsindex intsconfig.json
[2018/12] Neue, aktuelle Antwort auf diese Frage, die ich 2016 gestellt habe, die trotz veralteter Antworten immer noch viel Aktivität zeigt.
Lange Rede kurzer Sinn , erfordert Typoskript Typen Informationen über Ihr Paket Code (auch bekannt als „ Typdeklaration Dateien “ aka „Typisierungen“) und sagt Ihnen , zu Recht , dass Sie sonst den ganzen Sinn der Typoskript verlieren würden. Es gibt verschiedene Lösungen, um sie bereitzustellen oder zu deaktivieren, die hier in der Reihenfolge der Best Practice aufgeführt sind:
Lösung 0 : Das Modul liefert bereits die Typisierungen. Wenn seine package.json eine Zeile wie diese enthält:
Es ist bereits TypeScript-fähig. Es ist höchstwahrscheinlich nicht der Fall, wenn Sie diese Seite lesen, also fahren wir fort ...
Lösung 1 : Verwenden Sie von der Community bereitgestellte Typisierungen von DefinitelyTyped . Versuchen Sie für ein Modul "foo" Folgendes:
Wenn es funktioniert, Jackpot! Sie haben jetzt die Eingaben und können Ihr Modul verwenden. Wenn sich npm beschwert, dass das Modul @ types / foo nicht gefunden werden kann, fahren wir fort ...
Lösung 2 : Geben Sie benutzerdefinierte Typisierungen für dieses Modul an. (mit der Option, keine Anstrengung zu machen)
Ihr TypeScript-Code sollte jetzt kompiliert werden, allerdings ohne Typinformationen (TypeScript betrachtet das foo-Modul vom Typ "any").
Sie können auch versuchen, die Typinformationen selbst zu schreiben, indem Sie sich das offizielle Dokument und / oder Beispiele von DefinitelyTyped ansehen . Wenn Sie dies tun, denken Sie daran, Ihre Eingaben entweder direkt in das Modul (Lösung 0, wenn der Modulautor dies akzeptiert) oder in DefinitelyTyped (Lösung 1) einzubringen.
quelle
Reference the content of this folder in your tsconfig.json:
gibt den folgenden Fehler:Unknown compiler option 'include'.
compilerOptions
Sie vermissen wahrscheinlich die Deklarationsdateien .
Weitere Informationen finden Sie unter DefinitelyTyped .
Versuche dies:
Jetzt können Sie importieren.
Wenn das zu importierende Modul mehrere Exporte hat , können Sie dies tun:
Wenn das zu importierende Modul "keinen Standardexport hat" , müssen Sie Folgendes tun:
quelle
* as _
und nicht nur_ from 'lodash'
wie im ES6-Code?import _ from 'lodash';
In diesem Fall ist die Verwendung besser. Ich habe meine Antwort aktualisiert, um verschiedene Möglichkeiten zum Importieren und warum Sie sie verwenden würden, zu zeigen.* as _
wird benötigt, wenn das Modul keinen Standardexport hat. Der tsc-Compiler warnt davor.export default <...>
Anweisung hat. Schauen Sie sich den Abschnitt "Standardexporte" in der Dokumentation zu Typescript-Modulen an .Es hat bei mir funktioniert.
Erstellen Sie im Ordner typings einen Dateinamen module-name.d.ts . Es beinhaltet:
declare module "module-name";
Verweisen Sie in tsconfig.json auf den Ordner
"typeRoots": [ "./typings", "../node_modules/@types" ]
quelle
In tsconfig.json, refer to the folder
, gibt den folgenden Fehler:Unknown compiler option 'typesRoots'.