VSCode调试Rush管理的monorepo中TypeScript库断点无法映射问题求助
Rush Monorepo下VSCode调试抽离公共库断点映射解决方案
这种调试需求完全可以实现,无需等到库拆分为独立可运行的微服务,断点无法映射的核心原因是Node调试器未正确匹配库的源码与主应用加载的编译产物路径,可按以下步骤排查配置:
- 第一步:确保公共库编译时输出完整SourceMap
如果使用TypeScript开发,需要在库的tsconfig.json中开启配置:
若使用Babel、Rollup、ESBuild等工具打包库,也需要对应开启SourceMap输出,且不要配置为完全隐藏原始源码路径的混淆模式。{ "compilerOptions": { "sourceMap": true, "inlineSources": true // 可选,将源码嵌入sourcemap,降低路径匹配难度 } } - 第二步:调整VSCode launch.json调试配置
核心要修改两个配置项:解除node_modules下SourceMap的读取限制,添加Rush软链对应的路径映射规则,示例配置如下:{ "version": "0.2.0", "configurations": [ { "type": "node", "request": "launch", "name": "调试主应用+关联库", "program": "${workspaceFolder}/apps/main/src/index.ts", // 替换为你的主应用入口路径 "cwd": "${workspaceFolder}/apps/main", // 替换为你的主应用根目录 "sourceMaps": true, // 解除默认的node_modules sourcemap读取限制 "resolveSourceMapLocations": [ "${workspaceFolder}/**", "!**/node_modules/*/**" // 仅排除第三方依赖,自己的库软链路径不会被拦截 ], // 适配Rush的软链路径映射 "sourceMapPathOverrides": { "../packages/*": "${workspaceFolder}/packages/*" // 替换为你的库所在的根目录相对路径 }, // 若使用ts-node直接运行主应用,添加以下运行时参数 "runtimeArgs": [ "-r", "ts-node/register", "-r", "tsconfig-paths/register" ], "skipFiles": ["<node_internals>/**"] } ] } - 第三步:验证路径匹配规则
主应用启动后先在入口处打断点,断住后在调试控制台执行require.resolve('你的目标库名'),查看返回的实际加载路径,根据返回结果调整sourceMapPathOverrides的映射规则即可。 - 补充注意事项
要提前启动公共库的watch编译进程,保证库的编译产物和SourceMap是最新版本,否则会出现断点映射到旧代码、无法命中的问题。如果配置了Rush的增量构建,也可以直接用rush build --to 你的目标库 --watch启动增量编译。
内容的提问来源于stack exchange,提问作者Ed Mackenzie
相关产品推荐
相关产品推荐

