IntelliJ IDEA 14和angular-fullstack调试设置挂在并发:服务器上

时间:2014-12-29 21:59:24

标签: intellij-idea

我已经看过这篇文章:Server hangs on Running "concurrent:server" (concurrent) task但是那里的解决方案似乎并不是我所看到的来源。我想知道它是否是IntelliJ的一个错误,但我想在提交给Jetbrains之前我会问。

我使用全新的,新建的Yeoman angular-fullstack并尝试调试app.js或seed.js例如 - 在服务器启动后立即运行的东西。因此,我需要使用node --debug-brk启动服务器,以便服务器等待,直到我手动连接调试器或以IDEA立即连接其调试器的方式启动服务器。

从运行grunt serve的命令行运行得很好。但是,在IDEA中执行与调试配置相同的操作会挂起concurrent:server任务。

这是100%开箱即用的angular-fullstack,但我还是将代码放在这里供参考。

这里是" serve"的一部分。在没有指定目标时运行的任务,如我在这里谈论的情况:

grunt.task.run([
  'clean:server',
  'env:all',
  'injector:sass',
  'concurrent:server',
  'injector',
  'wiredep',
  'autoprefixer',
  'express:dev',
  'wait',
  'open',
  'watch'
]);

这里是Gruntfile的concurrent部分,其中的内容被挂断了:

 concurrent: {
      server: [
        'sass',
      ],
      test: [
        'sass',
      ],
      debug: {
        tasks: [
          'nodemon',
          'node-inspector'
        ],
        options: {
          logConcurrentOutput: true
        }
      },
      dist: [
        'sass',
        'imagemin',
        'svgmin'
      ]
    }

下面有更多详细信息,但我现在唯一可行的方法是将任务中的concurrent:server行更改为sass,以便只使用并发服务器部分中的内容无论如何。那个

所以现在我有以下选项,以及我遇到的相关问题:

方法#1:通过运行grunt serve的IDEA NodeJS调试配置启动服务器

  • IDEA使用--debug-brk参数,以便服务器等待附加调试器
  • IDEA的调试器立即连接,因此服务器可以继续快速启动
  • 服务器停在"并发:服务器"任务。我已经让它跑了6米+没有任何变化。
  • 我使用相同的命令行和相同的行为通过IDEA调试配置之外的命令行完成相同的操作,唯一的区别是我手动将IDEA的调试器连接到正在运行的Node实例。
  • 好像并发的东西搞砸了IDEA?我已经尝试将并发的东西从那里拉出来(在这种情况下是一个sass任务)并且工作正常但是在底部

这是此方法的控制台输出:

/usr/local/bin/node --debug-brk=65524 --nolazy --debug /usr/local/bin/grunt serve
debugger listening on port 65524
Running "serve" task

Running "clean:server" (clean) task

Running "env:all" (env) task

Running "injector:sass" (injector) task
Missing option `template`, using `dest` as template instead
Injecting scss files (3 files)
>> Nothing changed

Running "concurrent:server" (concurrent) task

方法#2:使用#1中的相同调试配置,执行"运行"而不是"调试"

  • IDEA在命令行中没有使用--debug-brk,也没有使用--nolazy,第一行是:/usr/local/bin/node /usr/local/bin/grunt serve
  • Grunt在命令行上运行,但没有连接调试器,也没有给我时间。

除此之外,我完全正常工作的唯一方法是明确更改任务的concurrent:server部分。我担心的是,如果我确实想要并发功能,我真的无法在不展开整个并发任务的情况下调试应用程序的早期部分。

我的另一个选择是创建一个特定于IntelliJ的新任务,将其展开,但这仍然是一个黑客...

这是一个IntellliJ错误还是正在发生的事情?

1 个答案:

答案 0 :(得分:1)

问题是由Grunt产生子任务的方式引起的。默认情况下,生成的子进程使用与父进程相同的调试端口 - 因此,分叉进程被挂起并且应用程序停止运行'。例如,请参阅How to fork a child process that listens on a different debug port than the parent

请尝试添加

process.execArgv = [];

位于Gruntfile.js的顶部