David Votrubec David Votrubec - 5 months ago 35
Javascript Question

Visual Studio 2015 compiles ALL typescript files when SINGLE file is changed

I am using Visual Studio 2015 with Typescript 1.5.4 and Resharper 9

This is the buggy scenario:


  • I have about 180 typescript files

  • I change single .ts file

  • VS shows message "Generation of XXX.ts file complete. Remaining files still compiling"

  • after that ALL my .ts files are compiled to .js

  • 2 things were changed in those .js files: formatting is slightly different and reference for .js.map was removed

  • When I build the whole project, then the .js files are generated again but with original formatting and with link to .js.map present



This is annoying because it generates too much noise in Git
and it prevents me from debugging typescript files directly in browser. (because of that missing .js.map file)

The desired behaviour is of course that the only changed .ts file should be compiled on save. How to do it?

It seems that R# has nothing to do with this, because it continues to happen with R# disabled.

My current project settings:
enter image description here

-------------UPDATE-------------

I've tried to update to Typescript version 1.6.
The PATH variable pointed to
C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.4\
so I've updated that to point to
1.6


So when I now type
tsc -v
it says
message TS6029: Version 1.6.2


But because of historical reasons (the project I work on is about 2 years old) I have to use version
1.4
inside VisualStudio. So in the .csproj is
<TypeScriptToolsVersion>1.4</TypeScriptToolsVersion>


After this change the
compile on safe
stopped working completely.

Now I have to rebuild the whole solution :(

Answer

It seems that Visual Studio does not support watch mode properly (i.e. incremental compilation):

Just to be clear, --watch does work on Windows if you're using node.js/io.js, but the tsc.exe program distributed with VS does not support it; you still have Compile on Save for similar functionality anyhow.

https://github.com/Microsoft/TypeScript/issues/2375#issuecomment-100812347

I'm not sure why this was closed. Supporting --watch for our tsc.exe host would both be possible and desirable. Right now the limiting factor is that our tsc.exe host is a bit of ugly C++, that uses some ancient COM interfaces for Chakra that we haven't spent much effort on. Our options are: [...]

https://github.com/Microsoft/TypeScript/issues/2375#issuecomment-100949019

As a workaround, could you run

tsc --watch

in the folder where tsconfig.json is located?

Edit: https://github.com/Microsoft/TypeScript/issues/5638 - Visual Studio 2015 compiles ALL typescript files when SINGLE file is changed

Starting with VS 2015 RTM, Compile-on-Save, every time you save a file we need to generate all files in the project to ensure consistent output. We have got numerous issues related to inconsistent output when saving files in different orders. Building all files is the only way we can guarantee correct and consistent output given all the language constructs and how they interact across files (e.g. namespaces/internal modules can be augmented, and that affects the shape of emitted code, also const enms are in lined as constants, etc..).