如何在 WebStorm 中调试服务器端 TypeScript 代码

How to debug server side TypeScript code in WebStorm

提问人:Sul Aga 提问时间:4/16/2016 最后编辑:LazyOneSul Aga 更新时间:11/14/2023 访问量:8087

问:

将其与 Visual Studio Code 进行比较,您需要做的就是允许源映射,VSCode 将调试 TypeScript,但是我无法在 WebStorm 上实现相同的效果。

我可以轻松地在 WebStorm 中调试服务器端 JavaScript,但不能在 TypeScript 中调试

调试 TypeScript WebStorm 服务器端

评论

1赞 Ekaterina Prigara 4/18/2016
您使用哪个 WebStorm 版本?你有源地图吗?在 Imageboard 示例项目 (github.com/Microsoft/TypeScriptSamples/tree/master/imageboard) 中进行调试对我来说效果很好:我为server.js文件启动一个Node.js调试会话,并且命中server.ts放入的断点。
0赞 Sul Aga 4/18/2016
我使用的是最新版本“2016.1”。我会试一试。所以你要做的就是编译你的ts文件并启动一个新的调试会话,然后WebStorm会自动选择ts文件断点吗?
0赞 Ekaterina Prigara 5/3/2016
是的,我正在使用内置的 WebStorm TypeScript 编译器来编译代码并生成源映射。断点是在 TS 文件中设置的,这要归功于 WebStorm 可以在断点上停止的源映射。如果在调试应用时仍有问题,请报告问题并提供有关 youtrack.jetbrains.com/issues/WEB 的更多详细信息
0赞 robertohuertasm 10/3/2016
@Ekaterina,如果生成的 js 文件和映射到不同的文件夹(例如:dist 文件夹),您将如何管理。在 VSCode 中,您有一个输出路径设置,但我在 Webstorm 中找不到类似的东西。
0赞 Ekaterina Prigara 10/5/2016
@robertohuertasm,您可以选中“使用输出路径”,然后在“首选项”|”语言和框架 |TypeScript(在“启用 TypeScript 编译器”下)或添加tsconfig.json描述项目配置(包括输出目录)的文件,并将内置编译器指向它。

答:

8赞 jugglingcats 10/24/2016 #1

对于其他在 WebStorm/IDEA 中调试 TypeScript 的人,我也有与 OP 类似的挫败感(可能出于不同的原因)。我的问题只是我没有将工作目录设置为节点运行配置中的文件夹。我正在 Jest 中运行测试,并假设工作目录应该是我项目的根。将其设置为,调试开始工作!distdist

更多信息...

源 .ts 文件src

打字稿版本:2.0.3

文件:tsconfig.json

{
  "compilerOptions": {
    "jsx": "react",
    "module": "commonjs",
    "noImplicitAny": false,
    "outDir": "dist",
    "preserveConstEnums": true,
    "removeComments": true,
    "sourceMap": true,
    "target": "es6",
    "moduleResolution": "node"
  },
  "exclude": [
    "node_modules",
    "dist"
  ]
}

Jest 配置 (in ):package.json

  "jest": {
    "scriptPreprocessor": "<rootDir>/node_modules/ts-jest/dist/preprocessor.js",
    "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx)$",
    "moduleFileExtensions": [
      "ts",
      "tsx",
      "js"
    ]
  }

运行配置...

工作目录:<project_root>/dist

Javascript 文件:../node_modules/jest-cli/bin/jest.js

应用程序参数:--runInBand

希望对你有所帮助!

评论

0赞 John White 5/15/2017
[已编辑]它似乎即使在根目录中也能工作,让它为我工作的是使用“node”运行配置而不是“npm script”。
1赞 Joe Hawkins 8/2/2018
在编译器选项中进行设置对我来说很有帮助。outDir
1赞 Pencroff 9/18/2017 #2

为了围绕打字稿源运行 WebStorm(2017.2.3) 调试器,我做了:

  1. 设置配置:Node.js
    • 工作目录:(位于我的root/of/the/projectpackage.json)
    • JavaScript 文件:dist/index.js
  2. 我正在用 编译我的 TypeScript,但更重要的是源映射文件。所以用于编译的任务如下:gulp-typescript

    const gulp = require('gulp');
    const ts = require('gulp-typescript');
    const sourcemaps = require('gulp-sourcemaps');
    const merge = require('merge2');
    
    const tsProject = ts.createProject('tsconfig.json', {
      declaration: true,
      typescript: require('typescript'),
    });
    
    gulp.task('default', () => {
      const result = gulp.src('./app/**/*.ts')
        .pipe(sourcemaps.init())
        .pipe(sourcemaps.identityMap()) // optional
        .pipe(tsProject());
    
      return merge([
    result.js
          .pipe(sourcemaps.write('.', { includeContent: false, sourceRoot: '../app' }))
          .pipe(gulp.dest('dist')),
        result.dts
          .pipe(gulp.dest('dist')),
      ]);
    });
    

所有源 TS 文件都位于“./app”文件夹中,所有编译文件都位于文件夹中。最重要的源文件选项,错误的值不会带您进入ts文件。./distsourceRoot

通过我在文件旁边写入我的文件并引用文件夹。我不需要文件中的内容,因为它已经在那里(文件夹)。sourcemaps.write('.', { includeContent: false, sourceRoot: '../app' }.map.jsapp.mapapp

多亏了@Ekaterina我才能够使用 Typescript 运行 Node 调试。

2赞 Nicolas Zozol 5/6/2019 #3

我正在使用一个名为 .ts-node

Using ts-node with Webstorm

首先添加您的文件:package.json

"devDependencies": {
    "ts-node": "8.1.0",
    "typescript": "3.2.4"
  },

运行,目录将包含 Windows 所需的 或。npm installnode_module/.bin/ts-nodets-node.cmd

显然,这些版本会移动。您可能会在项目中看到他们正在使用的打字稿版本尽可能接近。package.jsonts-node

然后,可以添加断点。我看到的唯一缺点是您必须将 Javascript 文件(这是一个 ts 文件)定义到配置中,而不仅仅是右键单击 + 运行。

如果您遇到错误,请检查您的文件是否没有xyz is not a functiontsconfig.json"noEmit": false,

7赞 LeOn - Han Li 4/1/2021 #4

试图找到一种方法让 Webstorm/Intellij 监视 TS 文件更改并在调试模式下重新启动服务器。看起来像 ts-node-dev,IHMO 在实时重新加载方面比它更快,因为它在重新启动之间共享 Typescript 编译过程。nodemon

npm i ts-node-dev --save-dev

然后在 你的 中,添加一个包含以下参数的配置:Run/Debug Configurationnode.js

JavaScript file ---> node_modules/ts-node-dev/lib/bin.js

Applicationi parameters ---> --respawn -- src/script/local.server.ts

enter image description here

现在保存配置并运行,您应该能够在任何 TS 代码更改时设置断点以及实时重新加载服务器。Debug

我为此打包了一个小型库,如果你碰巧使用aws lambda

https://github.com/vcfvct/ts-lambda-local-dev

评论

0赞 Erythros 6/29/2022
我来晚了一点。我设法使调试“工作”与您的信息。例如,启用“在第一行中断”,它确实会在index.js中断。但是,如果我从浏览器运行 EP 调用,则无法到达断点。有什么提示吗?
0赞 LeOn - Han Li 6/30/2022
@Erythros你说的电话是什么意思?在 WebStore 中运行调试后,只要源映射配置为 tsconfig.json,就应该能够在xxx.ts中设置断点。因为它也应该在更改时执行此操作,因为 ts-node-dev 正在监视更改并重新编译和重新生成。EPlive reload
3赞 Petey 8/15/2021 #5

只想添加对 Webstorm 2021.1.1 有用的内容

我发现最简单的方法是转到您的package.json并右键单击要运行的 npm 脚本旁边的绿色三角形。然后选择“调试”。

我能够将断点应用于我的打字稿代码,并且它运行良好。来自 .Net,调试总是非常简单,我很高兴看到 webstorm 让它变得如此简单。

这是我选择调试的 npm 脚本。

"dev": "env-cmd -f ./config/dev.env concurrently -k -n COMPILER,NODEMON -c gray,blue \"tsc -w\" \"nodemon -w dist dist/index.js\"",
2赞 Igor W. 9/1/2023 #6

使用 Webstorm/IntelliJ 时,不需要用 TypeScript 调试Node.js项目。

您应该确保已在以下位置启用源映射:tsconfig.json

//tsconfig.json
{
  "compilerOptions": {
    ...,
    "sourceMap": true,
    ...
  }
}

需要源映射才能允许您直接在 TypeScript 文件中设置断点。

然后你应该记得使用节点选项或.我建议在大多数情况下使用,因为一旦 Node 启动并运行,它就会暂停执行。--inspect--inspect-brkinspect-brk

您可以添加简单的脚本来运行您的 TypeScript Node 应用程序,例如。ts-node 中:package.json

//package.json
{
  "scripts": {
    "dev-debug": "ts-node --inspect-brk src/index.ts" 
  }
}

并使用包管理器运行它:pnpm|yarn|npm

#shell
pnpm run dev-debug

然后,在你的 shell 中,你会得到很好的 URL,你可以用它来附加到你的调试器。ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e

要在 WebStorm/IntelliJ 中做到这一点,您只需按下按键单击它:

⇧ + ⌘ + 点击

Ctrl + Shift + 单击

密钥取决于您的操作系统。

之后,调试器将在 IDE 中启动并运行。

0赞 Sidonai 11/14/2023 #7

创建一个 和 脚本:package.jsonbuildstart

//package.json

{
...
"scripts": {
    "start": "npm run build && node ./dist/index.js",
    "build": "webpack --config ./webpack.config.js",
...
}

在此配置中,所有编译的文件都位于 下。入口点是 。dist/index.js

确保您已启用该选项:tsconfig.jsonsourceMap

//tsconfig.json

{
...
    "compilerOptions": {
        "sourceMap": true
    }
...
}

在文件中,请确保具有以下属性,如下所示:webpack.config.js

//webpack.config.js

module.exports = {
    mode: 'development', // This is important!, if you set 'production' it won't let you debug
    devtool: 'source-map',
    ...
}

最后,按如下方式设置 WebStorm:Run/Debug Configuration

...
package.json: ~/path/to/your/package.json
Command: run
Scripts: start
...

现在添加断点并开始调试