aryzing
aryzing

Reputation: 5877

typescript outDir setting in tsconfig.json not working

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.

Upvotes: 127

Views: 88074

Answers (9)

Vijay
Vijay

Reputation: 1

Make "noEmit": false in tsconfig.json

Upvotes: -1

adebayo
adebayo

Reputation: 19

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

Upvotes: 1

cor blk
cor blk

Reputation: 61

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

Upvotes: 6

Rohit
Rohit

Reputation: 6623

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/**/*"
  ],
}

Upvotes: 4

fregante
fregante

Reputation: 31858

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.

Upvotes: 50

Ash Blue
Ash Blue

Reputation: 5602

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

tsc --build mocks/tsconfig.json

Upvotes: 0

joshweir
joshweir

Reputation: 5627

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.

Upvotes: 14

chandoo
chandoo

Reputation: 1316

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

Upvotes: 10

Saravana
Saravana

Reputation: 40712

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.

Upvotes: 248

Related Questions