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?
The tsconfig. json is generally put in the root folder of the project.
We would follow the conventions: Place Source JS/TS files in src folder and tests typescript files in tests folder.
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.
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": [ ... ] }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With