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.
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"
]
}
Pour Dactylographier 2.x , il y a maintenant deux étapes:
-
installez un paquet qui définit
require
. Par exemple:npm install @types/node --save-dev
-
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.
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')
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.
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[];
}
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 :
-
installer le préprocesseur-loader:
npm install preprocessor-loader
-
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'
}]
}
- 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.
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
parfois manquant "jasmine" de tsconfig.json peut causer cette erreur. (dactylographié 2.X)
ainsi ajouter
"types": [
"node",
"jasmine"
]
à votre tsconfig.json
é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.
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.
- Ajouter
core-js
comme mnp de la dépendance danspackage.json
- exécuter
typings install core-js --save
- supprimer tous les
"es6-shim"
occurences dans votrepackage.json
. Vous n'en avez plus besoin.
santé!
-
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 . -
vous devez également installer Mangoose definitions
tsd install mongoose --save
-
ne pas utiliser
var
pour déclarez les variables (sauf si nécessaire, ce qui est un cas très rare), utilisezlet
à la place. en savoir plus sur ce
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
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"
]
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.
ajouter ce qui suit dans tsconfig.json
:
"typeRoots": [ "../node_modules/@types" ]