2

registerTaskこれに次の呼び出しを追加しましたGruntfile.js

grunt.task.registerTask('runDebug', 'Run the app with debug flag', function() {
  var done = this.async();
  grunt.util.spawn({
      cmd: 'node',
      args: ['--debug', './node_modules/nodemon/nodemon.js', 'index.js'],
      opts: {
        stdio: 'inherit'
      }
    }, 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 working directory
      }
    },
    function (error, result, code) {
      if (error) {
        grunt.log.write (result);
        grunt.fail.fatal(error);
      }
      done();
    });
  grunt.log.writeln ('inspector started');
});

grunt.task.registerTask('debug', ['runDebug', 'compile', 'watch']);

新しいdebugタスクは、既存のタスクに似ていserverます。ただし、grunt serverコマンドはcompilewatch、およびrunNodeタスクを実行しますが、grunt debugコマンドはタスクのみを実行しrunDebugます。

ここで何が欠けていますか?compileおよびタスクがコマンドでwatch実行されないのはなぜですか。grunt debug

4

1 に答える 1

0

あなたのコードは、複数回done()返された関数を呼び出しています。this.async()これは Grunt を混乱させる可能性があります。コールバックで直接spawned()呼び出すのではなく、独自の関数を呼び出すことをお勧めします。done()関数は次のようになります。

var expected_spawns = 2;
function spawned() {
    if (!--expected_spawns)
        done();

    if (expected_spawns < 0)
        throw new Error("too many spawns!") // Or some of Grunt's fail functions.
}

この方法done()は一度呼び出されます。

于 2014-02-13T19:47:25.373 に答える