pixelmike
pixelmike

Reputation: 1983

tsconfig - How to set correct compiler output location for multiple directories (Atom)

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

Answers (2)

pixelmike
pixelmike

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

basarat
basarat

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

Related Questions