如何使用源映射远程调试 Node.js 应用程序(使用 WebStorm)
Posted
技术标签:
【中文标题】如何使用源映射远程调试 Node.js 应用程序(使用 WebStorm)【英文标题】:How to remotely debug Node.js app with source maps (using WebStorm) 【发布时间】:2016-07-27 14:04:23 【问题描述】:我正在努力调试从 ES6 和 BabelJs 翻译而来的一段 node.js 代码。情况如下:
我有一个带有 ES6 源文件 server\app.js
的项目,它被翻译成 ES5 并与 dist\server\app.js.map
一起放入 dist\server\app.js
。我可以在原始server\app.js
中设置一个断点,然后在本地调试文件dist\server\app.js
以命中该断点 - 源映射工作得非常好。
现在,我已将整个 dist
文件夹放到远程 PC 上,并在其中使用 node --debug-brk dist\server\app.js
命令启动我的应用程序。从 WebStorm 使用远程调试器连接到该进程使应用程序运行,但没有命中断点。
令人惊讶的是,如果我从安装了 WebStorm 的同一主机上的终端运行 node --debug-brk dist\server\app.js
,那么连接到 localhost:5858 的远程调试器能够触发该断点。
为了在远程调试时命中该断点,我有什么遗漏吗?
提前感谢您的任何建议。
Webstorm: 2016.1
Node: 4.4.2 (both local and remote machine)
【问题讨论】:
【参考方案1】:当在与 WebStorm 的通信中遇到断点时,节点调试器似乎会发送行号和文件名。文件路径是运行服务器节点的路径。我们拥有的是:
Server (remote):
/remotePath/dist/server/app.js (transpiled file ES5)
Local system:
/localPath/server/app.js (source file ES6)
/localPath/dist/server/app.js (transpiled file ES5)
/localPath/dist/server/app.js.map (source map).
什么节点发回的是这条路径:
/remotePath/dist/server/app.js
所以 WebStorm 尝试在其文件系统中查找此文件。但它不存在。 这里的解决方案可能是在本地文件系统中创建一个符号链接:
/remotePath -> /localPath
顺便说一句。 VS Code 通过在调试配置中暴露 localRoot 和 remoteRoot 解决了这个问题。
【讨论】:
以上是关于如何使用源映射远程调试 Node.js 应用程序(使用 WebStorm)的主要内容,如果未能解决你的问题,请参考以下文章
请教大神们,我在eclipse 安装NODE.JS调试环境时候,添加软件源网址后,啥都不出来。这是为啥阿?
使用 Eclipse 作为 Node.JS 远程调试器(拒绝连接)