Node.js中的子进程是否可以保留彩色输出?

时间:2015-07-24 21:48:17

标签: node.js

我正在使用Liftoff编写我的第一个Node.js命令行工具。我的应用程序中的一个重要步骤是将一些文件和文件夹复制到用户的cwd。我正在使用exeq来完成此任务。它运行一系列命令:

  • B - cd到cd app gulpfile.js和package.json所在的位置
  • cwd/app/ - 安装依赖项
  • npm install - 运行gulp

从功能上讲,exeq完全符合我的要求。它按顺序执行这三个命令并成功执行。我的问题是exeq不保留彩色输出,因此来自gulpnpm install的日志是纯白色文本,这使得它们很难解析。

到目前为止,我的研究还没有找到一个替代节点包来完成工作,也没有找到一个明确的方法来保存我当前设置的彩色输出。我确实从某个人那里得到了一个导致这可能是环境问题,我需要一种方法来告诉exeq它是在支持彩色输出的环境中。不幸的是,exeq似乎没有任何选项或参数,所以我不知道如何去做。

这是节点子进程的限制,还是有办法保留彩色输出?

1 个答案:

答案 0 :(得分:17)

所以gulp例如uses一个名为chalk的模块来记录格式化输出。 chalk反过来,uses一个名为supports-color的模块,它执行实际的终端类型检测。当chalkrequire() d时,它会自动使用supports-color来确定可用的颜色数量。

通常情况下,supports-color会报告在使用默认stdio选项作为子进程执行进程时没有颜色可用,因为stdout 是tty in那种情况下,它是一个管道。幸运的是,supports-colors提供了几个选项来覆盖该检查:

  • supports-colors uses一个名为has-flag的模块,用于查找process.argv--color--colors条目以强制执行基本(16)颜色支持。您还可以使用--color=256强制256种颜色和--color=full之类的参数强制使用真彩色模式(1600万种颜色)。因此,例如你应该像gulp --colors一样调用gulp来获得基本的颜色输出。

  • supports-colorschecks用于名为FORCE_COLOR的环境变量,如果检测到不支持任何颜色,则会强制执行基本颜色支持。

    < / LI>

对于npm,您可以通过几种不同的方式强制颜色输出。附加--color always命令行参数或在环境中设置NPM_CONFIG_COLOR=always(您可以通过在传递给env / child_process.exec()的选项中设置child_process.spawn()来执行此操作