我已经看过这篇文章: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调试配置启动服务器
这是此方法的控制台输出:
/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中的相同调试配置,执行"运行"而不是"调试"
--debug-brk
,也没有使用--nolazy
,第一行是:/usr/local/bin/node /usr/local/bin/grunt serve
除此之外,我完全正常工作的唯一方法是明确更改任务的concurrent:server
部分。我担心的是,如果我确实想要并发功能,我真的无法在不展开整个并发任务的情况下调试应用程序的早期部分。
我的另一个选择是创建一个特定于IntelliJ的新任务,将其展开,但这仍然是一个黑客...
这是一个IntellliJ错误还是正在发生的事情?
答案 0 :(得分:1)
问题是由Grunt产生子任务的方式引起的。默认情况下,生成的子进程使用与父进程相同的调试端口 - 因此,分叉进程被挂起并且应用程序停止运行'。例如,请参阅How to fork a child process that listens on a different debug port than the parent。
请尝试添加
process.execArgv = [];
位于Gruntfile.js的顶部