101

有人使用带有Grunt的节点检查器进行应用程序调试吗?如果没有,你能推荐一个基于 Grunt 的应用程序的调试工具吗?

我正在为服务器端应用程序使用nodejs,并且我让Grunt使用单独的任务(这是因为用户可以单独执行任务)。

4

7 回答 7

135

要在调试中运行 grunt,您需要将 grunt 脚本显式传递给节点:

node-debug $(which grunt) task

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

编辑 2014 年 2 月 28 日

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

编辑 2015 年 1 月 30 日

在 Windows 上,事情要复杂一些。有关说明,请参阅@e.gluhotorenko 的答案。

于 2012-10-05T03:56:40.510 回答
39

视窗解决方案

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

从目录中的 cmd 与您的Gruntfile.js. 不要忘记把debugger;线放在必要的地方。

于 2012-11-18T18:12:08.753 回答
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 task js 文件,因此您必须通过添加debugger;where来修改您有兴趣调试的文件你希望断点发生。现在你可以在第一次休息后点击继续,你会在你的debugger;线上休息

相当笨拙,但这是我迄今为止找到的唯一方法。

于 2012-09-26T20:21:30.433 回答
6

我最近创建了 grunt-node-inspector 以轻松配置 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

于 2013-09-27T15:27:06.107 回答
4

我已经完成了运行我的应用程序并启动节点检查器的任务。它比当前的提议要好得多,您只需在 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');
    });
于 2013-09-14T06:52:19.753 回答
3

这里有很好的答案。2017年,现在你可以做到

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

打印类似的东西。

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

在 chrome 中打开那个 URL,你就可以开始了!

我正在使用 Node 7.3.0,我在 Mac 上。您可能必须遵循其他帖子中的一些建议才能使其在 Windows 上运行。

于 2017-03-22T18:46:26.160 回答
2

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
    }
  ]
}

于 2019-02-07T13:57:23.400 回答