webdevqa.jp.net

Gruntタスクでノードインスペクターを使用する

誰かが node-inspector with Grunt をアプリケーションのデバッグに使用しましたか?そうでない場合、Gruntベースのアプリのデバッグツールを推奨できますか?

私は nodejs をサーバー側のアプリで使用しており、 Grunt を使用して個別のタスクを使用しています(これはユーザーがタスクを個別に実行できるためです)。

101
JuanO

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からの回答を参照してください。

135
David Souther

Windowsソリューション

走る

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

Gruntfile.jsを含むディレクトリのcmdから。 debugger;行を必要な場所に置くことを忘れないでください。

39

デバッグするには、binの下のgruntファイルを変更する必要があります。私のマシンでは、gruntがグローバルにインストールされているため、/ usr/local/lib/node_modules/grunt/binに移動し、ファイルを開いて変更しました。

#!/usr/bin/env node

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

--debug-brkは、実行されたjavascriptの最初の行で中断します。

ただし、ノードインスペクタのドロップダウンでうんざりするタスクjsファイルを見つけることができないため、それだけでは十分ではありません。したがって、debugger;を追加して、デバッグするファイルを変更する必要がありますブレークポイントを発生させたい場所。これで、最初の休憩の後に継続をクリックすると、debugger;行になります

かなりぎこちないですが、それは私がこれまでに見つけた唯一の方法です。

7
user1577390

最近、grunt-node-inspectorを作成して、ノードインスペクターを残りのgruntワークフローで簡単に構成します。チェックアウト: https://github.com/ChrisWren/grunt-node-inspector

Grunt-node-inspector、grunt-concurrent、およびgrunt-Shellを使用してgruntタスクをデバッグする方法を示すGruntfileのセクションを次に示します。 https://github.com/CabinJS/Cabin/blob/ master/Gruntfile.js#L44-L77

6
ChrisWren

アプリを実行し、ノードインスペクターを起動するタスクを実行しました。現在の提案よりもはるかに優れています。このタスクを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');
    });
4
olivier dufour

ここで素晴らしい答え。 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

クロムでそのURLを開くと、準備完了です!

Node 7.3.0を使用しています。Macを使用しています。Windowsで使用するには、他の投稿のアドバイスに従う必要があります。

3
RoccoB

2019更新

  • Gruntタスクをデバッグモードで起動し、最初の行で中断する場合:

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

  • 特定のポートでデバッグモードでgruntタスクを起動する場合:

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

  • gruntのデバッグセッションを実行しているノードプロセスにVSCODEを添付する場合は、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
    }
  ]
}

2
Ze Rubeus