2016-05-31 15 views
10

Ho un semplice progetto di esempio utilizzando dattiloscritto: https://github.com/unindented/ts-webpack-exampleTSC getta `TS2307: Impossibile trovare module` per un file locale

esecuzione tsc -p . (con tsc versione 1.8.10) genera la seguente:

app/index.ts(1,21): error TS2307: Cannot find module 'components/counter'. 
components/button/index.ts(2,22): error TS2307: Cannot find module 'shared/backbone_base_view'. 
components/button/index.ts(3,25): error TS2307: Cannot find module 'shared/backbone_with_default_render'. 
components/counter/index.ts(2,22): error TS2307: Cannot find module 'shared/backbone_base_view'. 
components/counter/index.ts(3,25): error TS2307: Cannot find module 'shared/backbone_with_default_render'. 
components/counter/index.ts(4,27): error TS2307: Cannot find module 'shared/backbone_with_subviews'. 
components/counter/index.ts(5,20): error TS2307: Cannot find module 'components/button'. 

si lamenta di tutte le importazioni di file locali, come le seguenti:

import Counter from 'components/counter'; 

Se cambio ad un percorso relativo funziona, ma non voglio a, in quanto rende la vita più difficile quando si spostano i file in giro:

import Counter from '../components/counter'; 

Il vscode base di codice non fa uso di percorsi relativi, ma tutto funziona bene per loro, quindi mi deve mancare qualcosa nel mio progetto: https://github.com/Microsoft/vscode/blob/0e81224179fbb8f6fda18ca7362d8500a263cfef/src/vs/languages/typescript/common/typescript.ts#L7-L14

è possibile controllare il mio repo GitHub, ma nel caso in cui aiuta ecco il file tsconfig.json sto usando:

{ 
    "compilerOptions": { 
    "target": "es5", 
    "module": "commonjs", 
    "noImplicitAny": false, 
    "removeComments": false, 
    "preserveConstEnums": true, 
    "sourceMap": true, 
    "outDir": "dist" 
    }, 
    "exclude": [ 
    "dist", 
    "node_modules" 
    ] 
} 

la cosa divertente è, la costruzione del progetto attraverso webpack utilizzando 012.396.714 699.342.990.804,78321 milioni funziona bene, in modo da sto indovinando che è solo un problema di configurazione ...

risposta

22

@vladima risposto a this issue on GitHub:

Il modo in compilatore risolve moduli è controllata da opzione moduleResolution che può essere sia node o classic (più dettagli e le differenze possono essere trovati here). Se questa impostazione è omessa , il compilatore considera questa impostazione come node se il modulo è commonjs e classic - altrimenti. Nel tuo caso, se si desidera il modulo classic strategia risoluzione da utilizzare con commonjs moduli - è necessario impostare esplicitamente utilizzando

{ 
    "compilerOptions": { 
     "moduleResolution": "node" 
    } 
} 
2

Il codebase vscode non usa i percorsi relativi, ma tutto funziona bene per loro

in realtà dipende il modulo loader . Se stai usando systemjs con baseurl allora funzionerebbe. VSCode utilizza il proprio caricatore di moduli personalizzato (basato su una vecchia versione di requirejs).

Raccomandazione

utilizzare i percorsi relativi come è quello che commonjs supporti. Se si spostano i file in giro, si otterrà un errore di compilazione del dattiloscritto (una buona cosa), quindi sarà meglio di una grande maggioranza di progetti di puro js là fuori (su npm).

+0

Caricamento del codebase 'vscode' in Visual Studio Codice stesso, non ottengo linee ondulate, in questo modo Visual Studio Code comprende in qualche modo cose come import/notImplemented da vs/base/common/errors, a prescindere da dove risiede il file che contiene quel codice. Come lo fanno? –

+0

Risulta che l'impostazione 'module' su' amd' ha quell'effetto ... –

Problemi correlati