Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting up tsconfig with spec/test folder

Say I put my code under src and tests under spec:

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

I want to only transpile src to the dist folder. Since index.ts is the entry point of my package, my tsconfig.json look like this:

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

However, this tsconfig.json does not include the test files so I could not resolve dependencies in them.

On the other hand, if I include the test files into tsconfig.json then they are also transpiled to dist folder.

How do I solve this problem?

like image 223
unional Avatar asked Feb 18 '16 00:02

unional


People also ask

Where do I put Tsconfig?

The tsconfig. json is generally put in the root folder of the project.

Where do I put test files TypeScript?

We would follow the conventions: Place Source JS/TS files in src folder and tests typescript files in tests folder.

What is Tsconfig spec json for?

The tsconfig. json file specifies the root files and the compiler options required to compile the project. JavaScript projects can use a jsconfig. json file instead, which acts almost the same but has some JavaScript-related compiler flags enabled by default.


1 Answers

I ended up defining multiple config files and use extends to simplify them.

Say I have two files: tsconfig.json and tsconfig.build.json

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

This way, I can have fine control on what to build (using tsc -p tsconfig.build.json) and what the ts language service (IDE) handles.

UPDATE: now as my projects grow, I ended up having more config files. I use the "extend" feature that is now available in TypeScript:

// 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": [ ... ]  } 
like image 90
unional Avatar answered Sep 27 '22 22:09

unional