129

I can't seem to get the outDir flag working when used in package.json. Directory structure is pretty simple: tsconfig.json at the root level, together with a src/ directory and a single index.ts file plus other directories representing other modules.

When running the tsc command on the index file, it creates a new one beside it instead of in the build directory. What am I doing wrong?

My tsconfig:

{
  "compilerOptions": {
    "outDir": "build"
  }
}

My npm build script:

"build": "tsc src/index.ts"

I'm calling the script from the root dir of the project. Interestingly, running the same script with an --outDir flag works just fine.

1
  • Just a typescript thing I guess... 🤷‍♂️ Commented Feb 24, 2021 at 16:48

10 Answers 10

251

When you pass in files for compilation with tsc src/index.ts, your tsconfig.json is ignored.

From the documentation:

When input files are specified on the command line, tsconfig.json files are ignored.

Your npm build script should just be tsc without passing any files.

Sign up to request clarification or add additional context in comments.

3 Comments

What?! WHY? Ridiculous.
Have no idea why it works like this, but the answer is 100% accurate. Thanks
How do you tell the script where the .ts file you want to compile is? If I leave off the path I get all kinds of errors?
51

In my case it was being ignored because I had noEmit: true in tsconfig.json. For whatever reason, the files still were emitted, but in the same directory instead of following outDir.

The config file was read correctly and this error also appeared when using the flag.

4 Comments

Was extending ts-config-single-spa, which has noEmit: true.
I added "noEmit": false and all finally my outDir was created and populated
Bravo. Saved me. Thanks.In my case a tsconfig.json file had been misconfigured. The symptom was loads of errors reported by 'react-scripts start', but none reported by 'npx tsc'.
THX for this usefull hint with noEmit.
16

If you are using the incremental compiler option, you may not be getting output if you have deleted / modified files in your outDir but have not removed the .tsbuildinfo file.

My issue was a bit different, but Google brought me here - so figured others may also.

2 Comments

Thanks for deciding to post here! I couldn't figure out why tsc -b would only create my output folder occasionally. Turns out my yarn:clean would only rm -rf packages*/dist, leaving behind the .tsbuildinfo files!
Thanks for this. Note that all composite projects are incremental. I had to, similar to above commenter, rm -rf *.tsbuildinfo as a prebuild step in my build project
11

This is my folder structure.

enter image description here

Keep the typescript files in src folder and keep the tsconfig.json in root.

In tsconfig json file add foldername for outDir in compilerOptions

"compilerOptions": {    
    "outDir": "build",
    "module": "commonjs",
    "target": "es6",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "noImplicitAny": true,
    "sourceMap": true
  },

and run the below commands.

just cd to the root folder and type

tsc

or

tsc --outDir .

enter image description here

which will build the outDir folder with js and map.js files.

source: https://github.com/Microsoft/TypeScript/issues/10585

Comments

7

Maybe I met the same problem. Your should set the script as "build": "tsc" rather than "build": "tsc src/index.ts"

Comments

4

Make sure "outDir" is defined under "compilerOptions"

I had it defined at the same level as "compilerOptions"

{
  "compilerOptions": {
    "baseUrl": "node_modules/@types",
    "lib": [
      "es6"
    ],
    "outDir": "dist",
    "esModuleInterop": true,
  },
  "exclude": [
    "node_modules"
  ],
  "include": [
    "src/**/*"
  ],
}

Comments

1

This worked for me tsc --outDir dist/ where dist is my output or destination folder

1 Comment

Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.
0

You need to declare your tsconfig file location instead of the file you want to build.

tsc --build mocks/tsconfig.json

Comments

0

Adding the below to my package JSON script solve the error

"tsc": "tsc ./src/index.ts --outDir ./dist"

Comments

-1

Make "noEmit": false in tsconfig.json

1 Comment

How is this meaningfully different from the answer that already provides this solution?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.