节点.js生成颜色
Node.js spawn with colors?
我正在使用摩卡来测试我的应用程序。 目前,我正在使用Makefiles,但我想切换到Cakefiles。当我通过 Cake 运行测试时,来自 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
的情况下通过颜色?
问题是,像许多命令行程序一样,如果 mocha 看到它输出到的东西不是终端,它将禁用颜色输出。这样做是因为否则,如果您通过管道传输到文件,该文件将充满颜色控制序列以及显示的文本。
所以问题不在于节点,而在于摩卡。在这种情况下,解决方案是摩卡有一个--colors
参数来强制颜色输出。所以这应该有效。
task 'test', 'test project', (options) ->
fetchTestFiles './test', (err,files) ->
files.unshift '--colors'
mocha = spawn 'mocha', files
mocha.stdout.pipe(process.stdout, end: false)
通常,当您生成进程时,会为子级的 stdin、stdout 和 stderr 分配新的数据流。这意味着摩卡将检查这些流,查看它们不是终端,并禁用颜色。customFds
工作的原因是它将节点在process.stdin
、process.stdout
和process.stderr
处获得的确切流传递给子进程,因此当 mocha 检查流是否是终端时,它们将是因为流是实际的终端。
我知道你正在寻找另一种解决方案,但我认为你不会找到一个。你要么明确告诉摩卡使用颜色,要么摩卡需要认为它的流是终端,唯一真正的方法是通过 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
甚至包括一个方便的"inherit"值,用于将父级的 stdout、stdin、stdrr 和 stderr 的文件描述符传递给生成的进程。使用"stdio",原始调用...
mocha = spawn 'mocha', files, customFds: [0..2]
。会变成...
mocha = spawn 'mocha', files, stdio: 'inherit'
正如 loganfsmyth 所解释的那样,这会将确切的流传递给子进程,从而不需要任何其他代码来重定向 mocha 的输出。
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 更改使用Chart.js创建的图表中的轴线颜色
- 我如何制作一个JS函数,它可以从相似的原始颜色双向更改为某个颜色
- JS幻灯片与CSS背景颜色变化
- Chart.js条形图:网格颜色和隐藏标签
- JS-颜色选择器只有第一个工作
- 使用JS将页面中的每个字母设置为随机颜色.为什么在页面的每个打开标记之前总是有一组额外的span标记
- Highcharts.js设置用于更改列颜色的阈值
- charts js更改折线图轴的字体大小/颜色和背景线
- Three.js CSG如何更改结果's的材质和颜色
- d3.js轴标签-颜色不变
- ext js 将面板的颜色更改为渐变
- 如何在动态 js 中更改一组节点的颜色
- 动态更改敲除js中一行的颜色
- Three.js透明对象和颜色更改(load.obj+.mtl)
- 为什么可以't我在highstocks.js中的蜡烛图中获得超过55个条形的单个条形颜色
- 获取图像的第一个像素颜色(JS/jQuery)
- 更改每个级别的背景颜色(js游戏)
- 使用JavaScript改变SVG路径的颜色(JS颜色库)
- 从数组向图表添加标签和颜色.JS