如何使用节点调试带有断点的Gruntfile
所以我花了几天时间试图让这个工作没有运气。 我发现的大多数解决方案似乎对于调试节点应用程序“很好”。 但是我没有太多的运气调试咕噜声。 我希望能够在gruntfile中设置断点,并通过浏览器或IDE浏览代码。
我已经尝试了以下内容:
错误信息使用节点检查器
所以目前节点检查员觉得它让我离我想要的最近。 为了达到这里,我做了以下几件事:
从我的grunt目录中运行以下命令:
grunt node-inspector
node --debug-brk Gruntfile.js
然后从那里我去了localhost:8080/debug?port=5858
来调试我的Gruntfile.js。 但就像我上面提到的那样,只要我按F8跳到断点就会崩溃,出现上述错误。 有没有人使用这种方法试图调试Gruntfile? 从我的搜索工作中,我还没有找到一个很好的文档记录方式。 所以希望这将成为未来用户的有用或有益的信息。 另外我正在使用Windows 7 。 提前致谢。
更新:
我已经尝试过以下建议的@dylants,但没有成功。
在位于C:UserskhollenbeckAppDataRoamingnpm
Windows计算机上找到grunt.cmd文件。 打开grunt.cmd
文件,发现以下内容....
这导致我到C:UserskhollenbeckAppDataRoamingnpmnode_modulesgrunt-clibin
其中包含一个名为grunt
的文件。 然后从文件的顶部。 我将此代码#!/usr/bin/env node
更改为#!/usr/bin/env node --debug-brk
在执行这个命令后, node-inspector C:pathtogruntfile grunt
得到了以下内容。
Node Inspector v0.7.3 Visit http://localhost:8080/debug?port=5858 to start debugging
接下来我从grunt dir运行grunt
命令。 (让服务器在原始命令提示符下运行)
从这里我预计Gruntfile.js将出现在chrome dev工具的源代码中。 我也希望能够从那里设置断点。 这没有发生。 相反,它只是通过Gruntfile运行,而不会在浏览器中破坏或加载。
编辑:
啊,我明白我做错了什么。 出于某种原因,我没有添加路径C: Users khollenbeck AppData Roaming npm node_modules grunt-cli bin grunt来实现节点--debug-brk。 它的工作现在,非常感谢。 我很抱歉拖延这么久。 但希望这对未来的其他Windows用户有用。
这可以通过启动node-inspector
并在调试模式下启动grunt
来完成。 完成之后,您可以Gruntfile.js
在Chrome浏览器中浏览Gruntfile.js
。
启动节点检查器
如果您还没有node-inspector
,请使用npm install -g 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
),那么它很可能位于/usr/bin
或/usr/local/bin
用于* nix或Mac机器。 对于Windows机器, grunt.cmd
文件指向grunt
脚本所在的位置。 最有可能的是grunt
脚本位于C:Users<username>AppDataRoamingnpmnode_modulesgrunt-clibin
。
找到脚本的位置后,使用node --debug-brk
来执行此脚本,从而以调试模式启动grunt,以打破文件中第一行代码。 例如,想象一下grunt脚本位于/usr/bin/grunt
:
$ node --debug-brk /usr/bin/grunt
debugger listening on port 5858
当你看到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
打开并添加断点,然后像往常一样逐步完成。
要启动节点检查器,您不应再传递--debug或--debug-brk标志。 您可以使用node-inspector
和文件路径直接启动它,就像通常使用node
命令开始执行脚本一样。 这应该会自动在chrome中打开webkit检查器,并在执行的第一行暂停。 你可以从这里插入你的断点和正常调试。
如上所述,要调试一个咕噜任务,你必须在Mac中使用$ which grunt
来找到你的Grunt可执行文件,而不是关于Windows。 然后,您必须复制该路径,并将其用作传递给node-debug的第一个参数,第二个参数是任务(如果需要,还可以包含grunt目标)。 例如,它可能看起来像:
node-debug /usr/local/bin/grunt concat:dev
从这里你可以调试任何将为concat任务执行的文件。 这包括将在其本地node_modules中的grunt-concat的依赖关系。 因为我发现它复制和粘贴我的可执行文件路径令人恼火,所以我使用最简单的Node cli将它抽象出去https://github.com/dtothefp/node-build-debug。 如果您在全球安装(当然还有全局安装的节点检查器),您可以:
$ build-debug grunt concat:dev
在较新的Node版本(从6.3开始,我认为),有一个内置的调试器/检查器:
https://nodejs.org/en/docs/inspector/
只需像这样开始你的Grunt应用程序(在Windows上):
node --inspect %APPDATA%npmnode_modulesgrunt-clibingrunt
如果您安装Chrome扩展节点检查器管理器 ,DevTools将自动打开。
否则,您可以打开chrome://inspect
并手动连接到调试会话。