J'essaie de faire fonctionner ma première application TypeScript et DefinitelyTyped Node.js, et je rencontre certaines erreurs.
J'obtiens l'erreur "TS2304: Impossible de trouver le nom 'require'" lorsque j'essaie de transpiler une simple page TypeScript Node.js. J'ai lu plusieurs autres occurrences de cette erreur sur Stack Overflow et je ne pense pas avoir des problèmes similaires. Je lance à l'invite du shell la commande:
tsc movie.server.model.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 var mongoose=require('mongoose')
ligne.
Le contenu du fichier typings / tsd.d.ts est le suivant:
/// <reference path="node/node.d.ts" />
/// <reference path="requirejs/require.d.ts" />
Les références du fichier .d.ts ont été placées dans les dossiers appropriés et ajoutées à typings / tsd.d.ts par les commandes:
tsd install node --save
tsd install require --save
Le fichier .js produit semble fonctionner correctement, je peux donc ignorer l'erreur. Mais j'apprécierais de savoir pourquoi cette erreur se produit et ce que je fais mal.
la source
when I attempt to transpile a simple ts node page
<comment transpilez-vous ... quel utilitaireimport { mongoose } from 'mongoose'
?Réponses:
Rapide et sale
Si vous n'avez qu'un seul fichier à l'aide de require, ou si vous le faites à des fins de démonstration, vous pouvez définir require en haut de votre fichier TypeScript.
TypeScript 2.x
Si vous utilisez TypeScript 2.x, vous n'avez plus besoin d'installer Typings ou Definitely Typed. Installez simplement le package suivant.
L'avenir des fichiers de déclaration (15/06/2016)
Vérifiez ou modifiez votre src /tsconfig.app.json afin qu'il contienne les éléments suivants:
Assurez-vous que le fichier se trouve dans le dossier src et non dans le dossier racine de l'application.
Par défaut, tout package sous @types est déjà inclus dans votre build sauf si vous avez spécifié l'une de ces options. Lire la suite
TypeScript 1.x
À l'aide de typages (remplacement de DefinitelyTyped), vous pouvez spécifier une définition directement à partir d'un référentiel GitHub.
Installer les saisies
Installez la définition de type requireJS à partir du référentiel DefinitelyType
Webpack
Si vous utilisez Webpack comme outil de génération, vous pouvez inclure les types de Webpack.
npm install --save-dev @ types / webpack-env
Mettez à jour votre
tsconfig.json
avec les éléments suivants souscompilerOptions
:Cela vous permet de faire
require.ensure
et d'autres fonctions spécifiques Webpack.CLI angulaire
Avec CLI, vous pouvez suivre l'étape Webpack ci-dessus et ajouter le bloc "types" à votre
tsconfig.app.json
.Alternativement, vous pouvez utiliser les
node
types préinstallés . Gardez à l'esprit que cela inclura des types supplémentaires à votre code côté client qui ne sont pas vraiment disponibles.la source
Unable to find "require" ("npm") in the registry
. Est-il nécessaire de faire partie d'un ensemble plus large de typages nodeJS?require
. peut-être sa bonne réponse pour une certaine variation de la cible de sortie ES5 mais pas le cas général.@types/node
sont les définitions TypeScript. Node ne les inclut pas et ne devrait pas les inclure.Pour TypeScript 2.x , il y a maintenant deux étapes:
Installez un package qui définit
require
. Par exemple:Dites à TypeScript de l'inclure globalement dans
tsconfig.json
: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 packages, vous devez simplement utiliser leimport package from 'package'
modèle. Il n'est pas nécessaire d'inclure tous les packages dans le tableau de types tsconfig.json ci-dessus.la source
"types": ["jasmine", "hammerjs"]
àtsconfig.js
je dois ajouternode
aussi. Merci Jordan.import express from "express";
me dit maintenant que je dois essayer d'installer @ types / express ou ajouter un fichier .d.ts pour cela.@types/...
qu'un simple@types/node
dossier ne pas ajouter"types": ["node"]
àtsconfig.json
cause tapuscrit compiller omettra d' autres paquets non mentionnés. Cela cassera la résolution de vos types d'IDE. Il est écrit ici typescriptlang.org/docs/handbook/…Vous pouvez
Ou, pour une prise en charge plus complète, utilisez le fichier require.d.ts de DefinitelyTyped
De plus, au lieu de
var mongoose = require('mongoose')
, vous pouvez essayer ce qui suitla source
use strict
dans TypeScript: réponse basarat et «Use Strict» nécessaires dans un fichier TypeScript?. Il est nécessaire d'utiliseruse strict
en TypeScript."use strict"
, je vais modifier ma réponseCette réponse concerne les configurations modernes (TypeScript 2.x, Webpack > 2.x)
Tu ne besoin d'installer @ types / node (qui est tous les types Node.js et n'est pas pertinent pour le code frontal, compliquant en fait des choses telles que setTimout différentes valeurs de retour, etc.)
Vous avez besoin d'installer @ types / webpack-env
npm i -D @types/webpack-env
qui donne les signatures d'exécution de Webpack (y compris
require
,require.ensure
etc.)Assurez-vous également que votre fichier tsconfig.json n'a pas de tableau de «types» défini -> ce qui lui permettra de récupérer toutes les définitions de type dans votre dossier node_modules / @ types.
Si vous souhaitez restreindre la recherche de types, vous pouvez définir la propriété typeRoot sur node_modules / @ types.
la source
Au lieu de:
Essayer:
c'est-à-dire le chemin de référence en premier.
la source
Dans mon cas, c'était un problème super stupide, où le
src/tsconfig.app.json
dépassement dutsconfig.json
paramètre.Donc, j'ai eu ça dans
tsconfig.json
:Et celui-ci dans
src/tsconfig.app.json
:J'espère que quelqu'un trouve cela utile, car cette erreur me faisait des cheveux gris.
la source
Juste pour référence, j'utilise Angular 7.1.4 , TypeScript 3.1.6 , et la seule chose que je dois faire est d'ajouter cette ligne dans
tsconfig.json
:la source
npm i @types/node
puis ajouteznode
au champ types dans votre tsconfig. - npm s'est-il installé.J'ai trouvé que la solution était d'utiliser la commande TSD:
Ce qui ajoute / met à jour le
typings/tsd.d.ts
fichier et ce fichier contient toutes les définitions de type requises pour une application de nœud.En haut de mon dossier, je mets une référence à
tsd.d.ts
ceci:Le besoin est défini comme ceci à partir de janvier 2016:
la source
J'ai pris la réponse de Peter Varga pour l'ajouter
declare var require: any;
et en faire une solution générique qui fonctionne pour tous les fichiers .ts de manière générique en utilisant le pré-processus-chargeur :installer le préprocesseur-chargeur:
ajoutez le chargeur à votre webpack.config.js (j'utilise ts-loader pour le traitement des sources TypeScript):
Vous pouvez ajouter le require.d.ts le plus robuste de la même manière, mais
declare var require: any;
c'était suffisant dans ma situation.Remarque, il y a un bogue dans le préprocesseur 1.0.5 , qui coupe la dernière ligne, alors assurez-vous simplement d'avoir un retour d'espace de ligne supplémentaire à la fin et tout ira bien.
la source
J'ai également eu du mal à résoudre ce problème. Je crois que cela fonctionne pour tous les candidats à la version aka rc mais je n'ai pas testé. Pour @angular rc.2, cela fonctionne bien.
core-js
tant que dépendance npm danspackage.json
typings install core-js --save
"es6-shim"
occurrences de votrepackage.json
. Vous n'en avez plus besoin.À votre santé!
la source
Assurez-vous que vous avez installé
npm i @types/node
la source
importer * comme mangouste de 'mangouste'
la source
Parfois, "jasmine" manquant de tsconfig.json peut provoquer cette erreur. (TypeScript 2.X)
Alors ajoutez
à votre
tsconfig.json
dossier.la source
Addition Electron + Angular 2/4:
En plus d'ajouter le type 'node' à divers fichiers ts.config, ce qui a finalement fonctionné pour moi a été d'ajouter le suivant au
typings.d.ts
fichier:Notez que mon boîtier se développe avec Electron + Angular 2/4. J'avais besoin de l'exigence sur la fenêtre globale.
la source
Pour moi, il est résolu en ajoutant des types aux options du compilateur angulaire.
la source
Avez-vous spécifié quel module utiliser pour transpiler le code?
tsc --target es5 --module commonjs script.ts
Vous devez le faire pour que le transpilateur sache que vous compilez du code NodeJS. Docs .
Vous devez également installer les définitions de mangouste
tsd install mongoose --save
Ne pas utiliser
var
pour déclarer des variables (sauf si nécessaire, ce qui est un cas très rare), utilisezlet
plutôt. En savoir plusla source
En plus de la réponse de cgatian, pour TypeScript 1.x
Si vous voyez toujours des erreurs, veuillez fournir spécifiquement index.d.ts dans vos options de compilation.
la source
Je n'ai pas pu obtenir l'erreur «exiger» pour disparaître en utilisant l'une des astuces ci-dessus.
Mais j'ai découvert que le problème était que mes outils TypeScript pour Visual Studio contenaient une ancienne version (1.8.6.0) et la dernière version à ce jour (2.0.6.0).
Vous pouvez télécharger la dernière version des outils à partir de:
TypeScript pour Visual Studio 2015
la source
Si vous pouvez compiler du code, mais que Visual Studio 2015 marque les fonctions 'require' car les erreurs avec le texte d'erreur ne peuvent pas trouver le nom 'require' ou ne peuvent pas résoudre le symbole 'require' , mettez à jour TypeScript for Visual Studio 2015 vers la dernière version (actuellement 2.1). 5) et mettez à jour ReSharper (si vous l'utilisez) vers au moins la version 2016.3.2.
J'ai eu ce problème ennuyeux pendant un certain temps et je n'ai pas pu trouver de solution, mais je l'ai finalement résolu de cette façon.
la source
Ajoutez ce qui suit dans
tsconfig.json
:la source
Je n'ai pas encore une autre réponse qui prend appui sur toutes les précédentes qui décrivent
npm install @types/node
et y comprisnode
danstsconfig.json / compilerOptions / types
.Dans mon cas, j'ai une base
tsConfig.json
et une autre dans l'application Angular qui étend celle-ci:Mon problème était le vide
types
dans celatsconfi.app.json
- il encombre celui de la configuration de base.la source
Si vous rencontrez ce problème dans un fichier .ts qui n'est là que pour vous fournir des valeurs constantes, vous pouvez simplement
et l'erreur ne se reproduira pas.
la source