我收到此回调并出现错误:
return cb({code, message: `Could not run the following command: "${chalk.bold(cmd)}".`}, result);
它的处理方式如下:
if (err) {
console.error(err);
process.exit(1);
}
我明白了(注意控制字符):
{ code: 1,
message:
'Could not run the following command: "\u001b[1mnpm view @oresoftware/foo2@latest dist --json\u001b[22m".' }
我也尝试过这样处理:
if (err) {
console.error(util.inspect(err));
process.exit(1);
}
和
if (err) {
console.error(chalk.magenta(util.inspect(err)));
process.exit(1);
}
但是我似乎总是能得到控制字符-是否有某种方法可以配置util.inspect()
来接受控制字符?
https://nodejs.org/api/util.html#util_util_inspect_object_options
这是一个非常简单的副本:
const chalk = require('chalk');
const util = require('util');
console.log(util.inspect({message: `Here is the highlighted message ${chalk.bold('foo bar baz')}`}));
答案 0 :(得分:1)
util.inspect
escapes control characters,无法更改。
如本related question中所述,转义序列可以不转义,例如:
console.log(JSON.parse(`"${util.inspect(obj).split('"').join('\\"')}"`))
或者可以使用任何具有相同功能的现有第三方程序包,例如unescape-js
。
答案 1 :(得分:0)
我认为JSON.stringify可能在控制字符中添加了一个escape()。就是这样,经过研究,我有点创建了一个解决方案,但发现它已发布在另一个SO帖子中:Node JS, logging JSON with ansi code
OP @Cohars建议的位置(与我的相同)
JSON.stringify(o) .replace(/\\/g, '') .replace(/u001b/g, '\u001b')
现在,在util.inspect
的情况下,我认为相同的解决方案应该有效:
util.inspect(obj)
.replace(/\\/g, '')
.replace(/u001b/g, '\u001b')
注意:我不知道我们是否应该将该问题标记为重复。但是当你问一个完全不同的问题时,我认为也许这个问题应该被当作另一个问题。