← 中文资源

简体中文版本

用 ANSI 码为 CLI 输出着色

仅在输出到终端且未设置 NO_COLOR 时着色,尊重用户偏好并优雅降级。

阅读英文原文

目标

CLI 把颜色码写进了日志与 CI 输出,满是转义序列。本配方先检测 stdout 是否为 TTY 并遵守 NO_COLOR 约定,仅在交互式终端且未禁用时着色,再用管道验证输出无转义码;提醒着色不能替代语义标签,且可为需要颜色的 CI 提供 FORCE_COLOR 覆盖。

步骤要点

  1. 检测 TTY 并遵守 NO_COLOR 约定。
  2. 仅在交互式终端时应用颜色。
  3. 用管道验证输出不含转义序列。
  4. 为支持的 CI 提供 FORCE_COLOR 覆盖。
const useColor = process.stdout.isTTY && !process.env.NO_COLOR;
const red = (s) => (useColor ? '\x1b[31m' + s + '\x1b[0m' : s);

排错提示

  • 只看全局标志会误判,需检查实际输出流。
  • CI 支持颜色时可能被误禁,需可覆盖。
  • 颜色不利于无障碍,需保留语义标签。

适用边界

  • 终端对 ANSI 支持不一。
  • 不能替代结构化输出。