Node.js 如何改变控制台输出的文字颜色?
Node.js 控制台变色用 ANSI 转义码:如 \x1b[31m 红色、\x1b[32m 绿色,结尾用 \x1b[0m 复位。不想手写转义码可用 chalk 库。本文给出颜色表、组合样式与 chalk 用法。
**用 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(颜色码会干扰日志解析),颜色只用于本地开发时的可读性。