WebStorm NPM调试配置中的“连接被拒绝”

时间:2016-05-12 21:38:55

标签: node.js webstorm javascript-debugger

请记住,我对实际所做的调试器只有最简单的理解,我需要帮助为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,但不会在我设置的断点处中断。

查看调试器>变量窗格,我看到Connecting to localhost:57617,然后弹出一个工具提示说"连接被拒绝"并且窗格显示Frame is not available

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

2 个答案:

答案 0 :(得分:15)

错误信息的确非常不清楚。您需要在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调试器应该为你做的,而不必操纵源代码。但它似乎是唯一的方式(目前)。

答案 1 :(得分:4)

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

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

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

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

然后,当我想要调试时,我使用一个调用调试选项的运行配置 - 因为至少在Windows中,节点在没有被替换的情况下按字面意思取得。

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

Webstorm Run Configuration

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

作为脚本参数:

"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脚本命令。