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"
]
}
-
¿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 . -
También debe instalar definiciones de mangosta
tsd install mongoose --save
-
No use
var
para declarar variables (a menos que sea necesario, lo cual es un caso muy raro), uselet
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.
-
Agregue
core-js
como dependencia npm enpackage.json
-
ejecutar
typings install core-js --save
-
elimine todas las
"es6-shim"
en supackage.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
:
-
instalar preprocesador-cargador:
npm install preprocessor-loader
-
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''
}]
}
- 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:
-
Instale un paquete que defina
require
. Por ejemplo:npm install @types/node --save-dev
-
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.