如何使用Node將信息打印到命令行控制台,從基本的console.log到更複雜的場景。

使用console模組進行基本輸出

Node提供了console模組,該模組可以提供與命令行交互的各種非常有用的方法。它基本上與在瀏覽器中找到的console對象相同。

最基本和最常用的方法是console.log(),它將將您傳遞給它的字符串打印到控制台。如果您傳遞一個對象,它將將它呈現為字符串。您可以將多個變量傳遞給console.log,例如:

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

Node將打印兩個值。

您還可以通過傳遞變量和格式化符號來格式化漂亮的短語。例如:

console.log('我的 %s 有 %d 歲', '貓', 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('x的值為' + x + '被檢查了多少次?')
console.count('x的值為' + x + '被檢查了多少次?')
console.count('y的值為' + y + '被檢查了多少次?')

count會計算字符串被打印的次數,並在其旁邊打印計數:

您可以只計算蘋果和柳橙的數量:

const oranges = ['橙子', '橙子']
const apples = ['只有一個蘋果']
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('測試')
const measureDoingSomething = () => {
  console.time('doSomething()')
  //做某些事情,並測量所花的時間
  doSomething()
  console.timeEnd('doSomething()')
}
measureDoingSomething()

stdout和stderr

正如我們所見,console.log很適合在控制台中打印消息。這就是所謂的標準輸出,或stdoutconsole.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個步驟的進度條,每100毫秒完成一個步驟。當進度條完成時,我們清除定時器:

const ProgressBar = require('progress')

const bar = new ProgressBar(':bar', { total: 10 })
const timer = setInterval(() => {
  bar.tick()
  if (bar.complete) {
    clearInterval(timer)
  }
}, 100)