【问题标题】:`Connection refused` in WebStorm NPM debug configurationWebStorm NPM 调试配置中的“连接被拒绝”
【发布时间】:2016-09-08 22:25:24
【问题描述】:

请记住,我对调试器真正在做什么只有最粗略的了解,我需要帮助来设置 express.js 应用程序的 WebStorm npm 调试配置。

到目前为止,这就是我——我用我的设置点击调试,因为我认为它们应该是(如下):

/Users/me/.nvm/versions/node/v4.4.1/bin/node --debug=8090     
/Users/me/.nvm/versions/node/v4.4.1/lib/node_modules/npm/bin/npm-cli.js run-script start

To debug "start" script, make sure $NODE_DEBUG_OPTION string is specified as the first argument for node command you'd like to debug.
For example:
 { "start": "node $NODE_DEBUG_OPTION server.js" }
Debugger listening on port 8090
...
It has begun. Port: 3000

所以此时,应用程序已经启动并响应我的POSTlocalhost:3000,但并没有在我设置的断点处中断。

查看 Debugger>Variables 窗格,我看到 Connecting to localhost:57617,然后弹出一个工具提示“连接被拒绝”,窗格显示 Frame is not available

我不明白端口号 57617 的来源。它会有所不同,但不是根据我尚未发现的任何模式,除了因为它总是不同于我在--debug=X--debug-brk=X 节点选项中设置的模式。

【问题讨论】:

  • 57617 是节点调试器正在侦听的随机端口。这并不重要。您是否将 $NODE_DEBUG_OPTION 添加到 package.json 中的 node 命令,因为它是在消息中写入的?除非此变量存在,否则您无法调试 npm 脚本 - 需要在调试模式下启动由 npm 生成的节点
  • 就是这样。 (我承认,我对此感到困惑,因为我以某种方式想象它不是文字字符串值,而是一些环境变量或类似的东西)。如果您回答以下问题,我将接受您的回答。

标签: node.js webstorm javascript-debugger


【解决方案1】:

在以前的 Node 或 Webstorm 版本中我从来不需要这个。不确定现在需要此选项的更改。

我不得不将它添加到package.json,但是,将它添加到运行配置中不起作用。而且我不得不制作一个单独的脚本,因为它在运行任何脚本时没有调试时中断了。

这是我的 package.json(注意 Windows 样式变量 %VAR%,对于类 Unix 系统使用 $VAR):

"scripts": {
    "start": "node index.js",
    "debug": "node %NODE_DEBUG_OPTION% index.js",
},

然后,当我想调试时,我使用调用调试选项的运行配置——因为至少在 Windows 中,节点在没有被替换时会按字面意思获取 var。


如果您尝试在 Webstorm (2016.3.3) 的运行配置对话框中输入变量:

这会导致这些实际命令不正确:

作为脚本参数:

"C:\...\runnerw.exe" "C:\...\node.exe" "C:\...\npm-cli.js" run start %NODE_DEBUG_OPTION%

作为节点选项:

"C:\...\runnerw.exe" "C:\...\node.exe" %NODE_DEBUG_OPTION% "C:\...\npm-cli.js" run start

但选项似乎需要传递给 NPM,而不是 npm 脚本(前者),而不是节点(后者),据我所知,在对话框中没有办法做到这一点。因此,添加到 package.json 脚本命令。

【讨论】:

【解决方案2】:

错误信息确实很不清楚。您需要在package.json 中调整您的 npm 脚本条目(很遗憾)。在这篇博文中找到了清晰的描述:http://pavelpolyakov.com/2016/05/01/webstorm-npm-tasks-debug/

您的 start 条目应如下所示:

"scripts": {
    "start": "node $NODE_DEBUG_OPTION ./node_modules/someModule/bin/someModule.js --arguments"
}

您也可以使用两个条目来保持第一个 DRY。虽然这并不是真正必要的,因为两者都可以从命令行运行。所以为了完整起见:

"scripts": {
    "start": "someModule --arguments",
    "startDebug": "node $NODE_DEBUG_OPTION ./node_modules/someModule/bin/someModule.js --arguments"
}

我不觉得这种方法特别干净,我认为这就是 npm 调试器应该为您做的,而无需操作源代码。但它似乎是唯一的方法(目前)。

【讨论】:

  • 我同意,这是不可取的,但我能够从命令行(npm 运行配置)将 $NODE_DEBUG_OPTION 传递给脚本,这确实是所需要的。无需编辑源代码。
  • 你是怎么做到的?你能具体说明你在“参数”中输入的内容吗?我尝试过的任何事情都没有成功,我一定在这里遗漏了一些东西。
  • 在 Webstorm 的 Run/Debug Configurations 窗口中,您可以在 Arguments 字段中将“$NODE_DEBUG_OPTON”传递给脚本。 (它应该是一个 npm 配置)
  • 这对我不起作用......我将它放在节点选项或参数中。两者都失败了......:/。 (网络风暴 2016.1.2)。如果我在终端中运行生成的命令“/usr/local/bin/node $NODE_DEBUG_OPTION /usr/local/lib/node_modules/npm/bin/npm-cli.js run-script start”,它工作得很好,真的很奇怪。
  • 对我来说,添加 "%NODE_DEBUG_OPTION%" 作为 Webstorm 2016.3.2 的建议会导致脚本不再从命令行运行。我收到“找不到模块 /%NODE_DEBUG_OPTION%”错误
猜你喜欢
  • 2018-12-11
  • 1970-01-01
  • 2017-08-08
  • 2015-07-19
  • 2020-07-07
  • 2023-03-30
  • 1970-01-01
  • 2016-09-10
  • 1970-01-01
相关资源
最近更新 更多