Node.js 如何改变控制台输出的文字颜色?

Node.js 控制台变色用 ANSI 转义码:如 \x1b[31m 红色、\x1b[32m 绿色,结尾用 \x1b[0m 复位。不想手写转义码可用 chalk 库。本文给出颜色表、组合样式与 chalk 用法。

最佳实践
Node.js 事件循环与异步任务示意

**用 ANSI 转义码:\x1b[31m 开头变色,\x1b[0m 结尾复位。**零依赖,Node 原生支持。

基础用法

const red = '\x1b[31m';
const green = '\x1b[32m';
const reset = '\x1b[0m';

console.log(red + '这是红色文字' + reset);
console.log(green + '这是绿色文字' + reset);

千万别忘了 reset——不复位的话,后面所有输出(包括别人的日志)都会带着这个颜色。

常用颜色码表

颜色 前景色码 背景色码
黑 \x1b[30m \x1b[40m
红 \x1b[31m \x1b[41m
绿 \x1b[32m \x1b[42m
黄 \x1b[33m \x1b[43m
蓝 \x1b[34m \x1b[44m
品红 \x1b[35m \x1b[45m
青 \x1b[36m \x1b[46m
白 \x1b[37m \x1b[47m

样式码:\x1b[1m 加粗、\x1b[4m 下划线、\x1b[7m 反色。可以叠加:\x1b[1m\x1b[33m 是加粗黄色。

更好的选择:chalk

手写转义码可读性差,项目里推荐 chalk:

npm install chalk
import chalk from 'chalk';

console.log(chalk.red('红色'));
console.log(chalk.green.bold('加粗绿色'));
console.log(chalk.bgBlue.white('蓝底白字'));

chalk 还会自动检测终端是否支持颜色(重定向到文件时自动禁用转义码),这点手写代码很容易踩坑。

常见问题(FAQ)

Q:为什么输出重定向到文件后全是乱码?
ANSI 码被写进了文件。用 chalk(自动检测 TTY),或自己判断 process.stdout.isTTY 再决定是否加颜色。

Q:Windows 终端支持吗?
Windows 10 1511+ 的 cmd 和 PowerShell、Windows Terminal 都支持 ANSI 转义码,现代 Node 版本无需特殊处理。

Q:日志库需要颜色吗?
生产环境日志建议输出纯文本或 JSON(颜色码会干扰日志解析),颜色只用于本地开发时的可读性。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台