从 Webstorm 中的 docker 容器远程调试 koa 应用程序(Typescript)

Remote debug a koa application (Typescript) from a docker container in Webstorm

问题:我目前正在尝试使用 KoaJS、Typescript 和 Docker 设置一个新的 NodeJS 项目。安装程序按计划工作,但远程调试给我带来了一些问题 - 或者至少就我的理解而言。

如果我启动应用程序并使用 Webstorm 中的 "Attach to Node.js/Chrome" 调试设置,调试器会工作...在某种程度上。我 运行 进入断点,但同一个文件(即 kernel.ts)再次从 docker workdir(在 Webstorm 中)打开。

看起来像这样:

Fig 1: Kernel.ts with Breakpoint

Fig 2: File opened from docker workdir

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

设置

Docker文件

FROM node:11.1.0-alpine

WORKDIR /share/example

COPY package.json .
RUN npm install --quiet

COPY . .


Docker撰写

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 的情况下尝试了相同的设置并且它工作正常(即远程调试而不是从 [=64 打开相同的文件=] workdir 但直接跳转到设置断点的文件)。因此 - 我想 - 缺少打字稿配置或者我有概念上的误解。

好的。问题解决了。

并没有真正改变那么多。我现在让 Typescipt 在启动应用程序之前编译文件(使用 JetBrains / Webstorm FileWatchers)。

并将 Json 脚本命令更改为:

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

现在按预期工作。

编辑:我猜生成的 js 文件的源映射指向 "actual source" - docker 容器中的文件 - 而不是工作目录中的 "source"。在宿主机上编译ts文件,直接指向编译后的js版本即可。