使用Node输出到命令行的方法

309 阅读3分钟

使用控制台模块的基本输出

Node提供了一个console 模块,它提供了大量非常有用的方法来与命令行互动。

它基本上与你在浏览器中找到的console 对象相同。

最基本和最常用的方法是console.log() ,它将你传递给它的字符串打印到控制台。

如果你传递一个对象,它将把它渲染成一个字符串。

你可以向console.log ,例如,传递多个变量。

const x = 'x'
const y = 'y'
console.log(x, y)

而Node将打印这两个变量。

我们还可以通过传递变量和格式指定器来格式化漂亮的短语。

例如:。

console.log('My %s has %d years', 'cat', 2)
  • %s 格式化一个变量为一个字符串
  • %d 或 格式化一个变量为一个整数%i
  • %f 格式化变量为浮点数
  • %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?'
)

发生的情况是,count会计算一个字符串被打印的次数,并在它旁边打印出计数。

你可以直接数苹果和橘子。

const oranges = ['orange', 'orange']
const apples = ['just one apple']
oranges.forEach(fruit => {
  console.count(fruit)
})
apples.forEach(fruit => {
  console.count(fruit)
})

打印堆栈跟踪

可能在有些情况下,打印一个函数的调用堆栈跟踪是很有用的,也许可以回答你是如何到达代码的那一部分的问题*?*

你可以使用console.trace()

const function2 = () => console.trace()
const function1 = () => function2()
function1()

这将打印出堆栈跟踪。这就是我在Node REPL中尝试这样做的结果。

Trace
    at function2 (repl:1:33)
    at function1 (repl:1:25)
    at repl:1:1
    at ContextifyScript.Script.runInThisContext (vm.js:44:33)
    at REPLServer.defaultEval (repl.js:239:29)
    at bound (domain.js:301:14)
    at REPLServer.runBound [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()')
  //do something, and measure the time it takes
  doSomething()
  console.timeEnd('doSomething()')
}
measureDoingSomething()

stdout 和 stderr

正如我们所看到的,console.log对于在Console中打印信息是很好的。这就是所谓的标准输出,或stdout

console.error 打印到 流。stderr

它不会出现在控制台中,但它会出现在错误日志中。

给输出着色

你可以通过使用转义序列给控制台中的文本输出着色。转义序列是一组标识颜色的字符。

例如。

console.log('\x1b[33m%s\x1b[0m', 'hi!')

你可以在Node 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)