TypeScript“保存时编译”功能在Visual Studio 2015中无法正常工作

89

我在升级到Visual Studio 2015后,发现“保存时编译”功能无法正常工作。当我对项目中的.ts文件进行更改并保存时,IDE底部的状态栏会显示Output(s) generated successfully,但生成的.js文件没有改变。

以下是我尝试过的方法:

  • 将以下内容添加到我的.csproj中根<Project>元素中:

<PropertyGroup>
    <TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled>
</PropertyGroup>
  • 工具 -> 选项 -> TypeScript -> 项目中选中或取消选中“自动编译不属于项目的TypeScript文件”的选项:

    输入图片说明

  • 确保在我的项目的TypeScript构建属性中“保存时编译”已被选中:

    输入图片说明

  • 我还漏掉了什么吗?

    另外需要注意的是,当由正常构建触发时,TypeScript编译步骤会按预期工作。


    请检查JS文件是否实际上没有被更新。我曾经在VS2013中遇到一个问题,即“JS预览”没有更新,但JS文件实际上已经更新了。手动打开一个文件以查看代码是否已更新。这个问题的原因不明,但解决方法是关闭VS并重新打开它。我还没有尝试在VS2015中构建任何TS文件。 - Jason H
    1
    他们把它搞砸了,导致 RTM 版本出现了问题。请查看这个问题:https://dev59.com/4FwZ5IYBdhLWcg3wWfKl#31765536 - Simon_Weaver
    1
    只有在以管理员身份运行 Visual Studio 时才能正常工作! - alisabzevari
    @alisabzevari 谢谢您的建议,但以管理员身份运行对我来说无法解决这个问题。 - Nathan Friend
    13个回答

    阿里云服务器只需要99元/年,新老用户同享,点击查看详情
    145

    对我而言,是在tsconfig.json中使用了以下选项:

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

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


    使用Angular2,我更新了我的TypeScript和其他许多东西到rc1版本,自然而然的一切都崩溃了,直到我最终发现这是我的问题。在更新到1.8.10之前,我并没有需要它。 - James
    5
    在 tsconfig.json 中添加该选项,并重新加载项目(如果该项目托管在 VS 解决方案中)。然后,每次保存时,TypeScript 就会被编译为 JavaScript。 - ZZZ
    1
    在Visual Studio 2015 Update 2中,使用Typescript 1.8.29.0时,将"watch": true添加到compilerOptions中对我有效。 - Vahid Amiri
    1
    大约在 TypeScript 2 的时候,Visual Studio从将这些设置保存在 .csproj 文件中转变为仅使用 tsconfig.json。如果您的项目属性TypeScript页面未被禁用,则很可能意味着您安装了旧版本的Visual Studio TypeScript工具,您应该安装 https://www.microsoft.com/en-us/download/details.aspx?id=48593。 - cchamberlain

    33
    我今天遇到了这个问题:我通过使用新的"watch":true编译选项来解决它,这个选项在大多数最新版本的TypeScript中也可以通过JSON进行设置。
    {
      "compilerOptions": {
        "watch": true
      }
    }
    

    在完成这个步骤之后,我还需要解决另一个问题,与输出窗口中出现的以下错误相关:

    Object doesn't support property or method 'watchFile'
    
    我的系统使用了一个过时的TypeScript版本(1.0.x),尽管我确信我有一个更新的版本,它随着Visual Studio 2015 Update 1 (1.7)一起安装。如果你遇到这个问题,可以通过在命令提示符中键入“tsc -v”来轻松检查你的tsc版本。 如果它显示“1.0.x”或任何小于1.7的版本,那可能是因为你的PATH环境变量中有一些旧的引用。请确保你已经安装了1.7或更高版本,方法是检查Microsoft SDKs文件夹中是否有TypeScript包的更新版本,这是Visual Studio用来安装TypeScript包的文件夹。
    C:\Program Files (x86)\Microsoft SDKs\TypeScript
    
    如果没有,相应地更新。打开 CPanel > System > Advanced > Environment Variables,选择System Variables并点击Edit。浏览列表,查找任何与TypeScript文件夹有关的引用,并更改其中一个,使其指向您最近安装的TypeScript版本(1.7或更高版本),并删除其他重复项。请参见下面的屏幕截图:

    enter image description here

    有关详细信息,请阅读我博客上的这篇文章

    1
    对于我在win10上,列表中的名称是“Path”,而不是系统变量。当您选择它(其值是一个长的分号连接字符串),然后单击编辑,您将获得此答案中显示的模态窗口。我的解决方案不是添加compileroptions> watch> true,而是设置compileOnSave> true(从compileroptions向上一步)。 - BobbyTables
    1
    对我来说,设置这个选项导致了一个构建错误JsErrorScriptException(0x30001)。经过搜索,我发现了这个问题https://github.com/Microsoft/TypeScript/issues/7362。Miłosz Wierzbicki的解决方案(设置“compileOnSave”)适用于我,但只有在重新启动VS后才能生效。 - fikkatra
    我也遇到了同样的问题。你和@zedd帮我省下了很多时间。 这篇文章也很有帮助:http://www.ryadel.com/en/fixing-typescript-compile-on-save-feature-in-visual-studio-2015-asp-net-5-rc1/. - Dudi

    11

    解决方案:

    对我来说,而且我相信也是其他人的情况,这是由于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"
      ]
    }
    

    此致敬礼,

    安德斯·博斯 Basechat。


    6

    最新的 TypeScript 语言服务 扩展似乎已经解决了这个问题。

    请查看此答案获取更新的应用说明。


    3
    使用TypeScript 2,您需要从tsconfig中删除"outDir"。这个方法在Visual Studio中修复了我的错误。

    outdir tsconfig在哪里?谢谢 - jay
    @jay 在 TypeScript 的配置文件 tsconfig.json 中你没有看到这个选项吗? - Yvan

    2

    在我的情况下,我安装了Visual Studio Community 2015和VS 2012。我一直在使用Web Essentials来处理2012年的typescript,但它似乎与2015年发生了冲突。

    卸载2012年的Web Essentials解决了我的问题。


    我正在使用VS Community,卸载Web Essentials对我很有帮助。谢谢并点赞! - Ray

    2
    不确定这是否会对任何人有帮助。 我以为我在编译时遇到了问题,但实际上是在保存时编译。我只是没有切换我的解决方案资源管理器工具栏以显示所有文件。 文件已经存在,只是急切地等待添加到项目中。

    enter image description here


    1
    在您的终端/cmd中找到文件,即C:\file.ts,并键入以下命令。
    tsc file.ts -w // watches for file changes and converts on save
    

    1
    检查您是否安装了项目中配置的TypeScript版本。不知何故,我没有收到任何警告,提示我未安装TypeScript 3.7,但是编译保存功能却悄无声息地停止工作。

    一旦我安装了TypeScript 3.7,它就又恢复正常了。


    1
    ""compileOnSave": true,对我不起作用。我最终发现,如果它在你扩展的另一个.json文件中定义,Visual Studio就不会遵循"compileOnSave": true,值。它必须在根目录中才能起作用。"

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,