问题:我目前正在尝试使用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打开相同的文件,而是直接跳转到断点所在的文件组)。因此-我猜-缺少打字稿配置,或者我在概念上有误解。
答案 0 :(得分:1)
好的。问题解决了。
真的没有太大变化。我现在让Typescipt在启动应用程序之前编译文件(使用JetBrains / Webstorm FileWatchers)。
并将Json Script命令更改为:
"nodemon --inspect=0.0.0.0:9229 ./dist/kernel.js"
现在可以按预期工作。
编辑:我想生成的js文件的源映射指向“实际源”(docker容器中的文件),而不是工作目录中的“源”。在主机上编译TS文件并仅指向已编译的js版本即可。