首页 > 解决方案 > 为什么 Chalk、Node.js 包在 Windows 中无法输出正确的格式?

问题描述

Chalk文档中,只是暗示这个库在 Windows 中不能正常工作:

如果您使用的是 Windows,请帮自己一个忙,使用 Windows 终端而不是 cmd.exe。

恕我直言,这是不可接受的,因为现代开发的基本工具是带有自己终端的 IDE,因此终端高亮库不能依赖特定的终端。

从这里,我们至少有三个问题:

  1. 为什么 Chalk 不能正确输出字体/背景颜色?
  2. 如何在指定的任何终端中输出背景或字体颜色?
  3. 如果 Chalk 做不到,哪些 Node.js 实用程序可以?

我知道我不能在一个问题中提出以上所有问题,因此当前的主题集中在为什么 Chalk 不能按指定输出颜色。

console.log(
    Chalk.bgRed.bold(" Error ") + "   " + Chalk.bgRedBright(" Short title ") + "\n" +
    Chalk.red.bold("Long title. More than 2 words.") + "\n" +
    Chalk.redBright("Description") + "\n"
);

console.log(
    Chalk.bgYellow.bold(" Warning ") + "   " + Chalk.bgYellowBright(" Short title ") + "\n" +
    Chalk.yellow.bold("Long title. More than 2 words.") + "\n" +
    Chalk.yellowBright("Description") + "\n"
);

console.log(
    Chalk.bgGreen.bold(" Success ") + "   " + Chalk.bgGreenBright(" Short title ") + "\n" +
    Chalk.green.bold("Long title. More than 2 words.") + "\n" +
    Chalk.greenBright("Description") + "\n"
);

console.log(
    Chalk.bgBlue.bold(" Info ") + "   " + Chalk.bgBlueBright(" Short title ") + "\n" +
    Chalk.blue.bold("Long title. More than 2 words.") + "\n" +
    Chalk.blueBright("Description") + "\n"
);

console.log(
    Chalk.bgCyan.bold(" Info ") + "   " + Chalk.bgCyanBright(" Short title ") + "\n" +
    Chalk.cyan.bold("Long title. More than 2 words.") + "\n" +
    Chalk.cyanBright("Description") + "\n"
);

console.log(
    Chalk.bgMagenta.bold(" Info ") + "   " + Chalk.bgMagentaBright(" Short title ") + "\n" +
    Chalk.magenta.bold("Long title. More than 2 words.") + "\n" +
    Chalk.magentaBright("Description") + "\n"
);

console.log(
    Chalk.bgWhite.bold(" Info ") + "   " + Chalk.bgWhiteBright(" Short title ") + "\n" +
    Chalk.white.bold("Long title. More than 2 words.") + "\n" +
    Chalk.whiteBright("Description") + "\n"
);

IntellIJ IDEA,Monokai 颜色主题:

在此处输入图像描述

  1. 对于每个cosole.log(),“长标题。超过 2 个单词。” 和“描述”具有相同的颜色。
  2. 有些bg**s 比bg**Bright!
  3. bold除了 white 之外的所有s 都被忽略了。
  4. 字体颜色已在定义背景颜色的位置自动设置。我没有问这个,有时字体几乎不可读。

命令

稍微好一点,但大部分问题仍然存在。

在此处输入图像描述

默认 Windows 终端

与上面的相比,还不错。

在此处输入图像描述

标签: node.jsterminalconsolechalk

解决方案


Chalk 无法在其中显示颜色,cmd.exe因为它依赖于ANSI 转义序列,而cmd.exe. 在较新版本的 Windows 10 中,这似乎是可能的,但必须激活。还有一些工具可以在旧版本上使用它。您可以在这个 SO 问题中找到很多有用的信息:如何使 win32 控制台识别 ANSI/VT100 转义序列?

对于您关于在任何终端中可以使用哪种工具输出颜色的另外两个问题:我认为 Chalk 已经是一个非常好的库,并且它已经使用 ANSI 标准来确保兼容性。所以如果终端不支持ANSI,终端就是瓶颈。我不知道任何其他更兼容的技术。


推荐阅读