在Webstorm中从Docker容器远程调试Koa应用程序(Typescript)

时间:2018-11-18 18:55:19

标签: typescript docker debugging remote-debugging koa

问题:我目前正在尝试使用KoaJS,Typescript和Docker设置新的NodeJS项目。该安装程序可以按计划进行,但远程调试给我带来了一些问题-至少在我看来是这样。

如果我启动该应用程序并使用Webstorm的“附加到Node.js / Chrome”调试设置,则调试器可以正常工作。我遇到了断点,但从docker workdir(在Webstorm中)再次打开了相同的文件(即kernel.ts)。

它看起来像这样:

Fig 1: Kernel.ts with Breakpoint

Fig 2: File opened from docker workdir

此外-在跳过断点之后-添加的其他断点没有效果。

设置

DockerFile

FROM node:11.1.0-alpine

WORKDIR /share/example

COPY package.json .
RUN npm install --quiet

COPY . .


DockerCompose

version: '3'

services:
  web:
    container_name: example_web
    build: .
    command: npm run debug
    volumes:
    - .:/share/example
    - /share/example/node_modules
    ports:
    - "3000:3000"
    - "9229:9229"


package.json脚本

"debug": "nodemon --inspect=0.0.0.0:9229 -e ts,tsx --exec node -r ts-node/register ./src/kernel.ts",


tsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es2017",
    "moduleResolution": "node",
    "noImplicitAny": true,
    "outDir": "./dist",
    "sourceMap": true,
    "inlineSources": true
  },
  "include": [
    "./src/**/*"
  ]
}

问题:是否可以进行此设置?编译好打字稿并让应用程序使用编译的js运行,并使用在打字稿文件中设置的断点进行调试吗?

我怀疑我的打字稿配置可能是罪魁祸首。关于Webstorm的某些事情不了解docker容器中的kernel.ts与打开的文件相同...或者webstorm完全理解它,但是我的配置只是...缺乏。

Ps::我尝试了没有Typescript的相同设置,并且运行良好(例如,远程调试,而不是从docker workdir打开相同的文件,而是直接跳转到断点所在的文件组)。因此-我猜-缺少打字稿配置,或者我在概念上有误解。

1 个答案:

答案 0 :(得分:1)

好的。问题解决了。

真的没有太大变化。我现在让Typescipt在启动应用程序之前编译文件(使用JetBrains / Webstorm FileWatchers)。

并将Json Script命令更改为:

"nodemon --inspect=0.0.0.0:9229 ./dist/kernel.js"

现在可以按预期工作。

编辑:我想生成的js文件的源映射指向“实际源”(docker容器中的文件),而不是工作目录中的“源”。在主机上编译TS文件并仅指向已编译的js版本即可。