我知道一些改变控制台文本颜色的工具,例如chalk。但是,当我使用throw
语句来打印错误消息并需要将其删除时:
const chalk = require('chalk');
throw new Error(chalk.red('some error messages'));
失败,没有红色的错误消息:
?[31msome error messages?[39m
有没有办法更改throw
语句引起的错误消息的颜色?
答案 0 :(得分:0)
您确定您的控制台了解ANSI sequences吗?我的意思是,浏览器控制台可能根本不理解它们,Windows命令行仅在Windows 10中正确显示它们。
通常,您应该避免抛出ANSI颜色的错误消息,因为它可能不适用于每个系统,因此这是一种不好的做法。尽管如此,throw
本身不应该破坏序列,因为它只是一串ASCII字符。
可能破坏它的是控制台本身不理解它。粘贴的内容(?[31msome error messages?[39m
)与有效的ANSI颜色文本的区别仅在于使用"?"替换转义字符(ASCII代码27)。因此,我怀疑您正试图在不适合解释ANSI代码的控制台中显示文本。使用Windows 10控制台或任何Unix / Linux / MacOS X系统控制台,它将工作。在web浏览器的控制台和10之前的Windows版本中,它赢了。
如果您需要在webbrowser see this answer中使用彩色控制台输出。
答案 1 :(得分:0)
您必须将 throw() 调用放在 try/catch 块中。这样,您就可以捕获错误并使用 console.log() 对其进行格式化。
示例:
// The try/catch block
function run() {
try {
myAction();
}
catch (err) {
console.log('%c ' + err.message, 'background: red; color: white');
}
}
// Your action
function myAction() {
throw new Error('some error message');
}
现在您只需调用 run() 并在控制台中查看格式化的错误。