Node.js colorful 终端彩色输出用法
写构建脚本的时候,日志全是一样的白字很难看出重点。任务耗时、报错信息、提示语混在一起滚过去,出问题了得一行行找。给关键信息上个颜色就好多了——耗时标红、提示标蓝,扫一眼就知道哪里该看。
终端着色的底层是 ANSI 转义序列,比如 \x1b[31m 开始红色、\x1b[0m 复位。手写这些码可读性太差,所以一般用现成的库包一层。colorful 这个包的做法比较特别:它不是提供一堆函数让你包裹字符串,而是直接给 String.prototype 挂了一个 to 属性,让你用链式取值的方式描述样式,最后取 .color 拿到带转义码的结果。
使用方法
调用 colorful() 完成原型注入,之后所有字符串都能用 .to.样式.color 的形式着色。样式名可以链式叠加,比如 .to.bold.red.color 就是加粗的红色:
require('colorful').colorful();
require('colorful').isatty = true;
console.log(
`gulp task ${toRun} consume time:${
`${time_consuming.toFixed(2)} s`.to.bold.red.color
}`,
);
console.log(
'ComingSoon execute build config,Please Loading...'.to.bold.blue.color,
);
这里的 isatty = true 是个关键点。库默认会检测输出目标是不是真正的终端(TTY),如果发现输出被重定向到文件或者管道,就自动把颜色关掉,避免文件里塞满乱码。但在 gulp、CI 这类场景下,进程的 stdout 常常不被识别为 TTY,颜色就没了。手动把 isatty 置为 true 相当于强制开启着色,绕过这个检测。反过来说,如果你要把日志落盘,就不该开这个开关。
可用参数
样式分两类。第一行是文字修饰,第二行是颜色,带 _bg 后缀的是背景色:
bold faint italic underline blink overline inverse conceal strike
yellow yellow_bg blue blue_bg magenta magenta_bg cyan cyan_bg white white_bg grey gray black black_bg red red_bg green green_bg
实际能用上的没这么多。bold、underline 基本各个终端都支持,blink(闪烁)、conceal(隐藏)、overline(上划线)取决于终端实现,很多终端直接忽略。颜色方面我一般只用红(错误)、黄(警告)、绿(成功)、蓝或青(普通提示)这几个,语义清楚也不刺眼。
背景色适合做那种整块高亮的标题栏,比如 ' BUILD '.to.white.red_bg.color,白字红底,比单纯的红字更醒目。但别滥用,一屏幕彩块反而看不清。另外颜色搭配要考虑深色和浅色两种终端主题,black 在深色背景下几乎看不见,white 在浅色背景下同理,涉及这两个颜色时最好配上对应的背景色一起用。

还没有留言,来发表第一条吧~