通过 TS 使用路径映射调试 Nest App
Debugging Nest App using path mapping by TS
我正在尝试调试 typescript-node 应用程序(通过 nestjs),但是因为我通过 Typescript 包含了路径映射 ->
https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping
它不再工作了,它 抛出这个错误:
调试配置文件 如下所示:
而 TSCONFIG 文件 如下所示:
顺便提一下,该应用程序运行良好,测试顺利通过,一切都按预期运行,除了我按播放键调试应用程序时。
解决方法是将这些路径替换为要导入的相对正常路径,但这意味着摆脱 TS 带来的路径映射功能,这是我的最后一击。
我找到了解决方案。我将详细说明这些步骤,以防对其他人有所帮助。
在您的项目中添加 路径映射 时,您有机会使用更短的模块绝对路径,它有一些 pros/const 但通常我认为它是使用模块时很棒。
在测试、调试或 运行 应用程序时可能会出现与在开发模式下工作不同的问题。
所以使用jest,你需要添加:
"jest": {
"moduleFileExtensions": [ ... ],
"moduleNameMapper": {
"@db/(.*)": "<rootDir>/core/database/",
"@exceptions/(.*)": "<rootDir>/core/exceptions/",
"@permissions/(.*)": "<rootDir>/permissions/",
"@roles/(.*)": "<rootDir>/roles/",
"@users/(.*)": "<rootDir>/users/",
"@videos/(.*)": "<rootDir>/videos/"
},
"rootDir": "src",
...
然后调试,我需要执行以下步骤:
1) 在 vscode 中更新 launch.json:
{
"type": "node",
"request": "launch",
"name": "Nest Debug",
"runtimeExecutable": "npm",
"runtimeArgs": [
"run-script",
"debug"
],
"port": 9229
},
2) 更新 package.json 脚本以添加:
"debug": "nodemon --config nodemon-debug.json",
3) 安装 tsconfig-paths - (npm install --save-dev tsconfig-paths)
4) Create/Update nodemon-debug.json 文件:
{
"watch": [
"src"
],
"ext": "ts",
"ignore": [
"src/**/*.spec.ts"
],
"exec": "node --inspect-brk -r ts-node/register -r tsconfig-paths/register src/main.ts"
}
注意这一行
node --inspect-brk -r ts-node/register -r tsconfig-paths/register src/main.ts
与nodemon.json的区别是:
- Nodemon.json: "exec": "ts-node -r tsconfig-paths/register src/main.ts"
- Nodemon-debug.json: "exec": "ts-node -r tsconfig-paths/register -r tsconfig-paths/register src/main.ts"
至于调试,我想知道你为什么在使用typescript和有ts的情况下引入nodemon -node 已经安装。
仅使用 tsconfig-paths 库即可简化您的解决方案。安装后,vscode中的launch.json可能更新如下:
{
"configurations": [{
"type": "node",
"request": "launch",
"name": "Debug Nest App",
"args": ["src/main.ts"],
"runtimeArgs": ["-r", "ts-node/register", "-r", "tsconfig-paths/register"],
"autoAttachChildProcesses": true
}]
}
这是包文档中针对该特定点的 link。
PS:Nest 框架提供开箱即用的脚本 start:debug
,也可以简单地附加到 launch.json 配置。
我正在尝试调试 typescript-node 应用程序(通过 nestjs),但是因为我通过 Typescript 包含了路径映射 ->
https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping
它不再工作了,它 抛出这个错误:
调试配置文件 如下所示:
而 TSCONFIG 文件 如下所示:
顺便提一下,该应用程序运行良好,测试顺利通过,一切都按预期运行,除了我按播放键调试应用程序时。
解决方法是将这些路径替换为要导入的相对正常路径,但这意味着摆脱 TS 带来的路径映射功能,这是我的最后一击。
我找到了解决方案。我将详细说明这些步骤,以防对其他人有所帮助。
在您的项目中添加 路径映射 时,您有机会使用更短的模块绝对路径,它有一些 pros/const 但通常我认为它是使用模块时很棒。
在测试、调试或 运行 应用程序时可能会出现与在开发模式下工作不同的问题。
所以使用jest,你需要添加:
"jest": {
"moduleFileExtensions": [ ... ],
"moduleNameMapper": {
"@db/(.*)": "<rootDir>/core/database/",
"@exceptions/(.*)": "<rootDir>/core/exceptions/",
"@permissions/(.*)": "<rootDir>/permissions/",
"@roles/(.*)": "<rootDir>/roles/",
"@users/(.*)": "<rootDir>/users/",
"@videos/(.*)": "<rootDir>/videos/"
},
"rootDir": "src",
...
然后调试,我需要执行以下步骤:
1) 在 vscode 中更新 launch.json:
{
"type": "node",
"request": "launch",
"name": "Nest Debug",
"runtimeExecutable": "npm",
"runtimeArgs": [
"run-script",
"debug"
],
"port": 9229
},
2) 更新 package.json 脚本以添加:
"debug": "nodemon --config nodemon-debug.json",
3) 安装 tsconfig-paths - (npm install --save-dev tsconfig-paths)
4) Create/Update nodemon-debug.json 文件:
{
"watch": [
"src"
],
"ext": "ts",
"ignore": [
"src/**/*.spec.ts"
],
"exec": "node --inspect-brk -r ts-node/register -r tsconfig-paths/register src/main.ts"
}
注意这一行
node --inspect-brk -r ts-node/register -r tsconfig-paths/register src/main.ts
与nodemon.json的区别是:
- Nodemon.json: "exec": "ts-node -r tsconfig-paths/register src/main.ts"
- Nodemon-debug.json: "exec": "ts-node -r tsconfig-paths/register -r tsconfig-paths/register src/main.ts"
至于调试,我想知道你为什么在使用typescript和有ts的情况下引入nodemon -node 已经安装。 仅使用 tsconfig-paths 库即可简化您的解决方案。安装后,vscode中的launch.json可能更新如下:
{
"configurations": [{
"type": "node",
"request": "launch",
"name": "Debug Nest App",
"args": ["src/main.ts"],
"runtimeArgs": ["-r", "ts-node/register", "-r", "tsconfig-paths/register"],
"autoAttachChildProcesses": true
}]
}
这是包文档中针对该特定点的 link。
PS:Nest 框架提供开箱即用的脚本 start:debug
,也可以简单地附加到 launch.json 配置。