2

我正在尝试为 TypeScript 设置一个 Sublime Text 2 构建系统。我已按照我在这里找到的指示进行操作。实际上调用编译器是可行的,但是它不能正确地提取错误消息。

这是我的示例 TypeScript 程序:

function greeter(person: string) {
     return "Hello, " + person;
}
var user = "Jane User";
document.body.innerHTML = greeter(us-er);

当我从命令行编译时,我看到以下输出:

C:/data/helloworld.ts(5,34):当前作用域中不存在名称“us” C:/data/helloworld.ts(5,37):当前作用域中不存在名称“er”当前范围 C:/data/helloworld.ts(5,26):提供的参数与调用目标的任何签名都不匹配

当我从 Sublime Text 2 中构建时,我看到以下输出:

C:/Data/helloworld.ts(5,34):【0.6s完成】

如原始问题中所述,我尝试了 file_regex 的不同变体,结果都相同。我当前版本的文件如下所示:

{
    "selector": "source.ts",
    "cmd": ["tsc.cmd", "--target","ES5", "$file"],
    "file_regex": "^(.+?)\\(([0-9]+,[0-9]+)\\)\\: (.+)$"
}

当我使用Python 正则表达式工具测试正则表达式时,此版本正确匹配 3 个部分。但是,Sublime Text 拒绝向我显示实际的错误消息。

谁能指出我做错了什么?

这是非常令人沮丧的,尤其是当一个站点甚至显示了一个正确显示错误消息的 Sublime Text 示例时。

这是 Windows 7 64 位上的 Sublime Text 2.01 64 位。

4

1 回答 1

1

看起来该进程在刷新输出缓冲区之前已终止。您可以通过以下方式验证这一点:

{
    "selector": "source.ts",
    "cmd": ["tsc.cmd", "--target","ES5", "$file"],
    "file_regex": "(.*)"
}

你仍然应该只得到类似的东西

C:/Data/helloworld.ts(5,34): [Finished in 0.6s]

要解决此问题,您可以尝试在批处理文件中添加一些延迟tsc.cmd

@echo off
:: Run the compiler
node "C:\typescript\tsc.js" %*

:: Waits for 500ms
ping 1.1.1.1 -n 1 -w 500

EDIT: See Markus' comment about using Windows Script Host instead of node. This fixes the problem. Further research suggests this is actually a known issue with node on Windows: see here and here.

于 2012-11-15T18:28:31.887 回答