erreur de saisie TS2304: impossible de trouver le nom 'require'

j'essaie de faire démarrer et exécuter ma première application de noeud dactylographié et Définiitelytyped, avec quelques erreurs.

J'obtiens L'erreur" TS2304: Je ne trouve pas le nom 'require' " lorsque je tente de transplier une simple page ts node. J'ai lu plusieurs autres occurrences de cette erreur et je ne pense pas que j'ai des problèmes similaires.

J'exécute à l'invite shell la commande: TSC movie.serveur.modèle.ts. Le contenu de ce fichier est:

'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';

l'erreur est lancée sur la ligne var Mangoose=require ('Mangoose')

le contenu de La typings/dnt.D. les fichiers ts sont:

/// <reference path="node/node.d.ts" />
/// <reference path="requirejs/require.d.ts" />

The .D. les références de fichiers ts ont été placées dans les dossiers appropriés et ajoutées à typographies/tsd.D. ts par les commandes:

tsd install node --save
tsd install require --save

le produit .fichier js semble bien fonctionner, j'ai donc pu ignorer l'erreur. Mais je serait curieux de savoir pourquoi cette erreur se produit et ce que je fais de mal.

313
demandé sur cgatian 2015-07-02 03:21:40

16 réponses

rapide et sale

si vous n'avez qu'un seul fichier utilisant require, ou si vous le faites à des fins de démonstration, vous pouvez définir require en haut de votre fichier dactylographié.

declare var require: any

Tapescript 2.x

si vous utilisez TypeScript 2.x vous n'avez plus besoin d'avoir des typographies ou certainement dactylographié installé. Installez simplement le paquet suivant.

npm install @types/node --save-dev

l'Avenir de La Déclaration Des Fichiers (6/15/2016)

outils comme la typographie et tsd va continuer à travailler, et nous allons travailler aux côtés de ces communautés pour assurer une transition en douceur.

optionnel: Si vous spécifiez typeroots ou types dans votre tsconfig.json . Vous pouvez avoir besoin de mettre à jour le tsconfig.json pour inclure le noeud comme type. Par défaut, tout paquet sous @types est déjà inclus dans votre build sauf si vous avez spécifié l'une de ces options. lire la suite

ci-dessous est la configuration appropriée pour chacune de ces options.

{
    "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"
         ]
    }
}

dactylographié 1.x

en utilisant des typographies (definitelytyped's replacement) vous pouvez spécifier une définition directement à partir d'un dépôt GitHub.

Install typings

npm install typings -g --save-dev

Installer le requireJS définition de type de DefinitelyType repo

typings install dt~node --save --global

Webpack

si vous utilisez Webpack comme outil de construction, vous pouvez inclure les types Webpack.

npm install --save-dev @types/webpack-env

mettez à jour votre tsconfig.json avec ce qui suit sous compilerOptions :

"types": [
      "webpack-env"
    ]

cela vous permet de faire require.ensure et d'autres fonctions spécifiques de Webpack.

Angulaire de la CLI

avec CLI vous pouvez suivre l'étape Webpack ci-dessus et ajouter le bloc "types" à votre tsconfig.app.json .

alternativement, vous pouvez utiliser les types préinstallés node . Gardez à l'esprit que cela inclura des types supplémentaires à votre code côté client qui ne sont pas vraiment disponibles.

"compilerOptions": {
    // other options
    "types": [
      "node"
    ]
  }
499
répondu cgatian 2018-06-21 12:17:38

Pour Dactylographier 2.x , il y a maintenant deux étapes:

  1. installez un paquet qui définit require . Par exemple:

    npm install @types/node --save-dev
    
  2. dire à typographie de l'inclure globalement dans tsconfig.json :

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

la deuxième étape n'est importante que si vous avez besoin d'accéder à des fonctions disponibles dans le monde entier telles que: require . Pour la plupart des paquets, vous devez juste utiliser le modèle import package from 'package' . Il n'est pas nécessaire d'inclure tous les paquets dans la tsconfig.tableau des types json ci-dessus.

71
répondu Jordan 2016-09-09 00:57:54

Vous pouvez

declare var require: any

Ou, pour plus de soutien complet, utiliser DefinitelyTyped besoin.D. ts

aussi, au lieu de var mongoose = require('mongoose') , vous pouvez essayer le suivant

import mongoose from 'mongoose' // or
import mongoose = require('mongoose')
59
répondu Peter V 2016-02-18 22:50:49

au lieu de:

'use strict';

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

, Essayez:

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

'use strict';

, c'est-à-dire le chemin de référence en premier.

9
répondu Hurricane 2016-01-14 21:18:46

j'ai trouvé que la solution était d'utiliser la commande TSD:

tsd install node --save

qui ajoute/met à jour le fichier typings/tsd.d.ts et ce fichier contient toutes les définitions de type qui sont nécessaires pour une application de noeud.

en haut de mon dossier, j'ai mis une référence au tsd.d.ts comme ceci:

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

l'exigence est définie comme ceci à partir de janvier 2016:

declare var require: NodeRequire;

interface NodeModule {
    exports: any;
    require: NodeRequireFunction;
    id: string;
    filename: string;
    loaded: boolean;
    parent: any;
    children: any[];
}
7
répondu AlexStack 2017-07-13 20:32:00

j'ai pris la réponse de Peter Varga pour ajouter declare var require: any; et en a fait une solution générique qui fonctionne pour tous .ts fichiers de façon générique à l'aide de la prétraiter-loader :

  1. installer le préprocesseur-loader:

    npm install preprocessor-loader
    
  2. ajoutez le chargeur à votre webpack .config.js (j'utilise ts-loader pour le traitement des sources dactylographiées):

    module: {
        loaders: [{
            test: /\.tsx?$/,
            loader: 'ts-loader!preprocessor?file&config=preprocess-ts.json'
        }]
    }
  1. ajouter la configuration qui va ajouter la solution à chaque source:
{
    "line": false,
    "file": true,
    "callbacks": [{
        "fileName": "all",
        "scope": "source",
        "callback": "(function shimRequire(source, fileName) { return 'declare var require: any;' + source; })"
    }]
}

vous pouvez ajouter le plus robuste require.D. ts de la même manière, mais declare var require: any; était suffisant dans ma situation.

Note, il y a un bug dans le préprocesseur 1.0.5 , qui coupe la dernière ligne, alors assurez-vous d'avoir une ligne supplémentaire de l'espace de retour à la fin et vous serez amende.

4
répondu Benny Bottema 2017-05-23 12:26:32

cette réponse concerne les configurations modernes (dactylographié 2.x, webpack > 2.x)

vous N'avez pas besoin d'installer @types/node (qui est tout de node.js types et est irrelvant pour le code front-end,en fait compliquant des choses telles que setTimout valeur de retour différente, etc..

vous N'avez besoin d'installer @types/webpack-env

npm i -D @types/webpack-env

qui donne les signatures d'exécution que webpack a (y compris require et require.assurer etc..)

assurez-vous également que votre tsconfig.json n'a pas de tableau set 'types' - > qui le fera ramasser toutes les définitions de type dans votre dossier node_modules/@types. si vous voulez restreindre la recherche de types, vous pouvez définir le typeRoot propriété node_modules/@type

4
répondu Nadav SInai 2018-03-15 12:22:26

parfois manquant "jasmine" de tsconfig.json peut causer cette erreur. (dactylographié 2.X)

ainsi ajouter

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

à votre tsconfig.json

1
répondu Samintha Kaveesh 2017-04-07 08:04:27

électron + addition angulaire 2/4: En plus de l'ajout du type 'node' à ts.config divers fichiers, ce qui a finalement fonctionné pour moi est d'ajouter le prochain taper.D. fichier ts:

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

notez que mon cas se développe avec electron + angular 2/4. J'avais besoin de besoin sur la fenêtre mondial.

1
répondu mihaa123 2017-11-18 10:10:38

assurez-vous d'avoir installé npm i @types/node

1
répondu Rupesh Kumar Tiwari 2018-08-24 20:41:45

j'ai eu du mal avec ce numéro aussi. Je crois que cela fonctionne pour tous candidats de libération alias rc mais je n'ai pas testé est cependant. Pour @angulaire de la rc.2 il fonctionne bien.

  1. Ajouter core-js comme mnp de la dépendance dans package.json
  2. exécuter typings install core-js --save
  3. supprimer tous les "es6-shim" occurences dans votre package.json . Vous n'en avez plus besoin.

santé!

0
répondu kucherenkovova 2016-06-21 12:26:31
  1. avez-vous spécifié quel module utiliser pour transférer le code?

    tsc --target es5 --module commonjs script.ts

    Vous devez faire cela pour faire savoir au transpirateur que vous compilez le code NodeJS. Docs .

  2. vous devez également installer Mangoose definitions

    tsd install mongoose --save

  3. ne pas utiliser var pour déclarez les variables (sauf si nécessaire, ce qui est un cas très rare), utilisez let à la place. en savoir plus sur ce

0
répondu Ayman Nedjmeddine 2016-07-19 08:59:57

Je n'ai pas pu obtenir l'erreur 'require' pour disparaître en utilisant l'un des trucs ci-dessus.

mais j'ai découvert que le problème était que mes outils de Dactylographie pour visual studio où une ancienne version (1.8.6.0) et la dernière version à ce jour est (2.0.6.0)

vous pouvez télécharger la dernière version des outils à partir de:

https://www.microsoft.com/en-us/download/details.aspx?id=48593

0
répondu Thomas 2016-11-18 10:32:48

juste en plus de la réponse de cgatian, pour dactylographié 1.x

si vous voyez toujours des erreurs, veuillez fournir l'index.d.ts dans vos options de compilation.

"files": [
    "typings/index.d.ts"
]
0
répondu Vidish Datta 2017-01-31 00:20:53

si vous pouvez compiler le code mais Visual Studio 2015 marque les fonctions" require "comme des erreurs avec le texte d'erreur ne peut pas trouver le nom" require " ou ne peut pas résoudre le symbole "require " mettre à jour le code dactylographique pour Visual Studio 2015 à la dernière version (pour le moment 2.1.5) et mettre à jour ReSharper (si vous l'utilisez) au moins la version 2016.3.2.

j'ai eu ce problème ennuyeux pendant un certain temps, Je ne pouvais pas trouver une solution, mais finalement résolu de cette façon. Espérons que cela aide à quelqu'un.

0
répondu Mike Eshva 2017-02-02 19:36:18

ajouter ce qui suit dans tsconfig.json :

"typeRoots": [ "../node_modules/@types" ]
0
répondu Darshan Ballal 2017-10-06 07:40:44