Node.js产生的颜色?

我正在使用摩卡来testing我的应用程序。 目前,我正在使用Makefiles,但是我想切换到Cakefiles。 当我通过Cake运行我的testing时,来自Mocha的颜色不会显示在控制台上。

这是一个例子:

task 'test', 'test project', (options) -> fetchTestFiles './test', (err,files) -> mocha = spawn 'mocha', files mocha.stdout.pipe(process.stdout, end: false) 

现在,我试着这样做:

 task 'test', 'test project', (options) -> fetchTestFiles './test', (err,files) -> mocha = spawn 'mocha', files, customFds: [0..2] 

这工作,但是Node.js文档声称customFds已被弃用。 有没有办法通过颜色而不使用customFds

问题是,像许多命令行程序一样,摩卡咖啡如果看到输出的东西不是terminal,就会禁用彩色输出。 这样做是因为否则,如果您将文件传送到文件,文件将与显示的文本一起充满色彩控制序列。

所以问题不在于节点,而在于摩卡。 在这种情况下的解决scheme是摩卡有一个强制颜色输出的色彩参数。 所以这应该工作。

 task 'test', 'test project', (options) -> fetchTestFiles './test', (err,files) -> files.unshift '--colors' mocha = spawn 'mocha', files mocha.stdout.pipe(process.stdout, end: false) 

通常当你产生一个进程时,新的数据stream被分配给孩子的stdin,stdout和stderr。 这意味着摩卡将检查这些stream,看看它们不是terminal,并禁用颜色。 customFds工作的原因是,它将节点在process.stdinprocess.stdoutprocess.stderr处的确切customFdssubprocess,所以当mocha检查stream是否为terminal时,它们将是因为stream是实际的terminal。

我知道你正在寻找另一个解决scheme,但我不认为你会find一个解决scheme。 你要么明确地告诉摩卡使用颜色,要么摩卡需要认为它是stream媒体terminal,唯一真正的方法是通过customFds ,这已被废弃,正如你所说的。

Node.js文档声称customFds已被弃用。 有没有办法通过颜色而不使用customFds

较新版本的Node指定带有spawn options对象的stdio属性的文件描述符。 http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options

stdio甚至包括一个方便的“inheritance”值,用于将stdout,stdin和stderr的父级文件描述符传递给派生进程。 使用“stdio”,原来的电话…

 mocha = spawn 'mocha', files, customFds: [0..2] 

…会成为…

 mocha = spawn 'mocha', files, stdio: 'inherit' 

正如loganfsmyth所解释的那样,这会将确切的stream传递给subprocess,从而不需要任何额外的代码来redirect摩卡的输出。