通过util.inspect / console.log允许控制字符

时间:2018-08-04 21:03:10

标签: node.js

我收到此回调并出现错误:

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')}`}));

2 个答案:

答案 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')

注意:我不知道我们是否应该将该问题标记为重复。但是当你问一个完全不同的问题时,我认为也许这个问题应该被当作另一个问题。