Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get the Typescript compiler to output the compiled js to a different directory?

People also ask

Where does compiled TypeScript go?

Since the TypeScript compiler preserves the input file path, it will generate x. js in the parent directory of the root directory.

Does TypeScript get compiled to JavaScript?

Compiling TypeScript. TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. It offers classes, modules, and interfaces to help you build robust components.

How do I compile TypeScript automatically?

Another way of automating the TypeScript compilation is by using command line interface or the Command Prompt. The second way is pretty simple to achieve; we just need to write a single line to watch any changes in our TypeScript file.

Which command is used to manually compile a TypeScript?

As you know, TypeScript files can be compiled using the tsc <file name>. ts command.


Use the option --outDir on tsc (configured within the File Watcher in IntelliJ)

From the command line documentation

--outDir DIRECTORY Redirect output structure to the directory.

Edit

Since Typescript 1.5, this can also be set in the tsconfig.json file:

"compilerOptions": {
    "outDir": "DIRECTORY"
    ...

Or, add "outDir": "build"to tsconfig.json file


Though these answers are correct you should consider whether you actually just want to hide your .js files from your IDE.

In Visual Studio Code, go to File > Preferences > Settings or your .vscode\settings.json file and enter:

"files.exclude": {
    "**/.git": true,
    "**/.DS_Store": true,
    "**/*.js" : {
        "when": "$(basename).ts"
    },
    "**/*.js.map": {
        "when": "$(basename)"
    }
}

The above hides .js files where a corresponding .ts file exists.


Intellij Users, compile Typescript to multiple output directories

For Intellij users this may be useful. This was how I got this to work using the built in Typescript Compiler.

Environment Info

  • Windows 7
  • Typescript using NPM Version 1.7.3
  • Intellij 14
  • ES6
  • Using RequireJS

Example Directory Structure

BEFORE COMPILE
----------------------------------------
-> JS
   -> app
      -> config.js  //this is not generated
   -> libs
      -> jquery.js  //this is not generated
   -> plugins
-> TS
   -> app
      -> main.ts
   -> libs
      -> jquery.d.ts
   -> plugins
      -> somePlugin.ts

AFTER COMPILE
----------------------------------------
-> JS
   -> app
      -> config.js  //this is not generated
      -> main.js
   -> libs
      -> jquery.js  //this is not generated
   -> plugins
      somePlugin.ts
-> TS
   -> app
      -> main.ts
   -> libs
      -> jquery.d.ts    //this is where I kept my definition files
   -> plugins
      -> somePlugin.ts

Intellij Setup

  • File -> Settings -> Typescript
  • Node Interpreter: Your NodeJS Install Path
  • Compiler Version: typically located at C:\yourUserName\AppData\Roaming\npm\node_modules\typescript\lib
  • Command Line Options: -m amd -t ES6 -outDir E:\myapp\js
  • Check compile main file only and point it to your entry file. E:\myapp\ts\main.ts If this is not checked then all of your files will try to output to your outDir path.

enter image description here


I setup package.json like this so that typing npm run start outputs everything to build. The source files are kept in src. The outfile is specified by --outDir build.

{
  "name": "myapp",
  "version": "0.0.1",
  "scripts": {
    "tsc": "tsc",
    "tsc:w": "tsc -w --outDir build",
    "lite": "lite-server",
    "start": "concurrent \"npm run tsc:w\" \"npm run lite\" "
  },
  "license": "private",
  "dependencies": {
    "angular2": "2.0.0-beta.0",
    "systemjs": "0.19.6",
    "es6-promise": "^3.0.2",
    "es6-shim": "^0.33.3",
    "reflect-metadata": "0.1.2",
    "rxjs": "5.0.0-beta.0",
    "zone.js": "0.5.10"
  },
  "devDependencies": {
    "concurrently": "^1.0.0",
    "lite-server": "^1.3.1",
    "typescript": "^1.7.3"
  }
}

You can exclude your build directory in tsconfig.json, though it probably isn't necessary, since there is only JS there:

{
  "compilerOptions": {
    "target": "ES5",
    "module": "system",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false
  },
  "exclude": [
    "node_modules",
    "build"
  ]
}