Reputation: 1983
Suppose I have this directory structure:
public/
js/
lib/
test/
ts/
lib/
ts/
How would I configure it to compile lib/ts/*.ts
to public/js/lib/*.js
and test/ts/*.ts
to public/js/*.js
?
I've tried setting up a separate tsconfig.json in each ts directory with the desired outDir
, but as soon as I add a ///<reference
to a file, the compiler outputs an unwanted directory tree (on save and on build.)
Upvotes: 41
Views: 56161
Reputation: 1983
I ended up getting what I wanted with this layout:
public/
js/
lib/
test/
src/
ts/
lib/
test/
In src/ts/test/tsconfig.json:
"outDir": "../../../public/js"
In src/ts/lib/tsconfig.json:
"outDir": "../../../public/js/lib"
In src/ts/test/test.ts:
/// <reference path="../lib/CoolStuff.ts" />
In Atom, if you're working in src/ts/lib, building will compile those files into public/js/lib.
If you're working in src/ts/test, the build will compile *.ts in test - as well as all files referenced. I don't see a way to prevent referenced file compilation, but at least with this layout they go to the same location.
Upvotes: 28
Reputation: 276269
How would I configure it to compile lib/ts/.ts to public/js/lib/.js and test/ts/.ts to public/js/.js?
If you want to compile test
and public
in a single compilation context then effectively your ts tree is :
test/
ts/
lib/
ts/
Therefore if you use an outDir
of ./public/js
you will get:
public/
js/
test/
ts/
lib/
ts/
This is because the relative nature of lib/ts
to test/ts
needs to be preserved by outDir
. This is a limation in how you are trying to organize your project.
Reorganize your project as
ts/
test/
lib/
Upvotes: 6