我正在使用Liftoff编写我的第一个Node.js命令行工具。我的应用程序中的重要步骤之一是将一些文件和文件夹复制到用户的cwd中。我正在使用exeq完成此操作。它运行一系列命令:
cd app
cwd/app/
npm install
gulp
在功能上,exeq完全可以实现我想要的功能。它依次执行这三个命令并成功执行。我的问题是exeq不保留彩色输出,所以从日志中npm install和gulp是纯白色的文字,使他们非常难以解析。
到目前为止,我的研究还没有找到能够完成这项工作的替代节点程序包,也没有一种使用当前设置来保留彩色输出的清晰方法。我确实从某人那里得到了线索,这可能是环境问题,并且我需要一种方法来告诉exeq它在支持彩色输出的环境中。不幸的是,exeq似乎没有任何选项或参数,所以我不知道如何去做。
这是节点子进程的限制,还是有办法保留彩色输出?
因此gulp,例如使用一个称为chalk日志记录格式化输出的模块。chalk依次使用称为的模块supports- color进行实际的终端类型检测。当chalk是require()d时,它将自动用于supports-color确定可用的颜色。
chalk
supports- color
require()
supports-color
通常,supports-color当使用默认stdio选项将进程作为子进程执行时,将报告没有颜色可用,因为在这种情况下stdout 不是 tty,因此它是管道。不过,幸运的是,supports-colors提供了两个选项来覆盖该检查:
stdio
supports-colors
supports-colors 使用一种称为模块has-flag,寻找process.argv喜欢的条目--color,--colors等给力的基本(16),颜色支持。您还--color=256可以强制使用256种颜色,并使用参数--color=full强制使用真彩色模式(1600万种颜色)。因此,例如,您应该调用gulp gulp --colors以获得基本的颜色输出。
has-flag
process.argv
--color
--colors
--color=256
--color=full
gulp --colors
supports-colors还检查是否有一个名为的环境变量FORCE_COLOR,如果检测到不支持任何颜色,它将强制支持基本颜色。
FORCE_COLOR
对于npm,您可以通过两种不同的方式强制输出颜色。追加--color always命令行参数或NPM_CONFIG_COLOR=always在环境中设置(您可以通过设置env传递给child_process.exec()/ 的选项来实现child_process.spawn())。
--color always
NPM_CONFIG_COLOR=always
env
child_process.exec()
child_process.spawn()