尝试以扩展 VS Code 中的代理模式!

调试 TypeScript

Visual Studio Code 通过其内置的 Node.js 调试器Edge 与 Chrome 调试器支持 TypeScript 调试。

JavaScript 源映射支持

TypeScript 调试支持 JavaScript 源映射。要为你的 TypeScript 文件生成源映射,请使用 --sourcemap 选项进行编译,或在 tsconfig.json 文件中将 sourceMap 属性设置为 true

也支持内联源映射(源映射的内容作为数据 URL 存储,而不是作为单独的文件),但尚不支持内联源代码。

关于源映射实际应用的一个简单示例,请参阅 TypeScript 教程,其中展示了如何使用以下 tsconfig.json 和 VS Code 默认的 Node.js 调试配置来调试一个简单的“Hello World” Node.js 应用程序。

{
  "compilerOptions": {
    "target": "ES5",
    "module": "CommonJS",
    "outDir": "out",
    "sourceMap": true
  }
}

对于更高级的调试场景,你可以创建自己的调试配置文件 launch.json。要查看默认配置,请转到 运行和调试 视图 (⇧⌘D (Windows、Linux Ctrl+Shift+D)) 并选择 “创建 launch.json 文件” 链接。

这将在一个 .vscode 文件夹中创建一个 launch.json 文件,其中包含从你项目中检测到的默认值。

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "program": "${workspaceFolder}/helloworld.ts",
      "preLaunchTask": "tsc: build - tsconfig.json",
      "outFiles": ["${workspaceFolder}/out/**/*.js"]
    }
  ]
}

VS Code 已经确定了要启动的程序 helloworld.ts,将构建作为 preLaunchTask 包含在内,并告诉调试器在哪里可以找到生成的 JavaScript 文件。

launch.json 提供了完整的 IntelliSense,包含建议和信息,以帮助你了解其他调试配置选项。你还可以通过右下角的 添加配置 按钮向 launch.json 添加新的调试配置。

launch.json IntelliSense

另请参阅 Node.js 调试 以获取示例和进一步的解释。

映射输出位置

如果生成的(转译的)JavaScript 文件与其源文件不在同一位置,你可以通过在启动配置中设置 outFiles 属性来帮助 VS Code 调试器定位它们。每当你在原始源代码中设置断点时,VS Code 会通过搜索 outFiles 中 glob 模式指定的文件来尝试查找生成的源代码。

客户端调试

TypeScript 非常适合编写客户端代码以及 Node.js 应用程序,你可以使用内置的 Edge 和 Chrome 调试器来调试客户端源代码。

我们将创建一个小型的 Web 应用程序来展示客户端调试的实际操作。

创建一个新文件夹 HelloWeb 并添加三个文件:helloweb.tshelloweb.htmltsconfig.json,内容如下:

helloweb.ts

let message: string = 'Hello Web';
document.body.innerHTML = message;

helloweb.html

<!DOCTYPE html>
<html>
    <head><title>TypeScript Hello Web</title></head>
    <body>
        <script src="out/helloweb.js"></script>
    </body>
</html>

tsconfig.json

{
  "compilerOptions": {
    "target": "ES5",
    "module": "CommonJS",
    "outDir": "out",
    "sourceMap": true
  }
}

运行 tsc 来构建应用,然后在浏览器中打开 helloweb.html 进行测试(你可以在文件资源管理器中右键单击 helloweb.html 并选择 复制路径 以粘贴到浏览器中)。

在“运行和调试”视图 (⇧⌘D (Windows、Linux Ctrl+Shift+D)) 中,选择 创建 launch.json 文件,然后选择 Web App (Edge) 作为调试器,或者如果你喜欢,也可以选择 Web App (Chrome)

更新 launch.json,将本地文件 URL 指向 helloweb.html

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "msedge",
      "request": "launch",
      "name": "Launch Edge against localhost",
      "url": "file:///C:/Users/username/HelloWeb/helloweb.html",
      "webRoot": "${workspaceFolder}"
    }
  ]
}

运行和调试 视图的配置下拉菜单现在将显示新的配置 Launch Edge against localhost。如果运行该配置,你的浏览器将启动并显示你的网页。在编辑器中打开 helloweb.ts,然后单击左侧边栏以添加断点(它将显示为一个红圈)。按 F5 启动调试会话,这将启动浏览器并在 helloweb.ts 中命中你的断点。

client-side debug breakpoint

常见问题

无法启动程序,因为找不到相应的 JavaScript

你可能没有在你的 tsconfig.json 中设置 "sourceMap": true,或者在你的 launch.json 中设置 outFiles,导致 VS Code Node.js 调试器无法将你的 TypeScript 源代码映射到正在运行的 JavaScript。请开启源映射并重新构建你的项目。