如何配置VSCode启动项调试Nx工作区的NestJS应用并解决import报错
问题排查与解决方案
报错核心原因是ts-node运行时的模块编译规则和项目TS配置、package.json配置不匹配,同时launch.json存在路径配置不一致问题,且Nx管理的项目直接使用ts-node启动入口文件容易和Nx内置编译规则冲突,可按以下两种方案修复:
方案1:修复现有ts-node启动配置
- 修正路径匹配规则:launch.json中
cwd已经设置为${workspaceRoot}/apps/api/,入口文件args无需写全路径,修改为["src/main.ts"]即可 - 补充ts-node模块匹配参数:
如果你保留package.json中的"type": "module"配置,将runtimeArgs替换为以下内容:
同时在env配置中补充编译参数:"runtimeArgs": [ "--nolazy", "--experimental-specifier-resolution=node", "-r", "ts-node/esm/register", "-r", "tsconfig-paths/register" ]
如果你删除package.json中的"env": { "TS_NODE_PROJECT": "${workspaceFolder}/apps/api/tsconfig.json", "TS_NODE_COMPILER_OPTIONS": "{\"module\":\"ESNext\",\"esModuleInterop\":true,\"allowSyntheticDefaultImports\":true}" }"type": "module"配置,使用CommonJS模式运行,仅需在env中补充以下参数即可:"env": { "TS_NODE_PROJECT": "${workspaceFolder}/apps/api/tsconfig.json", "TS_NODE_COMPILER_OPTIONS": "{\"module\":\"CommonJS\"}" } - 校验TS配置:检查
apps/api/tsconfig.json的compilerOptions字段,确认module配置和上述参数保持一致,同时开启esModuleInterop: true。
方案2(适配Nx项目,更推荐):使用Nx原生调试流程
Nx内置了完整的编译参数配置,直接调用Nx启动命令可避免配置冲突,操作如下:
- 替换launch.json中的启动配置:
{ "type": "pwa-node", "request": "launch", "name": "Debug Nest Framework (Nx)", "cwd": "${workspaceRoot}", "runtimeExecutable": "npx", "runtimeArgs": [ "nx", "serve", "api", "--inspect" ], "sourceMaps": true, "internalConsoleOptions": "openOnSessionStart", "skipFiles": ["<node_internals>/**", "node_modules/**"] }
- 启动上述Debug任务后,运行原有
Attach to NestJS API配置,即可绑定断点进行调试。
内容的提问来源于stack exchange,提问作者androgirl
相关产品推荐
相关产品推荐

