2016-02-18 15 views
15

dire che ho messo il mio codice sotto src e le prove sotto spec:Impostazione TSconfig con la cartella spec/test

+ spec 
+ --- classA.spec.ts 
+ src 
+ --- classA.ts 
+ --- classB.ts 
+ --- index.ts 
+ tsconfig.json 

voglio solo transpile src alla cartella dist. Dal momento che index.ts è il punto di ingresso del mio pacchetto, la mia tsconfig.json simile a questa:

{ 
    "compileOptions": { 
    "module": "commonjs" 
    "outDir": "dist" 
    }, 
    "files": { 
    "src/index.ts", 
    "typings/main.d.ts" 
    } 
} 

Tuttavia, questo tsconfig.json non include i file di test quindi non ho potuto risolvere le dipendenze in loro.

D'altra parte, se includo i file di test in tsconfig.json, vengono anche copiati nella cartella dist.

Come posso risolvere questo problema?

risposta

13

ho finito per definire più file di configurazione e utilizzare extends per semplificarli.

Dire che ho due file: tsconfig.json e tsconfig.build.json

// tsconfig.json 
{ 
    ... 
    "exclude": [...] 
} 

// tsconfig.build.json 
{ 
    ... 
    "files": [ "typings/index.d.ts", "src/index.ts" ] 
} 

In questo modo, posso avere un controllo preciso su cosa costruire (utilizzando tsc -p tsconfig.build.json) e ciò che il ts language service (IDE) maniglie.

AGGIORNAMENTO: ora come i miei progetti crescono, ho finito per avere più file di configurazione. Io uso la funzione "estendere", che è ora disponibile a macchina:

// tsconfig.base.json 
{ 
    // your common settings. Mostly "compilerOptions". 
    // Do not include "files" and "include" here, 
    // let individual config handles that. 
    // You can use "exclude" here, but with "include", 
    // It's pretty much not necessary. 
} 

// tsconfig.json 
{ 
    // This is used by `ts language service` and testing. 
    // Includes source and test files. 
    "extends": "./tsconfig.base.json", 
    "atom": { ... }, 
    "compilerOptions": { 
    // I set outDir to place all test build in one place, 
    // and avoid accidentally running `tsc` littering test build to my `src` folder. 
    "outDir": "out/spec" 
    } 
    "include": [ ... ] 
} 

// tsconfig.commonjs.json or tsconfig.systemjs.json or tsconfig.global.json etc 
{ 
    "extends": "./tsconfig.base.json", 
    "compilerOptions": { 
    // for some build this does not apply 
    "declaration": true/false, 
    "outDir": "dist/<cjs, sys, global, etc>", 
    "sourceRoot": "..." 
    }, 
    // Only point to typings and the start of your source, e.g. `src/index.ts` 
    "files": [ ... ], 
    "include": [ ... ] 
} 
2

Penso che non dovresti usare l'opzione 'file' nella tua configurazione. Invece è possibile escludere i file indesiderati e avere in questo modo:

{ 
    "compilerOptions": { 
     "module": "commonjs", 
     "outDir": "dist" 
    }, 
    "exclude": [ 
     "node_modules", 
     "dist", 
     "typings/browser.d.ts", 
     "typings/browser/**" 
    ] 
} 

Ciò manterrà la struttura originale nella cartella 'dist' senza mescolare i test e le app js file:

--dist 
----spec 
-------.... 
----src 
-------.... 
2

Questo è in qualche modo dipendente da qualsiasi framework di test che si sta utilizzando, ma mi piace usare ts-node per compilare i miei file di test. Utilizzando moka, lo script npm test potrebbe essere simile:

"mocha": "mocha test/ --compilers ts:ts-node/register --recursive" 

Nella tua tsconfig.json, assicurarsi di rimuovere l'opzione rootDir.

{ 
"compilerOptions": { 
    "module": "commonjs", 
    "target": "es6", 
    "noImplicitAny": false, 
    "removeComments": true, 
    "sourceMap": true, 
    "outDir": "lib" 
}, 
"include": [ 
    "src/**/*.ts" 
], 
"exclude": [ 
    "node_modules", 
    "lib", 
    "typings/**" 
] 
} 

Quando si tenta di eseguire dattiloscritto con rootDir set per src o qualunque cartella di base per il codice dell'applicazione è, sarà Rifiuta ogni compilazione in una directory che si trova al di fuori, una tale tests. Usando ts-node, puoi facilmente tenere tutto separato senza dover avere file di configurazione TypeScript separati.

+1

Non separare in più file di configurazione ha l'inconveniente di distribuire file (test) aggiuntivi nel pacchetto. Inoltre, i due 'include' sono ridondanti. Hai solo bisogno di 'src/**/*. Ts' – unional

+0

btw, qual'è' *** 'come in' typings/*** '? Non ne ho mai sentito parlare. – unional

+0

Dovrebbe essere '**', solo un errore di battitura – barndog

Problemi correlati