开发工具
English

chalk 实测:2.3 万星的终端配色库,还在手动拼 ANSI 码你就亏了

chalk 是 Node.js 生态里最流行的终端字符串样式库,GitHub 上 2.3 万星。用了三年后,我来说说它为什么值得每个 CLI 开发者拥有。

Node.jsCLI终端JavaScript开源

广告

chalk 实测:2.3 万星的终端配色库,还在手动拼 ANSI 码你就亏了

我做 CLI 工具五六年了,早年写终端输出全靠手写 \x1b[31m 这种 ANSI 转义码。颜色是有了,代码却丑得像一坨乱麻,维护起来更是噩梦。直到我遇到 chalk,才知道原来终端配色可以这么优雅。

项目背景

chalk 由 Sindre Sorhus 维护,是 Node.js 生态里事实标准的终端样式库。GitHub 上 2.3 万星,每周 npm 下载量超过 1 亿次,基本上你用的任何现代 CLI 工具底层都有它的影子。

它用 JavaScript 写成,零依赖,体积只有几 KB。License 是 MIT,最近一次更新是 2026 年 1 月,维护状态非常健康。

它到底强在哪

1. 链式调用,代码像说话

chalk 的 API 设计太舒服了。想要红色加粗文字?

import chalk from 'chalk';

console.log(chalk.red.bold('Error: 连接超时'));
console.log(chalk.green('✓ 构建成功'));
console.log(chalk.yellow.bgBlack('⚠ 警告: 配置文件未找到'));

你可以把 boldunderlineitalic 和各种颜色任意组合,链式调用读起来像自然语言。对比手写 ANSI 码:

console.log('\x1b[1m\x1b[31mError: 连接超时\x1b[0m');

后者不仅难写,忘了加 \x1b[0m 重置还会导致后续输出全部变色——这种坑我踩过无数次。

2. 支持 256 色和 True Color

除了基本的 16 色,chalk 还支持 chalk.hex('#FF8800')chalk.rgb(255, 136, 0) 这种精确颜色控制。现代终端(iTerm2、Windows Terminal、VS Code 内置终端)都能完美显示。

我常用它给不同级别的日志上不同的颜色:DEBUG 用灰色,INFO 用蓝色,WARN 用黄色,ERROR 用红色。一眼就能区分信息级别。

3. 自动检测颜色支持

chalk 会自动检测当前终端是否支持颜色。管道输出到文件时自动关闭颜色,CI 环境里也能智能适配。你不需要手动判断 process.stdout.isTTY:

import { supportsColor } from 'chalk';

if (supportsColor.stdout) {
  console.log('当前终端支持颜色输出');
}

这个特性写测试脚本时特别省心,不用担心日志文件里塞满 ANSI 转义字符。

4. 模板字符串标签

chalk 支持模板标签语法,插值起来很顺手:

const name = 'world';
console.log(chalk`Hello, {red ${name}}!`);

复杂一点的场景:

const status = 'failed';
console.log(chalk`Build {${status === 'success' ? 'green' : 'red'} ${status}}`);

5. 类型安全

chalk 自带 TypeScript 类型定义,配合现代编辑器有完整的自动补全。链式调用时每步都能看到可选的方法和属性,不用翻文档。

怎么快速用起来

npm install chalk

ES Module 用法(推荐):

import chalk from 'chalk';

console.log(chalk.blue('Hello world'));

CommonJS 用法:

const chalk = require('chalk');
console.log(chalk.blue('Hello world'));

如果你在用 chalk 5.x,它已经是纯 ESM 了,CommonJS 项目建议锁定在 4.x 版本:

npm install chalk@4

但它也不是完美的

纯 ESM 的迁移阵痛。chalk 5 改成纯 ESM 后,不少 CommonJS 项目升级时踩了坑。如果你的项目还没切 ESM,要么用动态 import,要么锁在 4.x。这个 breaking change 在社区里争议不小。

浏览器里用不了。chalk 依赖 Node.js 的 process.stdout,在浏览器或 Deno 环境需要额外适配。虽然绝大多数人用不上这个场景,但做全栈工具链时得注意。

颜色命名有点美式magenta 到底是什么颜色?cyanblue 的区别在哪?对颜色不敏感的人一开始得对照色卡。好在支持 hex,直接用 #FF0000 更直观。

性能不是顶尖。极端高频输出场景下(比如实时绘制进度条),手写 ANSI 码比 chalk 快几个百分点。但 99% 的 CLI 工具根本到不了这个瓶颈,为可读性牺牲这点性能完全值得。

跟同类工具比

colors.js:曾经的竞品,2022 年作者故意引入恶意代码导致整个社区震动。现在基本没人敢用了,chalk 成为唯一选择。

ansi-colors:API 类似,但生态和社区规模远不如 chalk。npm 周下载量只有 chalk 的零头,第三方集成也少。

picocolors:体积更小(约 2KB),性能稍好,但功能比 chalk 精简很多。如果你只需要基础颜色且极度在意体积,可以考虑它。

kleur:另一个轻量替代,功能接近 picocolors。生态同样小,大型项目里很少见。

如果你在做 npm 包或 CLI 工具,chalk 依然是默认选择——用户看到依赖里有 chalk,会觉得这个项目”靠谱”。

谁适合用

写 Node.js CLI 工具的、做构建脚本的、写自动化测试输出的、做任何需要在终端里展示信息的开发者——基本上所有 Node.js 开发者都该试试。

我现在的每个项目,从简单的脚本到完整的 CLI 框架,第一件事就是 npm install chalk。它已经成了我工具链里不可缺的一环。

总结

chalk 的 2.3 万星不是虚的。它用极其简洁的 API 解决了一个看似简单、实则繁琐的问题,而且做得足够可靠、足够优雅。

如果你还在手动拼 ANSI 转义码,或者还在用已经废弃的 colors.js,现在就是换的时候了。几行代码的投入,换来的是可读性和维护性的质变。

GitHub: https://github.com/chalk/chalk


关于作者

柳钉鱼,全栈开发者,GitHub 重度用户。过去 3 年 Star 了 900+ 仓库,这里只写我真正用过或深度调研过的工具。

📧 发现好工具想推荐?发邮件到 [email protected]

广告

相关文章