Fre*_*dyC 5 javascript node.js coffeescript nodemon
我不确定这是否纯粹是 Windows 问题。我没有选择在其他地方进行测试。鉴于这个非常简单的代码(Coffeescript):
console.log('Calling console.log')
console.error('Calling console.error')
console.log('Calling console.log second time - fails')
console.error('Calling console.error second time - fails')
nonexisting.throwError()
Run Code Online (Sandbox Code Playgroud)
直接用它运行coffee app.coffee它效果很好,我得到了这个:
Calling console.log
Calling console.error
Calling console.log second time - fails
Calling console.error second time - fails
ReferenceError: nonexisting is not defined
....
Run Code Online (Sandbox Code Playgroud)
然而跑步nodemon app.coffee给了我这样的结果:
17 Mar 20:38:56 - [nodemon] starting `coffee.cmd server.coffee`
Calling console.log
Calling console.error
17 Mar 20:38:56 - [nodemon] app crashed - waiting for file changes before starting...
Run Code Online (Sandbox Code Playgroud)
不仅根本没有异常信息,而且后面的日志消息也因为某种原因被吞掉了。在更复杂的情况下,我没有办法真正找到崩溃的原因。我尝试调试,但一切似乎都很好,调用了 console.log/error ,但由于某种原因它没有显示。异常被 Coffeescript 捕获并直接发送到 stderr。
我想使用调试实用程序在控制台的开发过程中获得详细的输出,并更容易发现问题。但对于这个麻烦制造者来说这是不可能的。一旦发生未捕获的异常,我必须停止 nodemon 并手动运行整个过程以查找错误。解决方案的所有优雅都随之消失:(
任何人都知道可能导致此问题的原因以及是否有可能的解决方案?
Windows 7 64位节点0.10.26 Nodemon 1.0.15 Coffeescript 1.7.1
这些消息被抑制,因为该进程是使用以下方式生成的:
child_process.spawn('coffee.cmd', ['server.coffee'], { stdio: ['pipe', 'pipe', 'pipe']);
Run Code Online (Sandbox Code Playgroud)
特别是pipeonstderr是问题所在,因为当孩子退出时,管道已满(或似乎来自第一个console.error),因此当孩子死亡时,下一条消息不会放入管道中。
我已经更新了 nodemon,使其在使用 时更加智能pipe,因为在大多数情况下,使用process.stdoutonstdio效果很好,并且还意味着这个原始示例脚本会按照您的预期回显错误。
您提交的问题也已在 nodemon@1.0.17 中关闭
我应该补充一点,这个SO问题的标题具有误导性(它读起来好像nodemon隐藏了所有控制台输出) - 它没有隐藏控制台输出 - 当进程崩溃时它正在丢失控制台输出。尽管如此,它已经修复了 - 耶!
| 归档时间: |
|
| 查看次数: |
6923 次 |
| 最近记录: |