使用 Node.js 输出到命令行
使用 console 模块进行基本输出 Node.js 提供了一个 console 模块,它提供了许多非常有用的方法来与命令行交互。它基本上与你在浏览器中找到的 console 对象相同。
最基本也是最常用的方法是 console.log()
,它将你传递给它的字符串打印到控制台。如果你传递一个对象,它会将其渲染为字符串。
你可以将多个变量传递给 console.log
,例如:
const x = 'x';
const y = 'y';
console.log(x, y);
我们还可以通过传递变量和格式说明符来格式化漂亮的短语。例如:
console.log('My %s has %d ears', 'cat', 2);
- %s 将变量格式化为字符串 - %d 将变量格式化为数字 - %i 将变量格式化为其整数部分 - %o 将变量格式化为对象 示例:
console.log('%o', Number);
清空控制台
console.clear()
清空控制台(行为可能取决于使用的控制台)。
元素计数
console.count()
是一个方便的方法。 看这段代码:
const x = 1;
const y = 2;
const z = 3;
console.count('The value of x is '+x+' and has been checked..how many times?');
console.count('The value of x is'+x+'and has been checked..how many times?');
console.count('The value of y is'+y+'and has been checked..how many times?');
console.count()
会统计字符串被打印的次数,并在其旁边打印计数:
你可以只计算苹果和橙子:
const oranges = ['orange', 'orange'];
const apples = ['just one apple'];
oranges.forEach(fruit => console.count(fruit));
apples.forEach(fruit => console.count(fruit));
重置计数
console.countReset()
方法重置 console.count()
使用的计数器。
我们将使用苹果和橙子的例子来演示这一点。
const oranges = ['orange', 'orange'];
const apples = ['just one apple'];
oranges.forEach(fruit => console.count(fruit));
apples.forEach(fruit => console.count(fruit));
console.countReset('orange');
oranges.forEach(fruit => console.count(fruit));
打印堆栈追踪
在某些情况下,打印函数的调用堆栈追踪可能很有用,也许是为了回答“你是如何到达代码的这一部分的?”这个问题。
可以使用 console.trace()
来实现:
const function2 = () => console.trace();
const function1 = () => function2();
function1();
这将打印堆栈追踪。如果我们在 Node.js REPL 中尝试这样做,则会打印以下内容:
Trace
at function2 (repl:1:33)
at function1 (rep1:1:25)
at rep1:1:1
at ContextifyScript.Script.xunInThisContext (vm.js:44:33)
at REPLServer.defaultEval(repl.js:239:29)
at bound (domain.js:301:14)
at REPLServer.xunBound [as eval](domain.js:314:12)
at REPLServer.onLine (repl.js:440:10)
at emitone (events.js:120:20)
at REPLServer.emit (events.js:210:7)
计算花费的时间
可以使用 time()
和 timeEnd()
很容易地计算函数运行需要多长时间。
const doSomething = () => console.log('test');
const measureDoingSomething = () => {
console.time('doSomething()');
// 执行某些操作,并测量所需时间
doSomething();
console.timeEnd('doSomething()');
};
measureDoingSomething();
stdout 和 stderr
正如我们看到的,console.log
非常适合在控制台中打印消息。这就是所谓的标准输出,或 stdout。
console.error
将打印到 stderr 流。
它不会出现在控制台中,但会出现在错误日志中。
为输出着色
您可以使用转义序列为控制台中的文本输出着色。转义序列是一组标识颜色的字符。
示例:
console.log('x1b[33ms/x1b[0m', 'hi!');
您可以在 Node.js REPL 中尝试一下,它将以黄色打印 hi!。
但是,这是低级方法。为控制台输出着色的最简单方法是使用库。Chalk 就是这样一个库,除了着色之外,它还有助于其他样式功能,例如使文本加粗、斜体或下划线。
您可以使用 npm install chalk
安装它,然后您可以使用它:
const chalk = require('chalk');
console.log(chalk.yellow('hi!'));
使用 chalk.yellow
比尝试记住转义码方便得多,代码也更易读。
查看上面发布的项目链接以获取更多使用示例。
创建进度条
progress
是一个很棒的包,用于在控制台中创建进度条。使用 npm install progress
安装它。
这段代码创建了一个 10 步的进度条,每 100ms 完成一步。当进度条完成时,我们清除间隔:
const ProgressBar = require('progress');
const bar = new ProgressBar(':bar', { total: 10 });
const timer = setInterval(() => {
bar.tick();
if (bar.complete) {
clearInterval(timer);
}
}, 100);