Ich versuche, meine erste TypeScript- und DefinitelyTyped Node.js-Anwendung zum Laufen zu bringen und einige Fehler zu finden.
Ich erhalte die Fehlermeldung "TS2304: Name 'require' kann nicht gefunden werden", wenn ich versuche, eine einfache TypeScript Node.js-Seite zu transpilieren. Ich habe mehrere andere Vorkommen dieses Fehlers beim Stapelüberlauf gelesen und glaube nicht, dass ich ähnliche Probleme habe. Ich führe an der Shell die Eingabeaufforderung aus:
tsc movie.server.model.ts.
Der Inhalt dieser Datei ist:
'use strict';
/// <reference path="typings/tsd.d.ts" />
/* movie.server.model.ts - definition of movie schema */
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var foo = 'test';
Der Fehler wird in die var mongoose=require('mongoose')
Zeile geworfen .
Der Inhalt der Datei typings / tsd.d.ts lautet:
/// <reference path="node/node.d.ts" />
/// <reference path="requirejs/require.d.ts" />
Die .d.ts-Dateiverweise wurden in den entsprechenden Ordnern abgelegt und mit den folgenden Befehlen zu typings / tsd.d.ts hinzugefügt:
tsd install node --save
tsd install require --save
Die erzeugte .js-Datei scheint gut zu funktionieren, daher könnte ich den Fehler ignorieren. Aber ich würde gerne wissen, warum dieser Fehler auftritt und was ich falsch mache.
quelle
when I attempt to transpile a simple ts node page
<Wieimport { mongoose } from 'mongoose'
?Antworten:
Schnell und dreckig
Wenn Sie nur eine Datei mit require haben oder dies für Demozwecke tun, können Sie require oben in Ihrer TypeScript-Datei definieren.
TypeScript 2.x.
Wenn Sie TypeScript 2.x verwenden, muss Typings oder Definitely Typed nicht mehr installiert sein. Installieren Sie einfach das folgende Paket.
Die Zukunft der Deklarationsdateien (15.06.2016)
Überprüfen oder bearbeiten Sie Ihre src /tsconfig.app.json so, dass sie Folgendes enthält:
Stellen Sie sicher, dass sich die Datei im Ordner src und nicht im Ordner der Root-App befindet.
Standardmäßig ist jedes Paket unter @types bereits in Ihrem Build enthalten, es sei denn, Sie haben eine dieser Optionen angegeben. Weiterlesen
TypeScript 1.x.
Mithilfe von Typisierungen (DefinitelyTypeds Ersatz) können Sie eine Definition direkt aus einem GitHub-Repository angeben.
Installieren Sie die Eingaben
Installieren Sie die requireJS-Typdefinition aus dem Repo von DefinitelyType
Webpack
Wenn Sie Webpack als Build-Tool verwenden, können Sie die Webpack-Typen einschließen.
npm install --save-dev @ types / webpack-env
Aktualisieren Sie Ihre
tsconfig.json
mit den folgenden untercompilerOptions
:Auf diese Weise können Sie
require.ensure
andere Webpack-spezifische Funktionen ausführen.Angular CLI
Mit CLI können Sie dem obigen Webpack-Schritt folgen und den Block "types" zu Ihrem hinzufügen
tsconfig.app.json
.Alternativ können Sie die vorinstallierten
node
Typen verwenden. Beachten Sie, dass dies zusätzliche Typen zu Ihrem clientseitigen Code enthält, die nicht wirklich verfügbar sind.quelle
Unable to find "require" ("npm") in the registry
. Ist ein Teil eines größeren Satzes von NodeJS-Typisierungen erforderlich?require
. Vielleicht die richtige Antwort für eine Variation des ES5-Ausgabeziels, aber nicht für den allgemeinen Fall.@types/node
sind die TypeScript-Definitionen. Der Knoten enthält diese nicht und sollte sie auch nicht enthalten.Für TypeScript 2.x gibt es jetzt zwei Schritte:
Installieren Sie ein Paket, das definiert
require
. Zum Beispiel:Weisen Sie TypeScript an, es global aufzunehmen in
tsconfig.json
:Der zweite Schritt ist nur wichtig, wenn Sie Zugriff auf global verfügbare Funktionen wie benötigen
require
. Für die meisten Pakete sollten Sie nur dasimport package from 'package'
Muster verwenden. Es ist nicht erforderlich, jedes Paket in das obige Array tsconfig.json-Typen aufzunehmen.quelle
"types": ["jasmine", "hammerjs"]
bistsconfig.js
ich hade hinzuzufügennode
als auch. Danke Jordan.import express from "express";
sagt mir jetzt, dass ich versuchen muss, @ types / express zu installieren oder eine .d.ts-Datei dafür hinzuzufügen.@types/...
als nur@types/node
Ordner hinzufügen , nicht"types": ["node"]
in ,tsconfig.json
weil Typoskript compiller andere nicht genannte Pakete auslassen wird. Dadurch werden Ihre IDEs-Typen aufgelöst. Es steht geschrieben , hier typescriptlang.org/docs/handbook/...Du kannst
Oder verwenden Sie für eine umfassendere Unterstützung die Anforderungen von DefinitelyTyped
Anstelle von
var mongoose = require('mongoose')
können Sie auch Folgendes versuchenquelle
use strict
in TypeScript: Basarat-Antwort und "Use Strict" in einer TypeScript-Datei? . Es ist notwendig,use strict
in TypeScript zu verwenden."use strict"
. Ich werde meine Antwort bearbeitenDiese Antwort bezieht sich auf moderne Setups (TypeScript 2.x, Webpack > 2.x)
Sie müssen nicht @ types / node installieren (dies sind alle Node.js-Typen und für den Front-End-Code irrelevant), was Dinge wie setTimout, verschiedene Rückgabewerte usw. kompliziert.
Sie tun müssen @ Typen installieren / webpack-env
npm i -D @types/webpack-env
wodurch man die Laufzeit Signaturen dass Webpack hat (einschließlich
require
,require.ensure
etc.)Stellen Sie außerdem sicher, dass in Ihrer Datei tsconfig.json kein Array 'types' festgelegt ist ->, wodurch alle Typdefinitionen in Ihrem Ordner node_modules / @ types abgerufen werden.
Wenn Sie die Suche nach Typen einschränken möchten, können Sie die Eigenschaft typeRoot auf node_modules / @ types setzen.
quelle
Anstatt:
Versuchen:
dh Referenzpfad zuerst.
quelle
In meinem Fall war es ein super dummes Problem, bei dem
src/tsconfig.app.json
das übersteuert wurdetsconfig.json
Einstellung Kraft gesetzt wurde.Also hatte ich das in
tsconfig.json
:Und dieser in
src/tsconfig.app.json
:Ich hoffe, jemand findet das hilfreich, da dieser Fehler mir graue Haare verursachte.
quelle
Nur als Referenz verwende ich Angular 7.1.4 , TypeScript 3.1.6 und das einzige, was ich tun muss, ist diese Zeile hinzuzufügen in
tsconfig.json
:quelle
npm i @types/node
und fügen Sienode
es dem Typenfeld in Ihrer tsconfig hinzu. - hat npm installiert.Ich fand die Lösung darin, den TSD-Befehl zu verwenden:
Dadurch wird die
typings/tsd.d.ts
Datei hinzugefügt / aktualisiert , und diese Datei enthält alle Typdefinitionen, die für eine Knotenanwendung erforderlich sind.Am Anfang meiner Datei habe ich einen Verweis auf
tsd.d.ts
Folgendes eingefügt:Die Anforderung ist ab Januar 2016 wie folgt definiert:
quelle
Ich habe die Antwort von Peter Varga zum Hinzufügen genommen
declare var require: any;
und daraus eine generische Lösung gemacht, die mit dem Preprocess-Loader generisch für alle .ts-Dateien funktioniert :Präprozessor-Loader installieren:
Fügen Sie den Loader zu Ihrer webpack.config.js hinzu (ich verwende ts-loader zum Verarbeiten von TypeScript-Quellen):
Sie können die robustere require.d.ts auf die gleiche Weise hinzufügen , war aber
declare var require: any;
in meiner Situation ausreichend.Beachten Sie, dass es in Präprozessor 1.0.5 einen Fehler gibt , der die letzte Zeile abschneidet. Stellen Sie also sicher, dass Sie am Ende einen zusätzlichen Zeilenabstand haben und alles in Ordnung ist.
quelle
Ich habe auch mit diesem Problem zu kämpfen. Ich glaube, dass dies für alle Release-Kandidaten alias rc funktioniert, aber ich habe es nicht getestet. Für @angular rc.2 funktioniert es gut.
core-js
als npm Abhängigkeit inpackage.json
typings install core-js --save
"es6-shim"
Vorkommen in Ihrempackage.json
. Du brauchst es nicht mehr.Prost!
quelle
Stellen Sie sicher, dass Sie installiert haben
npm i @types/node
quelle
Import * als Mungo aus 'Mungo'
quelle
Das Fehlen von "Jasmin" in tsconfig.json kann diesen Fehler verursachen. (TypeScript 2.X)
Also hinzufügen
zu Ihrer
tsconfig.json
Datei.quelle
Elektron + Winkel 2/4 Addition:
Zusätzlich zum Hinzufügen des Typs 'node' zu verschiedenen Dateien von ts.config funktionierte das, was für mich schließlich funktionierte, das Hinzufügen des nächsten zur
typings.d.ts
Datei:Beachten Sie, dass sich mein Fall mit Electron + Angular 2/4 entwickelt. Ich brauchte die Anforderung auf dem Fenster global.
quelle
Für mich wird es durch Hinzufügen von Typen zu den Winkel-Compiler-Optionen gelöst .
quelle
Haben Sie angegeben, mit welchem Modul der Code transpiliert werden soll?
tsc --target es5 --module commonjs script.ts
Sie müssen dies tun, um den Transpiler darüber zu informieren, dass Sie NodeJS-Code kompilieren. Docs .
Sie müssen auch Mungo-Definitionen installieren
tsd install mongoose --save
var
Verwenden Sielet
stattdessen nicht, um Variablen zu deklarieren (es sei denn, dies ist ein sehr seltener Fall) . Erfahren Sie mehr darüberquelle
Nur zusätzlich zu cgatians Antwort für TypeScript 1.x.
Wenn weiterhin Fehler auftreten, geben Sie in Ihren Compileroptionen speziell index.d.ts an.
quelle
Ich konnte den 'Require'-Fehler nicht mit einem der oben genannten Tricks beseitigen.
Ich fand jedoch heraus, dass das Problem darin bestand, dass meine TypeScript-Tools für Visual Studio eine alte Version (1.8.6.0) und die neueste Version von heute (2.0.6.0) enthielten.
Sie können die neueste Version der Tools herunterladen von:
TypeScript für Visual Studio 2015
quelle
Wenn Sie Code kompilieren können, Visual Studio 2015 jedoch die Markierungsfunktionen "erforderlich" aktiviert, da Fehler mit Fehlertext den Namen "erforderlich" nicht finden oder das Symbol "erforderlich" nicht auflösen können. , aktualisieren Sie TypeScript für Visual Studio 2015 auf die neueste Version (derzeit 2.1). 5) und aktualisieren Sie ReSharper (falls Sie es verwenden) auf mindestens Version 2016.3.2.
Ich hatte dieses nervige Problem für eine Weile und konnte keine Lösung finden, aber ich habe es schließlich auf diese Weise gelöst.
quelle
Fügen Sie Folgendes hinzu
tsconfig.json
:quelle
Ich habe noch eine andere Antwort , die auf allen früheren Builds , die beschreiben ,
npm install @types/node
einschließlichnode
intsconfig.json / compilerOptions / types
.In meinem Fall habe ich eine Basis
tsConfig.json
und eine separate in der Angular-Anwendung, die diese erweitert:Mein Problem war das leere
types
in diesemtsconfi.app.json
- es verstopft das in der Basiskonfiguration.quelle
Wenn Sie dieses Problem in einer .ts-Datei haben, die nur dazu dient, Ihnen einige konstante Werte bereitzustellen, können Sie dies einfach tun
und der Fehler wird nicht wiederkommen.
quelle