Estoy tratando de poner en marcha mi primera aplicación TypeScript y DefinitelyTyped Node.js, y me encuentro con algunos errores.
Recibo el error "TS2304: No se puede encontrar el nombre 'require'" cuando intento transpilar una página simple de TypeScript Node.js. He leído varias otras ocurrencias de este error en Stack Overflow, y no creo que tenga problemas similares. Estoy ejecutando en el indicador de shell el comando:
tsc movie.server.model.ts.
Los contenidos de este archivo son:
'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';
El error se lanza en la var mongoose=require('mongoose')
línea.
Los contenidos del archivo typings / tsd.d.ts son:
/// <reference path="node/node.d.ts" />
/// <reference path="requirejs/require.d.ts" />
Las referencias del archivo .d.ts se colocaron en las carpetas apropiadas y se agregaron a typings / tsd.d.ts mediante los comandos:
tsd install node --save
tsd install require --save
El archivo .js producido parece funcionar bien, por lo que podría ignorar el error. Pero agradecería saber por qué se produce este error y qué estoy haciendo mal.
fuente
when I attempt to transpile a simple ts node page
<cómo estás transpilando ... qué utilidadimport { mongoose } from 'mongoose'
?Respuestas:
Rápido y sucio
Si solo tiene un archivo usando require, o lo está haciendo con fines de demostración, puede definir require en la parte superior de su archivo TypeScript.
TypeScript 2.x
Si está utilizando TypeScript 2.x ya no necesita tener Typings o Definitely Typed instalado. Simplemente instale el siguiente paquete.
El futuro de los archivos de declaración (15/06/2016)
Verifique o edite su src /tsconfig.app.json para que contenga lo siguiente:
Asegúrese de que el archivo esté en la carpeta src y que no esté en la carpeta de la aplicación raíz.
Por defecto, cualquier paquete bajo @types ya está incluido en su compilación a menos que haya especificado alguna de estas opciones. Lee mas
TypeScript 1.x
Usando tipings (el reemplazo de DefinitelyTyped) puede especificar una definición directamente desde un repositorio de GitHub.
Instalar tipings
Instale la definición de tipo requireJS del repositorio de DefinitelyType
Paquete web
Si está utilizando Webpack como su herramienta de compilación, puede incluir los tipos de Webpack.
npm install --save-dev @ types / webpack-env
Actualice su
tsconfig.json
con lo siguiente encompilerOptions
:Esto le permite hacer
require.ensure
y otras funciones específicas de Webpack.CLI angular
Con CLI puede seguir el paso de Webpack anterior y agregar el bloque de "tipos" a su
tsconfig.app.json
.Alternativamente, puede usar los
node
tipos preinstalados . Tenga en cuenta que esto incluirá tipos adicionales a su código del lado del cliente que realmente no están disponibles.fuente
Unable to find "require" ("npm") in the registry
. ¿Se requiere parte de un conjunto más grande de tipings de nodeJS?require
. tal vez sea la respuesta correcta para alguna variación del objetivo de salida ES5, pero no el caso general.@types/node
son las definiciones de TypeScript. El nodo no incluye estos, ni deberían.Para TypeScript 2.x , ahora hay dos pasos:
Instale un paquete que defina
require
. Por ejemplo:Dígale a TypeScript que lo incluya globalmente en
tsconfig.json
:El segundo paso solo es importante si necesita acceso a funciones disponibles globalmente como
require
. Para la mayoría de los paquetes, solo debes usar elimport package from 'package'
patrón. No es necesario incluir todos los paquetes en la matriz de tipos tsconfig.json anterior.fuente
"types": ["jasmine", "hammerjs"]
atsconfig.js
Hade para agregarnode
también. Gracias Jordanimport express from "express";
ahora me dice que necesito intentar instalar @ types / express o agregar un archivo .d.ts para ello.@types/...
que un simple@types/node
carpeta no añada"types": ["node"]
entsconfig.json
porque mecanografiado compiller omitirá otros paquetes que no se mencionan. Esto interrumpirá la resolución de sus tipos de IDE. Está escrito aquí typescriptlang.org/docs/handbook/…Usted puede
O, para obtener un soporte más completo, use require.d.ts de DefinitelyTyped
Además, en lugar de
var mongoose = require('mongoose')
, puedes probar lo siguientefuente
use strict
en TypeScript: ¿se necesita la respuesta basada y el "uso estricto" en un archivo TypeScript? . Es necesario usaruse strict
en TypeScript."use strict"
,Esta respuesta se refiere a configuraciones modernas (TypeScript 2.x, Webpack > 2.x)
Usted no necesita instalar @ tipos / nodo (que es todos los tipos y Node.js es irrelevante para el código de front-end, en realidad lo que complica las cosas tales como valores diferentes de retorno setTimout, etc ..
Usted hace necesario instalar @ tipos / webpack-env
npm i -D @types/webpack-env
que da las firmas de tiempo de ejecución que webpack tiene (incluyendo
require
,require.ensure
, etc.)También asegúrese de que su archivo tsconfig.json no tenga una matriz de 'tipos' establecida -> lo que hará que recoja todas las definiciones de tipo en su carpeta node_modules / @ types.
Si desea restringir la búsqueda de tipos, puede establecer la propiedad typeRoot en node_modules / @ types.
fuente
En vez de:
Tratar:
es decir, la ruta de referencia primero.
fuente
En mi caso, fue un problema súper estúpido, donde
src/tsconfig.app.json
estaba anulando latsconfig.json
configuración.Entonces, tuve esto en
tsconfig.json
:Y este en
src/tsconfig.app.json
:Espero que alguien encuentre esto útil, ya que este error me estaba causando canas.
fuente
Solo como referencia, estoy usando Angular 7.1.4 , TypeScript 3.1.6 , y lo único que necesito hacer es agregar esta línea en
tsconfig.json
:fuente
npm i @types/node
y luego agreguenode
al campo de tipos en su tsconfig. - ¿npm instaló?Encontré que la solución era usar el comando TSD:
Que agrega / actualiza el
typings/tsd.d.ts
archivo y ese archivo contiene todas las definiciones de tipo que se requieren para una aplicación de nodo.En la parte superior de mi archivo, pongo una referencia a
tsd.d.ts
esto:El requerimiento se define así a partir de enero de 2016:
fuente
Tomé la respuesta de Peter Varga para agregarla
declare var require: any;
y la convertí en una solución genérica que funciona para todos los archivos .ts genéricamente usando el preprocesador de carga :instalar preprocesador-cargador:
agregue el cargador a su webpack.config.js (estoy usando ts-loader para procesar fuentes TypeScript):
Puede agregar los require.d.ts más robustos de la misma manera, pero
declare var require: any;
fue suficiente en mi situación.Tenga en cuenta que hay un error en el preprocesador 1.0.5 , que corta la última línea, así que asegúrese de tener un retorno de espacio de línea adicional al final y estará bien.
fuente
He estado luchando por este problema también. Creo que esto funciona para todos los candidatos de lanzamiento, también conocido como rc, pero no lo hice. Para @angular rc.2 funciona bien.
core-js
como dependencia npm enpackage.json
typings install core-js --save
"es6-shim"
ocurrencias en supackage.json
. Ya no lo necesitas.¡Salud!
fuente
Asegúrate de haber instalado
npm i @types/node
fuente
importar * como mangosta de 'mangosta'
fuente
Alguna vez falta "jazmín" de tsconfig.json puede causar este error. (TypeScript 2.X)
Entonces agregue
a su
tsconfig.json
archivofuente
Electrón + Angular 2/4 además:
Además de agregar el tipo 'nodo' a ts.config varios archivos, lo que finalmente funcionó para mí fue agregar el siguiente al
typings.d.ts
archivo:Tenga en cuenta que mi caso se está desarrollando con Electron + Angular 2/4. Necesitaba el requerimiento en la ventana global.
fuente
Para mí, se resuelve agregando tipos a las opciones del compilador angular.
fuente
¿Especificó qué módulo usar para transpilar el código?
tsc --target es5 --module commonjs script.ts
Debe hacer eso para que el transpilador sepa que está compilando el código NodeJS. Doc .
También debe instalar definiciones de mangosta
tsd install mongoose --save
No lo use
var
para declarar variables (a menos que sea necesario, lo cual es un caso muy raro), uselet
en su lugar. Aprende más sobre esofuente
Solo además de la respuesta de cgatian, para TypeScript 1.x
Si todavía ve errores, proporcione específicamente index.d.ts en las opciones de su compilador.
fuente
No pude obtener el error 'requerir' para desaparecer usando cualquiera de los trucos anteriores.
Pero descubrí que el problema era que mis herramientas TypeScript para Visual Studio tenían una versión anterior (1.8.6.0) y la última versión actual (2.0.6.0).
Puede descargar la última versión de las herramientas desde:
TypeScript para Visual Studio 2015
fuente
Si puede compilar código, pero Visual Studio 2015 marca las funciones 'require' ya que los errores con texto de error no pueden encontrar el nombre 'require' o no pueden resolver el símbolo 'require' , actualice TypeScript para Visual Studio 2015 a la última versión (en este momento 2.1. 5) y actualice ReSharper (si lo usa) a al menos la versión 2016.3.2.
Tuve este molesto problema por un tiempo y no pude encontrar una solución, pero finalmente lo resolví de esta manera.
fuente
Agregue lo siguiente en
tsconfig.json
:fuente
Tengo otra respuesta que se basará en todos los anteriores que describen
npm install @types/node
e incluidosnode
entsconfig.json / compilerOptions / types
.En mi caso, tengo una base
tsConfig.json
y una separada en la aplicación Angular que extiende esta:Mi problema fue el vacío
types
en estotsconfi.app.json
: cambia el que está en la configuración base.fuente
Si enfrenta este problema en un archivo .ts que solo está allí para proporcionarle valores constantes, entonces puede simplemente
y el error no vendrá de nuevo.
fuente