如何让 VSCode 加载 NPM 依赖项的源映射?



我有一个用 TypeScript 编写的依赖项。 依赖项包括 NPM 包中的源映射和原始源。 如果我在代码中设置断点,然后单步执行依赖项,它会正确地单步执行 TypeScript 而不是编译的 JavaScript。 但是,如果我在TypeScript代码中设置断点,然后启动我的应用程序,VSCode说

断点被忽略,因为找不到生成的代码(源映射问题?

如果我在进入依赖项设置断点,一切正常。

我相信这里的问题是源映射是单向的,所以当我在 TypeScript 源文件中有一个断点时,它不知道它在 JavaScript 中的位置(这是通过节点调试器实际设置断点所必需的)。 一旦 JavaScript 文件打开,VSCode 就能够将两者匹配起来,现在断点就可以工作了。

所以问题是我怎样才能使我的 TS 断点从启动开始工作,而不必先进入文件? 依赖项是许多文件,每次运行都必须重置断点是有问题的,特别是因为我正在调试的特定问题如果我花费的时间过长(超过几秒钟),就会遇到套接字连接超时。

我想要的是一种告诉 TypeScript 的方法,"在启动调试器时解析这些 JavaScript 文件并同步源映射,以便断点正确匹配"。

我知道一般功能是可用的,因为我可以通过 TypeScript 文件中的断点成功调试依赖项本身(我是依赖项的维护者)。 只是当它作为 NPM 模块加载时,似乎会丢失一些信息。

这正是launch.json文件中outFiles属性的用途 - 将其设置为包含节点模块中的javascript文件(以及您自己的代码)的glob模式。调试适配器将查看这些文件以获取源映射引用,以便它可以立即解析 TS 文件中的断点。

例子:

"outFiles": [ "${workspaceRoot}/myOutFiles/**/*.js", "${workspaceRoot}/node_modules/**/*.js" ]

如果您只知道一组包含源映射的选定节点模块,则可以像这样提高性能:

"outFiles": [ "${workspaceRoot}/node_modules/{module_a,module_b}/**/*.js" ]

从本期: https://github.com/Microsoft/vscode-node-debug/issues/82#issuecomment-290642560

最新更新