Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 :(

like image 753
David Votrubec Avatar asked Sep 04 '15 12:09

David Votrubec


People also ask

Do you have to compile TypeScript everytime?

As we know, after writing any TypeScript file, we need to compile it every time and based on that, the . js file will be generated. So, every time, we should compile the TypeScript file by writing the command in the console.

How do I disable TypeScript compilation in Visual Studio?

Fortunately, it's easy to disable automatic TypeScript compilation. Just add a “TypeScriptCompileBlocked” element to your project's xproj file and give it a value of “True”. This will prevent Visual Studio from making those pesky extra files.

How do I compile all files in TypeScript?

Open a terminal and run tsc -w , it'll compile any . ts file in src directory into . js and store them in ts-built directory.


2 Answers

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..).

like image 141
Martin Vseticka Avatar answered Sep 22 '22 13:09

Martin Vseticka


Try "ECMAScript 5" instead of "ECMAScript 3" in "ECMAScript version

like image 37
JavaScript Linq Avatar answered Sep 21 '22 13:09

JavaScript Linq