tutorial socket handling example error node.js typescript definitelytyped

node.js - handling - socket io tutorial



error mecanografiado obteniendo TS2304: no se puede encontrar el nombre ''requerir'' (21)

Estoy tratando de poner en funcionamiento mi primera aplicación de nodo Typecript y DefinitelyTyped, y me encuentro con algunos errores.

Recibo el error "TS2304: No puedo encontrar el nombre ''requerir''" cuando intento transpilar una página de nodo ts simple. He leído varias otras ocurrencias de este error en SO 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 produce en la línea var mongoose = require (''mongoose'')

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.


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.

declare var require: any

TypeScript 2.x

Si está utilizando TypeScript 2.x ya no necesita tener Typings o Definitely Typed instalado. Simplemente instale el siguiente paquete.

npm install @types/node --save-dev

El futuro de los archivos de declaración (15/06/2016)

Herramientas como Typings y tsd continuarán funcionando, y trabajaremos junto a esas comunidades para garantizar una transición sin problemas.

OPCIONAL: si está especificando typeroots o types en su tsconfig.json . Es posible que deba actualizar tsconfig.json para incluir el nodo como tipo. Por defecto, cualquier paquete bajo @types ya está incluido en su compilación a menos que haya especificado alguna de estas opciones. Lee mas

A continuación se muestra la configuración adecuada para cada una de estas opciones.

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

Usando tipings (reemplazo de DefinitelyTyped) puede especificar una definición directamente desde un repositorio de GitHub.

Instalar tipings

npm install typings -g --save-dev

Instale la definición de tipo requireJS del repositorio de DefinitelyType

typings install dt~node --save --global

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 en compilerOptions :

"types": [ "webpack-env" ]

Esto le permite hacer require.ensure y otras funciones específicas de Webpack.

CLI angular

Con CLI, puede seguir el paso anterior de Webpack y agregar el bloque de "tipos" a su tsconfig.app.json .

Alternativamente, puede usar los tipos de node preinstalados. Tenga en cuenta que esto incluirá tipos adicionales a su código del lado del cliente que no están realmente disponibles.

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


  1. ¿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. Docs .

  2. También debe instalar definiciones de mangosta
    tsd install mongoose --save

  3. No use var para declarar variables (a menos que sea necesario, lo cual es un caso muy raro), use let lugar. Aprende más sobre eso


Agregue lo siguiente en tsconfig.json :

"typeRoots": [ "../node_modules/@types" ]


Alguna vez falta "jazmín" de tsconfig.json puede causar este error. (Mecanografiado 2.X)

entonces agrega

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

a su tsconfig.json


Asegúrese de haber instalado npm i @types/node


Electron + angular 2/4 además: además de agregar el tipo ''nodo'' a ts.config varios archivos, lo que finalmente funcionó para mí es agregar el siguiente al archivo typings.d.ts:

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

Tenga en cuenta que mi caso se está desarrollando con electrón + angular 2/4. Necesitaba el requerimiento en la ventana global.


En lugar de:

''use strict''; /// <reference path="typings/tsd.d.ts" />

Tratar:

/// <reference path="typings/tsd.d.ts" /> ''use strict'';

es decir, la ruta de referencia primero.


En mi caso, fue un problema súper estúpido, donde src/tsconfig.app.json tsconfig.json configuración de tsconfig.json .

Entonces, tuve esto en tsconfig.json :

"types": [ "node" ]

Y este en src/tsconfig.app.json :

"types": []

Espero que alguien encuentre esto útil, ya que este error me estaba causando canas.


Encontré que la solución era usar el comando TSD:

tsd install node --save

Que agrega / actualiza el archivo typings/tsd.d.ts 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 como esta:

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

El requerimiento se define así a partir de enero de 2016:

declare var require: NodeRequire; interface NodeModule { exports: any; require: NodeRequireFunction; id: string; filename: string; loaded: boolean; parent: any; children: any[]; }


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.

  1. Agregue core-js como dependencia npm en package.json
  2. ejecutar typings install core-js --save
  3. elimine todas las "es6-shim" en su package.json . Ya no lo necesitas.

¡Salud!


No pude obtener el error ''requerir'' para desaparecer usando cualquiera de los trucos anteriores.

pero descubrí que el problema era que mis herramientas de mecanografía 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:

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


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 puede 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, no pude encontrar una solución, pero finalmente lo resolví de esta manera. Espero que esto ayude a alguien.


Si se enfrenta a este problema en un archivo ts que solo está allí para proporcionarle valores constantes, puede simplemente

cambie el nombre de su archivo .ts a archivo .js

y el error no vendrá de nuevo.


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.

"files": [ "typings/index.d.ts" ]


Solo como referencia, estoy usando Angular 7.1.4 , typecript 3.1.6 y lo único que necesito hacer es agregar esta línea en tsconfig.json

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

Espero que pueda ayudar.


Tengo otra respuesta que se basa en todas las anteriores que describen npm install @types/node e incluye el node en tsconfig.json / compilerOptions / types .

En mi caso, tengo una base tsConfig.json y otra separada en la aplicación Angular que extiende esta:

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

Mi problema fueron los types vacíos en este tsconfi.app.json , que activa el de la configuración base.


Tomé la respuesta de Peter Varga para agregar declare var require: any; y lo convirtió en una solución genérica que funciona para todos los archivos .ts genéricamente utilizando el preprocess-loader :

  1. instalar preprocesador-cargador:

    npm install preprocessor-loader

  2. agregue el cargador a su webpack.config.js (estoy usando ts-loader para procesar fuentes TypeScript):

module: { loaders: [{ test: //.tsx?$/, loader: ''ts-loader!preprocessor?file&config=preprocess-ts.json'' }] }

  1. Agregue la configuración que agregará la solución a cada fuente:

{ "line": false, "file": true, "callbacks": [{ "fileName": "all", "scope": "source", "callback": "(function shimRequire(source, fileName) { return ''declare var require: any;'' + source; })" }] }

Puede agregar el require.d.ts más robusto 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.


Usted puede

declare var require: any

O, para obtener un soporte más completo, use require.d.ts de DefinitelyTyped

Además, en lugar de var mongoose = require(''mongoose'') , puede intentar lo siguiente

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


importar * como mangosta de ''mangosta''


Esta respuesta se relaciona con configuraciones modernas (typecript 2.x, webpack> 2.x)

NO es necesario instalar @ types / node (que es todos los tipos de node.js y no es relevante para el código de front-end, en realidad complica cosas como setTimout, diferentes valores de retorno, etc.)

necesitas instalar @ types / webpack-env

npm i -D @types/webpack-env

que proporciona las firmas de tiempo de ejecución que tiene webpack (incluyendo require y require.ensure, etc.)

también asegúrese de que su 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


Para TypeScript 2.x , ahora hay dos pasos:

  1. Instale un paquete que defina require . Por ejemplo:

    npm install @types/node --save-dev

  2. Dígale a TypeScript que lo incluya globalmente en tsconfig.json :

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

El segundo paso solo es importante si necesita acceso a funciones disponibles globalmente, como require . Para la mayoría de los paquetes, solo debe usar el import package from ''package'' patrón import package from ''package'' . No es necesario incluir todos los paquetes en la matriz de tipos tsconfig.json anterior.