当SINGLE文件被更改时,Visual Studio 2015会编译所有打字稿文件

时间:2015-09-04 12:48:56

标签: javascript visual-studio compilation typescript

我正在使用带有Typescript 1.5.4和Resharper 9的Visual Studio 2015

这是错误的情况:

  • 我有大约180个打字稿文件
  • 我更改单个.ts文件
  • VS显示消息“生成XXX.ts文件已完成。剩余文件仍在编译”
  • 之后,所有我的.ts文件都编译为.js
  • 这些.js文件中有2件事发生了变化:格式略有不同,并删除了对.js.map的引用
  • 当我构建整个项目时,会再次生成.js文件,但会使用原始格式并显示指向.js.map的链接

这很烦人,因为它在Git中产生了太多的噪音 它阻止我直接在浏览器中调试typescript文件。 (因为缺少.js.map文件)

理想的行为当然是应该在保存时编译唯一更改的.ts文件。怎么做?

似乎R#与此无关,因为它会在R#禁用的情况下继续发生。

我当前的项目设置: enter image description here

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

我尝试更新到Typescript版本1.6。 PATH变量指向C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.4\,因此我将其更新为指向1.6

因此,当我现在输入tsc -v时,它会显示message TS6029: Version 1.6.2

但是由于历史原因(我工作的项目大约2年),我必须在VisualStudio中使用版本1.4。所以.csproj是<TypeScriptToolsVersion>1.4</TypeScriptToolsVersion>

此更改后,compile on safe完全停止了工作。

现在我必须重建整个解决方案:(

4 个答案:

答案 0 :(得分:6)

似乎Visual Studio不能正确支持监视模式(即增量编译):

  

为了清楚起见,如果您正在使用,--watch可以在Windows上运行   node.js / io.js,但与VS一起分发的tsc.exe程序没有   支持它;您仍然可以在保存时编译以获得类似功能   无论如何。

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

  

我不确定为什么关闭它。支持 - 监视我们的tsc.exe   主机既可能又可取。现在是限制   因素是我们的tsc.exe主机有点丑陋的C ++,它使用了一些   Chakra的古老COM接口,我们没有花太多精力   上。我们的选择是:[...]

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

作为解决方法,你可以运行

tsc --watch

tsconfig.json所在的文件夹中?

编辑: https://github.com/Microsoft/TypeScript/issues/5638 - 当更改SINGLE文件时,Visual Studio 2015会编译所有打字稿文件

  

每次保存文件时,从VS 2015 RTM,Compile-on-Save开始   我们需要生成项目中的所有文件以确保一致   输出。我们遇到了许多与输出不一致有关的问题   以不同的顺序保存文件时。构建所有文件是唯一的   我们可以保证所有的输出都是正确和一致的   语言结构以及它们如何跨文件交互(例如   命名空间/内部模块可以扩充,并影响   发出的代码的形状,const const也作为常量排列,   等。)。

答案 1 :(得分:1)

在“ECMAScript版本

中尝试”ECMAScript 5“而不是”ECMAScript 3“

答案 2 :(得分:0)

我有类似的问题,但由于我们自己处理TS编译,我想完全避免自动编译...

修复方法是在项目中强制TypeScriptCompileOnSaveEnabled标记为 false

<PropertyGroup>
    <TypeScriptCompileOnSaveEnabled>false</TypeScriptCompileOnSaveEnabled>
</PropertyGroup>

在我的情况下,这有效地阻止了VS2015在保存时自动编译.ts文件,而不会每次都妨碍VS并弄乱输出......

答案 3 :(得分:0)

另一项解决方法:您可以使用Gulp 生成已编译的js文件和地图。使用Gulp,您还可以创建监视任务,以便在保存ts文件时进行编译。您甚至可以创建干净的任务来清理项目。

构建任务的示例:

gulp.task("clean:tsout", function (cb) {
    rimraf(paths.typescriptOut + paths.concatTsFileName, cb); // rimraf is used to delete a folder
});

gulp.task("clean:scriptjs",
    function () {
        return gulp.src(paths.typescriptJs, { read: false })  // to clean up multiple files we need to use gulp-rimraf
          .pipe(gulpRimraf());
    });

清理任务示例:

gulp.task("watch:tsbuild", ['tsbuild'], function () {
    gulp.watch(paths.typescriptRoot + '**/*.ts', ['tbbuild']);
});

Watch任务示例:

{{1}}