我正在使用Liftoff编写我的第一个Node.js命令行工具。我的应用程序中的一个重要步骤是将一些文件和文件夹复制到用户的cwd。我正在使用exeq来完成此任务。它运行一系列命令:
B
- cd到cd app
gulpfile.js和package.json所在的位置cwd/app/
- 安装依赖项npm install
- 运行gulp 从功能上讲,exeq完全符合我的要求。它按顺序执行这三个命令并成功执行。我的问题是exeq不保留彩色输出,因此来自gulp
和npm install
的日志是纯白色文本,这使得它们很难解析。
到目前为止,我的研究还没有找到一个替代节点包来完成工作,也没有找到一个明确的方法来保存我当前设置的彩色输出。我确实从某个人那里得到了一个导致这可能是环境问题,我需要一种方法来告诉exeq它是在支持彩色输出的环境中。不幸的是,exeq似乎没有任何选项或参数,所以我不知道如何去做。
这是节点子进程的限制,还是有办法保留彩色输出?
答案 0 :(得分:17)
所以gulp
例如uses一个名为chalk
的模块来记录格式化输出。 chalk
反过来,uses一个名为supports-color
的模块,它执行实际的终端类型检测。当chalk
为require()
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-colors
还checks用于名为FORCE_COLOR
的环境变量,如果检测到不支持任何颜色,则会强制执行基本颜色支持。
对于npm,您可以通过几种不同的方式强制颜色输出。附加--color always
命令行参数或在环境中设置NPM_CONFIG_COLOR=always
(您可以通过在传递给env
/ child_process.exec()
的选项中设置child_process.spawn()
来执行此操作