wake-up-neo.net

typoskript erhält Fehler TS2304: Name 'Require' konnte nicht gefunden werden

Ich versuche, meine erste TypeScript- und DefinitelyTyped-Knoten-App zum Laufen zu bringen und dabei auf einige Fehler zu stoßen.

Ich erhalte die Fehlermeldung "TS2304: Name 'Require' kann nicht gefunden werden", wenn ich versuche, eine einfache TS-Knotenseite zu transpilieren. Ich habe einige andere Vorkommen dieses Fehlers in SO durchgelesen und glaube nicht, dass ich ähnliche Probleme habe.
Ich führe an der Shell-Eingabeaufforderung den Befehl 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 der Zeile var mongoose = required ('mongoose') ausgegeben

Die Datei typings/tsd.d.ts enthält folgende Inhalte:

/// <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 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 es zu schätzen wissen, warum dieser Fehler auftritt und was ich falsch mache.

335
JerryKur

Schnell und dreckig

Wenn Sie nur eine Datei mit request haben oder dies zu Demonstrationszwecken tun, können Sie die Anforderung oben in Ihrer TypeScript-Datei definieren.

declare var require: any

TypeScript 2.x

Wenn Sie TypeScript 2.x verwenden, müssen Sie nicht mehr Typings oder Definitely Typed installieren. Installieren Sie einfach das folgende Paket.

npm install @types/node --save-dev

Die Zukunft der Deklarationsdateien (15.06.2016)

Tools wie Typings und tsd funktionieren weiterhin und wir arbeiten neben diesen Gemeinschaften, um einen reibungslosen Übergang zu gewährleisten.

OPTIONAL:.__ Wenn Sie typeroots oder types in Ihrem tsconfig.json angeben Möglicherweise müssen Sie den tsconfig.json aktualisieren, um den Knoten als Typ einzuschließen. Standardmäßig ist jedes Paket unter @types bereits in Ihrem Build sofern nicht enthalten, wenn Sie eine dieser Optionen angegeben haben. Weiterlesen

Nachfolgend finden Sie die richtige Konfiguration für jede dieser Optionen.

{
    "compilerOptions": {
        // types option has been previously configured
         "types": [
            // add node as an option
            "node"
         ],
         // typeRoots option has been previously configured
         "typeRoots": [
            // add path to @types
            "node_modules/@types"
         ]
    }
}

TypeScript 1.x

Mithilfe von Typisierungen (DefinitelyTyped-Ersetzung) können Sie eine Definition direkt aus einem GitHub-Repository angeben.

Installieren Sie Typisierungen

npm install typings -g --save-dev

Installieren Sie die Definition des RequiredJS-Typs aus dem Repo von DefinitelyType

typings install dt~node --save --global

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 Ihren tsconfig.json mit folgendem unter compilerOptions:

"types": [
      "webpack-env"
    ]

Auf diese Weise können Sie require.ensure und andere webpackspezifische Funktionen ausführen.

Angular CLI

Mit der CLI können Sie dem oben genannten Webpack-Schritt folgen und den "type" -Block zu Ihrem tsconfig.app.json hinzufügen.

Alternativ können Sie die vorinstallierten node-Typen verwenden. Beachten Sie, dass dies zusätzliche Typen Ihres clientseitigen Codes enthält, die nicht wirklich verfügbar sind. 

"compilerOptions": {
    // other options
    "types": [
      "node"
    ]
  }
559
cgatian

Für TypeScript 2.x gibt es jetzt zwei Schritte:

  1. Installieren Sie ein Paket, das require definiert. Zum Beispiel:

    npm install @types/node --save-dev
    
  2. Sagen Sie TypeScript, es global in tsconfig.json einzuschließen:

    {
        "compilerOptions": {
            "types": ["node"]
        }
    }
    

Der zweite Schritt ist nur wichtig, wenn Sie Zugriff auf global verfügbare Funktionen wie require benötigen. Für die meisten Pakete sollten Sie einfach das import package from 'package'-Muster verwenden. Es ist nicht erforderlich, jedes Paket in das Array tsconfig.json types aufzunehmen.

76
Jordan

Sie können

declare var require: any

Um eine umfassendere Unterstützung zu erhalten, verwenden Sie DefinitelyTyped-Requests.d.ts

Anstelle von var mongoose = require('mongoose') können Sie auch Folgendes versuchen 

import mongoose from 'mongoose' // or
import mongoose = require('mongoose')
63
ııı

Anstatt:

'use strict';

/// <reference path="typings/tsd.d.ts" />

Versuchen: 

/// <reference path="typings/tsd.d.ts" />

'use strict';

referenzpfad zuerst.

9
Hurricane

Ich fand die Lösung, den TSD-Befehl zu verwenden:

tsd install node --save

Durch das Hinzufügen/Aktualisieren der typings/tsd.d.ts-Datei und dieser Datei werden alle Typdefinitionen gespeichert, die für eine Knotenanwendung erforderlich sind.

Am Anfang meiner Datei füge ich einen Verweis auf den tsd.d.ts hinzu:

/// <reference path="../typings/tsd.d.ts" />

Die Anforderung ist ab Januar 2016 wie folgt definiert:

declare var require: NodeRequire;

interface NodeModule {
    exports: any;
    require: NodeRequireFunction;
    id: string;
    filename: string;
    loaded: boolean;
    parent: any;
    children: any[];
}
7
AlexStack

Diese Antwort bezieht sich auf moderne Setups (TypeScript 2.x, Webpack> 2.x)

sie brauchen NICHT @ types/node zu installieren (was alle Typen von node.js ist und für Front-End-Code nicht relevant ist, was Dinge wie setTimout, unterschiedlichen Rückgabewert usw. kompliziert macht.

sie müssen @ types/webpack-env installieren

npm i -D @types/webpack-env

gibt die Laufzeitsignaturen an, die das Webpack besitzt (einschließlich Required und Request.ensure usw.).

stellen Sie außerdem sicher, dass Ihre Datei tsconfig.json kein Set-Typen-Array -> hat. Dadurch werden alle Typdefinitionen in Ihrem Ordner node_modules/@ types . übernommen zu node_modules/@ types 

6
Nadav SInai

Ich nahm Peter Vargas Antwort , um declare var require: any; hinzuzufügen, und machte daraus eine generische Lösung, die für alle .ts-Dateien generisch funktioniert, indem der preprocess-loader verwendet wird:

  1. preprozessor-Loader installieren:

    npm install preprocessor-loader
    
  2. fügen Sie den Loader zu Ihrer webpack.config.js hinzu (ich verwende ts-loader für die Verarbeitung von TypeScript-Quellen):

    module: {
        loaders: [{
            test: /\.tsx?$/,
            loader: 'ts-loader!preprocessor?file&config=preprocess-ts.json'
        }]
    }
  1. Fügen Sie die Konfiguration hinzu, durch die die Problemumgehung zu jeder Quelle hinzugefügt wird:
{
    "line": false,
    "file": true,
    "callbacks": [{
        "fileName": "all",
        "scope": "source",
        "callback": "(function shimRequire(source, fileName) { return 'declare var require: any;' + source; })"
    }]
}

Sie können das robustere requir.d.ts auf dieselbe Weise hinzufügen, aber declare var require: any; war in meiner Situation ausreichend.

Beachten Sie, es gibt einen Fehler in Preprozessor 1.0.5 , der die letzte Zeile abschneidet. Stellen Sie also sicher, dass Sie am Ende einen zusätzlichen Zeilenabstand haben, und Sie werden zufrieden sein.

4
Benny Bottema

Stellen Sie sicher, dass Sie npm i @types/node installiert haben.

2

import * als Mungo aus 'Mungo'

1
basquith16

Ich habe auch mit dieser Ausgabe zu kämpfen. Ich glaube, das funktioniert für alle release-Kandidaten aka rc, aber ich habe es nicht getestet. Für @angular rc.2 funktioniert es gut.

  1. Fügen Sie core-js als npm-Abhängigkeit in package.json hinzu.
  2. typings install core-js --save ausführen
  3. entfernen Sie alle "es6-shim" Vorkommnisse in Ihrem package.json. Du brauchst es nicht mehr.

Prost!

1
kucherenkovova

Manchmal kann "jasmine" aus tsconfig.json fehlen, was zu diesem Fehler führen kann. (TypeScript 2.X)

so hinzufügen

"types": [
  "node",
  "jasmine"
]

an Ihre tsconfig.json

1

Hinzufügen von Elektron + Winkel 2/4: Neben dem Hinzufügen von 'node' zu den verschiedenen Dateien von ts.config haben sich letztendlich die folgenden Dateien hinzugefügt:. 

declare var window: Window;
interface Window {
  process: any;
  require: any;
}

Beachten Sie, dass sich mein Fall mit Elektron + Winkel 2/4 entwickelt. Ich brauchte die Anforderung am Fenster global.

1
mihaa123

Fügen Sie Folgendes in tsconfig.json hinzu:

"typeRoots": [ "../node_modules/@types" ]
0
Darshan Ballal

Nur als Referenz verwende ich Angular 7.1.4 , TypeScript 3.1.6 und das einzige, was ich tun muss, ist diese Zeile in tsconfig.json hinzuzufügen.

    "types": ["node"], // within compilerOptions

Ich hoffe es kann helfen. 

0
Hearen

Nur zusätzlich zu cgatians Antwort für TypeScript 1.x

Wenn Sie immer noch Fehler sehen, geben Sie bitte spezifisch index.d.ts in Ihren Compileroptionen an.

"files": [
    "typings/index.d.ts"
]
0
Vidish Datta
  1. 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 wissen zu lassen, dass Sie NodeJS-Code kompilieren. Dokumente .

  2. Sie müssen auch Mungo-Definitionen installieren
    tsd install mongoose --save

  3. Verwenden Sie var nicht zur Deklaration von Variablen (es sei denn, dies ist ein sehr seltener Fall), sondern verwenden Sie let. Erfahren Sie mehr darüber

0

Ich habe noch eine andere Antwort, die auf allen vorherigen Antworten aufbaut, die npm install @types/node beschreiben und node in tsconfig.json / compilerOptions / types aufnehmen.

In meinem Fall habe ich einen Basis tsConfig.json und einen separaten Code in der App Angular, der diesen erweitert:

{
"extends": "../../tsconfig.json",
"compilerOptions": {
   "outDir": "../out-tsc/app",
   "types": []
 },

Mein Problem war die leere types in diesem tsconfi.app.json - sie löscht die in der Basiskonfiguration.

0
HankCa

Wenn Sie Code kompilieren können, aber in Visual Studio 2015 "Requirement" -Funktionen als Fehler mit dem Fehlertext Name "Requires" kann nicht gefunden werden kannoder Symbol "Required" kann nicht aufgelöst werden update TypeScript für Visual Studio 2015 auf die neueste Version (derzeit 2.1.5) und aktualisieren Sie ReSharper (falls Sie es verwenden) mindestens auf Version 2016.3.2.

Ich hatte dieses nervige Problem für eine Weile, konnte keine Lösung finden, löste es aber schließlich auf diese Weise. Hoffe das hilft jemandem.

0
Mike Eshva

Ich konnte den "Erfordernis" -Fehler nicht durch Verwendung der oben genannten Tricks beheben.

aber ich fand heraus, dass das Problem darin bestand, dass meine TypeScript-Tools für Visual Studio, in denen eine alte Version (1.8.6.0) und die neueste Version von heute (2.0.6.0) ist, liegen

Sie können die neueste Version der Tools herunterladen:

https://www.Microsoft.com/de-de/download/details.aspx?id=48593

0
Thomas