2016-02-01 19 views
16

Ho appena avviato un nuovo progetto nodejs utilizzando dattiloscritto. Ho installato Typings (https://github.com/typings/typings) e l'ho usato per installare i file di riferimento per il nodo v4.xe per esprimere v4.x.Dattiloscritto: "Impossibile trovare il modulo" con digitazioni valide

La mia versione nodo è v4.2.6 La mia versione dattiloscritta è v1.7.5

mia directory del progetto si articola così:

package.json 
tsconfig.json 
typings.json 
src/ 
    app.ts 
typings/ 
    main.d.ts 
    main/ambient/node/node.d.ts 
    main/ambient/express/express.d.ts 

Il contenuto di tipizzazioni/main.d.ts sono i segue:

/// <reference path="main/ambient/express/express.d.ts" /> 
/// <reference path="main/ambient/node/node.d.ts" /> 

I contenuti di tsconfig.json sono i seguenti:

{ 
    "compilerOptions": { 
    "target": "es6", 
    "module": "commonjs" 
    } 
} 

I contenuti off typings.json sono i seguenti:

{ 
    "dependencies": {}, 
    "devDependencies": {}, 
    "ambientDependencies": { 
    "express": "github:DefinitelyTyped/DefinitelyTyped/express/express.d.ts#dd4626a4e23ce8d6d175e0fe8244a99771c8c3f2", 
    "node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts#1c56e368e17bb28ca57577250624ca5bd561aa81" 
    } 
} 

Il contenuto di src/app.ts sono come segue:

'use strict'; 

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

import * as express from "express"; 

Questo è estremamente semplice e dovrebbe comportare una app di base. Tuttavia, quando provo a compilare questo ho l'errore error TS2307: Cannot find module 'express'.

ho cercato riorganizzare i file tipizzazioni, cambiando il percorso relativo nel tag percorso di riferimento, utilizzando il campo files in tsconfig.json per indicare i percorsi di riferimento invece di utilizzare un tag in linea nel file, tutto inutilmente. Ho anche provato la compilazione usando gulp-typescript, gulp-tsc e tsc direttamente sulla riga di comando.

ottengo simili errori quando provo ad usare nodejs build-in moduli, come crypto, http, fs ecc

Questi riferimenti sembrano valide - Che cosa mi manca?

+1

Questo è tutto valido. Condividi il progetto e ti darò uno sguardo per te – basarat

+0

Dolce grazie. https://github.com/jereynolds/ts-test – aaaarrgh

+0

Stavo ancora curiosando e ho notato che il commento del percorso di riferimento esiste ancora nel file di output .js. L'istruzione import è stata correttamente risolta in uno standard 'var express = require ('express');' riga – aaaarrgh

risposta

17

Le direttive triple-slash devono precedere qualsiasi istruzione nel file. Il tuo "use strict" prologo deve venire dopo i tuoi commenti di riferimento come così:

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

'use strict'; 

import * as express from "express"; 

Per dare seguito al tuo commento in cui non stai ricevendo alcun emettono per la vostra importazione: questo perché dattiloscritto esegue l'importazione elisione. A meno che non si usi il modulo per un certo valore, il compilatore non emetterà l'importazione perché assume che sia necessario solo quel modulo per i suoi tipi.

+1

Quando sposto la tripla barra sopra '" usa strict ";' (o rimuovi '" usa strict ";' linea del tutto) Ho appena ricevuto un errore aggiuntivo nel mio passo di compilazione che non è possibile trovare il file main.d.ts, anche se il percorso assoluto indicato nell'errore punta correttamente al file – aaaarrgh

+0

Abbiamo bisogno di un percorso di riferimento per ogni tipizzazione stiamo usando? Per me ho dovuto trovare http-server e se volevo usare anche FS? –

+1

Se il tuo 'tsconfig.json' si riferisce ai file, o fai riferimento a un file come' main.d.ts' che li elenca già, allora non dovresti fare riferimento a quei file. –

2

La risposta di Daniel è tecnicamente corretta ma basata sul tuo tsconfig main.d.ts sarebbe stata ancora prelevata in modo da non risolvere i problemi per te.

Detto questo ho trovato problemi e ha inviato una richiesta di pull: https://github.com/jereynolds/ts-test/pull/1


  • Probabilmente dovrebbe escludere typings e node_modules altrimenti la compilazione conterrà identificatori duplicati (tipizzazioni)/sarà lenta (node_modules)

  • tipizzazioni installare serve-static (necessaria per express) e mime (necessari per serve-static).

+1

"I collegamenti a risorse esterne sono incoraggiati, ma per favore aggiungi un contesto intorno al link in modo che i tuoi colleghi possano avere un'idea di cosa sia e perché è lì. Cita sempre la parte più rilevante di un link importante, nel caso in cui il sito target sia irraggiungibile o sia permanentemente offline. "- [how-to-answer] (http://stackoverflow.com/help/how-to-answer) –

+0

Ho installato i caratteri per 'serve-static' e' mime', aggiunto la cartella 'typings' e' node_modules' all'elenco di exclude in 'tsconfig.json', e spostato' "use strict"; 'per essere dopo il tag di riferimento . Ora la compilazione ha successo con 'tsc -p .', ma fallisce ancora quando provo a usare gulp per costruire. Qualche idea sul perché non funziona? – aaaarrgh

+0

@CSnover l'ho fatto. I due punti elenco sono "le parti più rilevanti di un collegamento importante" :) – basarat

1

So che questa è una vecchia domanda e mi dispiace di averlo urtato, ma si tratta di uno dei primi collegamenti in Google.

Poiché quanto sopra non ha risolto il problema e alla fine l'ho risolto, ho pensato di condividere ... Nel mio caso, è stato il pathing relativo a causare il problema.

mie tipizzazioni erano in

tipizzazioni/bootstrap, tipizzazioni/reagire-dom, tipizzazioni/reagiscono, ecc

Quello reagire-dom ha un importazione da 'reagire'. Per sistemare il mio codice ho dovuto modificarlo in "../react/react". Semplice!

Problemi correlati