typescript ricevendo errore TS2304: imansible trovare il nome ‘require’

Sto cercando di far funzionare la mia prima app di Typescript e DefinitelyTyped node e di eseguire alcuni errori.

Sto ricevendo l’errore “TS2304: imansible trovare il nome ‘require'” quando tento di traspare una semplice pagina di nodo ts. Ho letto diverse altre occorrenze di questo errore su SO e non penso di avere problemi simili.
Sto eseguendo il prompt della shell al comando: tsc movie.server.model.ts. I contenuti di questo file sono:

'use strict'; ///  /* movie.server.model.ts - definition of movie schema */ var mongoose = require('mongoose'), Schema = mongoose.Schema; var foo = 'test'; 

L’errore viene generato sulla riga var mongoose = require (‘mongoose’)

I contenuti del file typings / tsd.d.ts sono:

 ///  ///  

I riferimenti al file .d.ts sono stati inseriti nelle cartelle appropriate e aggiunti a typings / tsd.d.ts tramite i comandi:

 tsd install node --save tsd install require --save 

Il file .js prodotto sembra funzionare bene, quindi ho potuto ignorare l’errore. Ma mi piacerebbe sapere perché questo errore si verifica e cosa sto facendo male.

Veloce e sporco

Se hai solo bisogno di un file, o lo fai a scopo dimostrativo, puoi definire require nella parte superiore del tuo file TypeScript.

 declare var require: any 

TypeScript 2.x

Se si utilizza TypeScript 2.x non è più necessario avere Typings o Typ tipicamente installati. Basta installare il seguente pacchetto.

 npm install @types/node --save-dev 

File Future of Declaration (15/06/2016)

Strumenti come Typings e tsd continueranno a funzionare, e lavoreremo al fianco di quelle comunità per assicurare una transizione senza intoppi.

FACOLTATIVO: se si specificano typeroots o types in tsconfig.json . Potrebbe essere necessario aggiornare il file tsconfig.json per includere il nodo come tipo. Per impostazione predefinita, qualsiasi pacchetto in @types è già incluso nella tua build a meno che tu non abbia specificato una di queste opzioni. Leggi di più

Di seguito è riportata la configurazione corretta per ciascuna di queste opzioni.

 { "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 le tipizzazioni (la sostituzione di DefinitelyTyped) è ansible specificare una definizione direttamente da un repository GitHub.

Installa le tipizzazioni

 npm install typings -g --save-dev 

Installa la definizione del tipo requireJS dal repository di DefinitelyType

 typings install dt~node --save --global 

Webpack

Se si utilizza Webpack come strumento di creazione, è ansible includere i tipi di Webpack.

Installa npm –save-dev @ types / webpack-env

Aggiorna il tuo tsconfig.json con quanto segue in compilerOptions :

 "types": [ "webpack-env" ] 

Ciò consente di eseguire require.ensure e altre funzioni specifiche di Webpack.

CLI angular

Con CLI puoi seguire il passo sopra Webpack e aggiungere il blocco “types” al tuo tsconfig.app.json .

In alternativa, è ansible utilizzare i tipi di node preinstallati. Tieni presente che questo includerà altri tipi di codice lato client che non sono realmente disponibili.

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

Per TypeScript 2.x , ci sono ora due passaggi:

  1. Installa un pacchetto che definisce require . Per esempio:

     npm install @types/node --save-dev 
  2. Indica a TypeScript di includerlo globalmente in tsconfig.json :

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

Il secondo passaggio è importante solo se è necessario accedere a funzioni disponibili a livello globale come require . Per la maggior parte dei pacchetti, dovresti semplicemente usare il import package from 'package' modello import package from 'package' . Non è necessario includere tutti i pacchetti nell’array di tipi tsconfig.json sopra.

Puoi

 declare var require: any 

Oppure, per un supporto più completo, utilizza require.d.ts di DefinitelyTyped

Inoltre, al posto di var mongoose = require('mongoose') , puoi provare quanto segue

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

Invece di:

 'use strict'; ///  

Provare:

 ///  'use strict'; 

cioè prima il percorso di riferimento.

Ho trovato che la soluzione era usare il comando TSD:

 tsd install node --save 

Quale aggiunge / aggiorna il file typings/tsd.d.ts e quel file contiene tutte le definizioni di tipo richieste per un’applicazione di nodo.

Nella parte superiore del mio file, ho inserito un riferimento al file tsd.d.ts questo modo:

 ///  

Il fabbisogno è definito in questo modo a partire da gennaio 2016:

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

Ho preso la risposta di Peter Varga per aggiungere declare var require: any; e lo ha trasformato in una soluzione generica che funziona genericamente per tutti i file .ts utilizzando il preprocess-loader :

  1. installa il preprocessore-caricatore:

     npm install preprocessor-loader 
  2. aggiungi il loader al tuo webpack.config.js (sto usando ts-loader per l’elaborazione di sorgenti TypeScript):

  module: { loaders: [{ test: /\.tsx?$/, loader: 'ts-loader!preprocessor?file&config=preprocess-ts.json' }] } 
  1. Aggiungi la configurazione che aggiungerà la soluzione alternativa a ogni fonte:
 { "line": false, "file": true, "callbacks": [{ "fileName": "all", "scope": "source", "callback": "(function shimRequire(source, fileName) { return 'declare var require: any;' + source; })" }] } 

È ansible aggiungere i require.d.ts più robusti allo stesso modo, ma declare var require: any; era sufficiente nella mia situazione.

Nota, c’è un bug nel preprocessore 1.0.5 , che taglia l’ultima riga, quindi assicurati di avere un ritorno di spazio in più alla fine e starai bene.

Questa risposta si riferisce a configurazioni moderne (typescript 2.x, webpack> 2.x)

NON è necessario installare @ types / node (che è tutto dei tipi node.js ed è irrelvant per il codice front-end, in realtà complicando cose come setTimout diverso valore di ritorno ecc ..

devi installare @ types / webpack-env

npm i -D @types/webpack-env

che dà le firme di runtime che ha il webpack (compresi require e require.ensure etc ..)

assicurati inoltre che il tuo tsconfig.json non abbia un set ‘types’ array -> che lo faccia ritirare tutte le definizioni dei tipi nella tua cartella node_modules / @ types. se si desidera limitare la ricerca dei tipi, è ansible impostare la proprietà typeRoot su node_modules / @ types

A volte il “jasmine” mancante da tsconfig.json potrebbe causare questo errore. (Typescript 2.X)

quindi aggiungi

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

al tuo tsconfig.json

Aggiunta elettronica + angular 2/4: oltre ad aggiungere il tipo ‘nodo’ a ts.config vari file, ciò che alla fine ha funzionato per me è l’aggiunta del prossimo al file typings.d.ts:

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

Nota che il mio caso si sta sviluppando con l’elettrone + angular 2/4. Avevo bisogno del requisito sulla finestra globale.

Ho lottato anche da questo problema. Credo che questo funzioni per tutti i release candidate aka rc, ma non ho provato. Per @angular rc.2 funziona bene.

  1. Aggiungi core-js come dipendenza npm in package.json
  2. esegui typings install core-js --save
  3. rimuovere tutte le "es6-shim" nel package.json . Non ne hai più bisogno.

Saluti!

  1. Hai specificato quale modulo utilizzare per traspolare il codice?
    tsc --target es5 --module commonjs script.ts
    Devi farlo per far sapere al traspiatore che stai compilando il codice NodeJS. Documenti

  2. È necessario installare anche le definizioni di mangusta
    tsd install mongoose --save

  3. Non usare var per dichiarare le variabili (se non necessario, che è un caso molto raro), usa invece let . Scopri di più a riguardo

Non ho potuto ottenere l’errore ‘require’ di andare via usando uno dei trucchi sopra.

ma ho scoperto che il problema era che i miei strumenti dattiloscritti per Visual Studio in cui una versione precedente (1.8.6.0) e l’ultima versione ad oggi è (2.0.6.0)

Puoi scaricare l’ultima versione degli strumenti da:

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

Solo in aggiunta alla risposta di cgatian, per TypeScript 1.x

Se continui a visualizzare errori, specifica in modo specifico index.d.ts nelle opzioni del compilatore.

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

Se è ansible compilare il codice ma i segni di Visual Studio 2015 ‘richiedono’ come errori con il testo dell’errore non è ansible trovare il nome ‘require’ o non può risolvere il simbolo ‘require’ aggiornare TypeScript per Visual Studio 2015 alla versione più recente (al momento 2.1.5) e aggiornare ReSharper (se lo si utilizza) almeno alla versione 2016.3.2.

Ho avuto questo fastidioso problema per un po ‘, non ho trovato una soluzione, ma alla fine l’ho risolto in questo modo. Spero che questo aiuti qualcuno.

Aggiungi seguendo in tsconfig.json :

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

Assicurati di aver installato npm i @types/node