如何使用node-inspector,Windows 7调试带断点的Gruntfile?

时间:2014-06-02 18:32:04

标签: javascript node.js debugging gruntjs windows-7-x64

所以我花了几天的时间试图让这个没有运气。我发现的大多数解决方案似乎都能正常工作"好的"用于调试节点应用程序但我没有多少运气调试咕噜声独立。我希望能够在我的gruntfile中设置断点,并使用浏览器或IDE逐步执行代码。

我尝试了以下内容:

使用NODE-INSPECTOR的错误消息

enter image description here

所以目前节点检查员觉得它让我最接近我想要的东西。为了到达这里,我做了以下事情:

在我的grunt目录中,我运行了以下命令:

grunt node-inspector
node --debug-brk Gruntfile.js

然后从那里我去localhost:8080/debug?port=5858调试我的Gruntfile.js。但就像我上面提到的那样,只要我点击F8跳到断点,它就会因上述错误而崩溃。有没有人使用这种方法尝试调试Gruntfile有什么成功?到目前为止,我的搜索工作还没有找到一个记录完备的方法。所以希望这对未来的用户来说是有用的或有益的信息。顺便提一下,我正在使用 Windows 7 。提前谢谢。

更新

到目前为止,我已经尝试了@dylants提出的以下建议。

  1. 在位于C:\Users\khollenbeck\AppData\Roaming\npm的Windows机器上找到grunt.cmd文件。打开grunt.cmd文件并找到以下内容....

    enter image description here

  2. 这会引导我C:\Users\khollenbeck\AppData\Roaming\npm\node_modules\grunt-cli\bin,其中包含一个名为grunt的文件。从那里的文件的顶部。我将此代码#!/usr/bin/env node更改为#!/usr/bin/env node --debug-brk

  3. 执行此命令node-inspector C:\path\to\gruntfile grunt后,我得到以下内容。

    Node Inspector v0.7.3 Visit http://localhost:8080/debug?port=5858 to start debugging

  4. 接下来,我从grunt目录运行grunt命令。 (让服务器在原始命令提示符下运行

  5. 从这里开始,我希望Gruntfile.js出现在chrome dev工具的源代码中。我也希望能够从那里设置断点。这没有发生。相反,它只是在Gruntfile中一直运行,而不会在浏览器中中断或加载。

    修改

      啊,我看到我做错了什么。出于某种原因,我做了节点--debug-brk   没有添加路径   C:\ Users \用户khollenbeck \应用程序数据\漫游\故宫\ node_modules \咕噜-CLI \ BIN \呼噜声。   它现在正在工作,非常感谢。我为拖延这个而道歉   太长。但希望这对其他Windows用户有用   未来。

3 个答案:

答案 0 :(得分:11)

这可以通过在调试模式下启动node-inspector并启动grunt来实现。完成后,您可以像往常一样逐步浏览Chrome中的Gruntfile.js

启动node-inspector

如果您还没有node-inspector,请使用npm install -g node-inspector进行安装。然后在一个终端/命令提示符下启动它:

$ node-inspector
Node Inspector v0.7.3
Visit http://127.0.0.1:8080/debug?port=5858 to start debugging.

在调试模式下运行grunt

接下来,找到您的grunt脚本。这是从命令行运行grunt命令时执行的JavaScript文件。如果您全局安装了grunt(使用npm install -g grunt-cli),那么对于* nix或Mac计算机,它很可能位于/usr/bin/usr/local/bin。对于Windows计算机,grunt.cmd文件指向grunt脚本所在的位置。 grunt脚本最有可能位于C:\Users\<username>\AppData\Roaming\npm\node_modules\grunt-cli\bin

找到脚本的位置后,使用node --debug-brk执行此脚本,从而在调试模式下启动grunt,打破文件中的第一行代码。例如,假设grunt脚本位于/usr/bin/grunt

$ node --debug-brk /usr/bin/grunt 
debugger listening on port 5858

当你看到debugger listening on port 5858作为输出时,你会知道你成功了,这意味着grunt脚本已经暂停执行,并且正在等待调试器逐步完成。

使用Chrome调试

现在启动Chrome并将其指向http://127.0.0.1:8080/debug?port=5858。在Chrome中,打开并在Gruntfile.js中添加断点,然后像往常一样逐步完成。

答案 1 :(得分:8)

要启动节点检查器,您不应再传递--debug或--debug-brk标志。您可以使用node-inspector和文件路径直接启动它,就像您通常使用node命令开始执行脚本一样。这应该在chrome中自动打开webkit检查器,并在第一行执行时暂停。您可以从这里插入断点并正常调试。

如上所述,要调试grunt任务,您必须在Mac中使用$ which grunt找到Grunt可执行文件,不确定Windows。然后你必须复制该路径,并将其用作传递给node-debug的第一个参数,第二个参数是任务(如果需要,你也可以包括grunt目标)。例如,它可能看起来像:

node-debug /usr/local/bin/grunt concat:dev

从这里你可以调试将为concat任务执行的任何文件。这包括grunt-concat的依赖关系,它将在其本地node_modules中。因为我发现复制并粘贴我的可执行路径很烦人,所以我制作了最简单的Node cli来抽象出来https://github.com/dtothefp/node-build-debug。如果您全局安装(当然还有全局安装的node-inspector),您可以:

$ build-debug grunt concat:dev

答案 2 :(得分:5)

在较新的Node版本中(我认为从6.3开始),有一个内置的调试器/检查器:

https://nodejs.org/en/docs/inspector/

只需启动这样的Grunt应用程序(在Windows上):

node --inspect %APPDATA%\npm\node_modules\grunt-cli\bin\grunt

如果您安装Chrome扩展程序Node Inspector Manager,DevTools将自动打开。

否则,您可以打开chrome://inspect并手动连接到调试会话。