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

时间:2017-04-01 01:49:03

标签: typescript visual-studio-code source-maps typescript2.0 node-debugger

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

  

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

如果我在步入依赖项后设置了一个断点,一切正常。

我认为这里的问题是源映射是单向的,所以当我在TypeScript源文件中有断点时,它不知道它在JavaScript中的位置(这是实际设置断点所必需的)通过节点调试器)。一旦JavaScript文件打开,VSCode就可以匹配两个up和now断点的工作。

所以问题是,我怎样才能让我的TS断点在启动时工作,而不必先进入文件?依赖是很多文件,并且每次运行都必须重置我的断点是有问题的,特别是因为我调试的特定问题会在我花费太长时间(超过几秒钟)时进入套接字连接超时。

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

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

1 个答案:

答案 0 :(得分:1)

这正是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