将节点检查器与Grunt任务一起使用

时间:2012-06-23 16:08:46

标签: javascript debugging node.js node-inspector gruntjs

有人使用node-inspectorGrunt进行应用程序调试吗?如果没有,你能推荐一个基于Grunt的应用程序的调试工具吗?

我正在使用nodejs作为服务器端应用,我Grunt使用分离的任务(这是因为用户可以单独执行任务)。

7 个答案:

答案 0 :(得分:135)

要在debug中运行grunt,您需要将grunt脚本明确地传递给节点:

node-debug $(which grunt) task

并在您的任务中添加debugger;行。然后node-inspector将打开带有调试工具的浏览器。

编辑2014年2月28日

node-inspector添加了命令node-debug,该命令以--debug状态启动节点并打开浏览器到node-inspector页面,当它到达第一个debugger时停止1}}行或设置断点。

编辑2015年1月30日

在Windows上,事情变得更复杂。有关说明,请参阅@ egluhotorenko的答案。

答案 1 :(得分:39)

Windows解决方案

运行

node --debug-brk c:\Users\username\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt taskname

来自您Gruntfile.js目录中的cmd。不要忘记将debugger;行放在必要的地方。

答案 2 :(得分:7)

要进行调试,我们必须修改bin下的grunt文件。在我的机器上,grunt全局安装,所以我去了/ usr / local / lib / node_modules / grunt / bin 我打开文件并进行了修改:

#!/usr/bin/env node

#!/usr/bin/env node --debug-brk

- debug-brk将在javascript运行的第一行中断。

单独这样做是不够的,因为您将无法在节点检查器的下拉列表中找到您的grunt任务js文件,因此您必须修改您对调试感兴趣的文件通过在您希望断点发生的地方添加debugger;。 现在,您可以在第一次休息后点击继续,然后就可以查看debugger;

非常kludgy,但这是我到目前为止找到的唯一方法。

答案 3 :(得分:6)

我最近创建了grunt-node-inspector来轻松配置节点检查器和其他grunt工作流程,请查看:https://github.com/ChrisWren/grunt-node-inspector

以下是Gruntfile的一部分,它说明了如何使用grunt-node-inspector,grunt-concurrent和grunt-shell调试grunt任务:https://github.com/CabinJS/Cabin/blob/master/Gruntfile.js#L44-L77

答案 4 :(得分:4)

我已经完成了运行我的应用并启动node-inspector的任务。 它远比当前命题好,你只需要在gruntfile中添加这个任务:

  grunt.registerTask('debug', 'My debug task.', function() {
        var done = this.async();
        grunt.util.spawn({
            cmd: 'node',
            args: ['--debug', 'app.js'],
            opts: {
                //cwd: current workin directory
            }
        },
        function (error, result, code) {
            if (error) {
                grunt.log.write (result);
                grunt.fail.fatal(error);
            }
            done();
        });
        grunt.log.writeln ('node started');
        grunt.util.spawn({
            cmd: 'node-inspector',
            args: ['&'],
            opts: {
                //cwd: current workin directory
            }
        },
        function (error, result, code) {
            if (error) {
                grunt.log.write (result);
                grunt.fail.fatal(error);
            }
            done();
        });
        grunt.log.writeln ('inspector started');
    });

答案 5 :(得分:3)

Great answers here. In 2017, now you can do

node --inspect --debug-brk $(which grunt) taskName

Which prints something like.

To start debugging, open the following URL in Chrome: chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/232652c3-f63c-4b00-8de9-17dfad5db471

Open that URL in chrome, and you're good to go!

I'm using Node 7.3.0 and I'm on Mac. You might have to follow some of the advice in other posts to get it going on Windows.

答案 6 :(得分:1)

2019更新

  • 如果要在调试模式下启动grunt任务并在第一行中断:

    node --inspect-brk $(which grunt) taskName

  • 如果要在特定端口上以调试模式启动grunt任务:

    node --inspect-brk=8080 $(which grunt) taskName

  • 如果要将VSCODE附加到运行grunt调试会话的节点进程,请在vscode中使用以下配置:

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [

    {
      "type": "node",
      "request": "attach",
      "name": "Attach by port IP 5656",
      "port": 8080
    }
  ]
}