TypeScript“保存时编译”功能在Visual Studio 2015中不起作用


83

升级到Visual Studio 2015后,“保存时编译”功能对我不起作用。当我更改.ts项目中的文件并保存时,IDE底部的状态栏显示Output(s) generated successfully,但生成的.js文件没有没改变。

这是我尝试过的:

  • <Project>在my的根元素中添加以下内容.csproj

    <PropertyGroup>
        <TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled>
    </PropertyGroup>
    
  • Tools -> Options -> TypeScript -> Project以下选项中选中和取消选中“自动编译不属于项目的TypeScript文件”选项:

    在此处输入图片说明

  • 仔细检查以确保在我项目的TypeScript Build属性中选中了“保存时编译”:

    在此处输入图片说明

我想念什么?

附带说明一下,当由常规构建触发时,TypeScript编译步骤确实可以按预期工作。


检查以确保JS文件没有真正得到更新。我有一段时间遇到了VS2013的问题,其中“ JS预览”没有更新,但是JS文件实际上正在更新。手动打开一个以查看代码是否更新。原因尚不清楚,但解决方法是关闭VS,然后重新打开它。我还没有尝试在VS2015中构建任何TS文件。
Jason H

1
他们为RTM破解了它。看到这个问题 stackoverflow.com/questions/31559653/...
Simon_Weaver

1
当您以管理员身份运行Visual Studio时,我可以工作!
alisabzevari

@alisabzevari感谢您的建议,但是以管理员身份运行不能为我解决此问题。
弥敦道(Nathan Friend)

Answers:


138

对我而言,这是以下选项tsconfig.json

"compileOnSave": true,
"compilerOptions": { ... },

重新启动Visual Studio,以使此更改生效。


使用angular2,在rc1的许多其他内容中更新了我的打字稿,自然一切都坏了,直到我最终发现这是我的问题。直到我更新到1.8.10才需要它。
詹姆斯

4
是的,如果该项目托管在VS解决方案中,则在tsconfig.json中添加该选项并重新加载该项目。然后,ts将在保存时编译为js。
ZZZ

1
添加"watch": truecompilerOptions我的工作的Visual Studio 2015年更新2打字稿1.8.29.0
瓦希德·阿米里

1
在TypeScript 2前后的某个时刻,Visual Studio从将这些设置保留在.csproj文件中转变为仅使用tsconfig.json。如果未禁用项目的属性TypeScript页面,则可能意味着您已安装Visual Studio的TypeScript工具的旧版本,并且应安装microsoft.com/en-us/download/details.aspx?id=48593
cchamberlain

32

我今天偶然发现了这个问题:我使用新的"watch":true编译器选项修复了该问题,最新的TypeScript版本也可以通过JSON获得该选项:

{
  "compilerOptions": {
    "watch": true
  }
}

之后,我不得不解决另一个与输出窗口中出现的以下错误相关的问题:

Object doesn't support property or method 'watchFile'

事实证明,尽管我确定我有Visual Studio 2015 Update 1(1.7)附带的较新版本,但我的系统正在使用TypeScript(1.0.x)的过时版本。如果遇到此问题,可以通过在命令提示符下键入轻松地检查tsc版本。tsc -v

如果它说1.0.x或<1.7以下的任何内容,则可能是由于PATH环境变量中有一些旧的引用。通过检查Microsoft SDKs文件夹(该文件夹是Visual Studio在更新时安装TypeScript软件包所使用的文件夹)的内部,确保已安装1.7或更高版本:

C:\Program Files (x86)\Microsoft SDKs\TypeScript

如果不是,请进行相应更新。打开CPanel > System > Advanced > Environment Variables,选择System Variables,然后单击Edit;浏览列表以查找对TypeScript文件夹的任何引用,更改其中一个使其指向您的TypeScript最新安装的版本(1.7或更高版本),然后删除所有其他重复对象。另请参见以下屏幕截图:

在此处输入图片说明

有关更多详细信息,请在我的博客上阅读此文章


1
对我来说,在win10上,列表中的名称是“路径”,而不是系统变量。选择该值(它的值是一个长的分号连接的字符串),然后单击“编辑”,您将看到此答案中显示的模态窗口。我的解决方案不是添加compileOnOptions> watch> true,而是设置compileOnSave> true(比compileroptions高1步)
BobbyTables

1
对我来说,设置此选项会导致生成错误JsErrorScriptException(0x30001)。搜索之后,我遇到了这个问题github.com/Microsoft/TypeScript/issues/7362。MiłoszWierzbicki的解决方案(设置“ compileOnSave”)对我有效,但仅在重新启动VS之后。
fikkatra '16

我有同样的问题。U和@zedd为我节省了很多时间。这篇文章也很有帮助:ryadel.com/en/…
Dudi

7

解:

对我来说,我很确定其他人也是如此,这是由于tsconfig.json中的错误。

您需要添加“ compileOnSave”:true。但是在全局部分中,而不是在compilerOptions内部。

Wrong:
{
  "compilerOptions": {
    "noImplicitAny": false,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5",
    "compileOnSave": true

  },
  "exclude": [
    "node_modules",
    "wwwroot"
  ]
}

Correct:
{
  "compilerOptions": {
    "noImplicitAny": false,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5"

  },
"compileOnSave": true,
  "exclude": [
    "node_modules",
    "wwwroot"
  ]
}

最好的祝福,

Anders Both Basechat。



2

就我而言,我在VS 2012旁安装了Visual Studio Community2015。2012年,我一直在使用Web Essentials作为打字稿,这似乎与2015年冲突。

在2012年卸载Web Essentials可以解决此问题。


我使用的是VS Community,而卸载Web Essentials帮了我大忙。感谢并支持!

2

使用打字稿2,您必须从tsconfig中删除“ outDir” :。在Visual Studio中为我修复该错误。


outdir tsconfig在哪里?Thx
周杰伦

@jay您在打字稿的配置文件tsconfig.json中看不到该选项吗?
伊凡(Yvan)

1

在项目属性->“ TypeScript Build”中,您也可以简单地取消选中“如果报告任何错误,请勿发出输出”。检查它似乎可以在保存时禁用转储,无论是否存在错误。


1

"compileOnSave": true,不是为我工作。我最终发现,"compileOnSave": true,如果在.json要扩展的另一个文件中定义了该值,Visual Studio将不接受该值。它必须在根目录中才能起作用。


1

在您的文件中找到文件即C:\ file.tsterminal/cmd并输入

tsc file.ts -w // watches for file changes and converts on save

1

检查是否安装了在项目中配置的TypeScript版本。不知何故,我没有收到没有安装TypeScript 3.7的警告,但是保存时编译功能以静默方式停止工作。

安装TypeScript 3.7后,它又可以正常工作了。


0

完全相同的问题在这里。我正在使用Visual Studio 2015更新3和TypeScript 2.9.2.0。在工具/选项/项目和解决方案/外部Web工具中,我将$(PATH)升级到第二个位置。使用所有这些配置,compileOnSave:true对我不起作用。解决方法是打开命令行,ng build --watch在侧面运行,然后让节点负责自动编译


0

不知道这是否会帮助任何人。

我虽然在编译时遇到问题,但是在保存时正在编译。我只是没有将我的解决方案资源管理器工具栏切换为显示所有文件。

文件在那里,只是不耐烦地等待添加到项目中。

在此处输入图片说明


0

我在Visual Studio 2019中遇到了类似但不相同的问题

  • 我的项目设置为使用TypeScript 2.9
  • 我安装了TypeScript 3.8,并且代码可以编译,但是保存时不会编译

我安装了旧版本的TypeScript 2.9,重新启动了VS,然后它突然出现了

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.