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.
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
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" ] } }
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
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.
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:
Installa un pacchetto che definisce require
. Per esempio:
npm install @types/node --save-dev
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 :
installa il preprocessore-caricatore:
npm install preprocessor-loader
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' }] }
{ "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.
core-js
come dipendenza npm in package.json
typings install core-js --save
"es6-shim"
nel package.json
. Non ne hai più bisogno. Saluti!
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
È necessario installare anche le definizioni di mangusta
tsd install mongoose --save
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