如何使用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
很適合在控制台中打印消息。這就是所謂的標準輸出,或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個步驟的進度條,每100毫秒完成一個步驟。當進度條完成時,我們清除定時器:
const ProgressBar = require('progress')
const bar = new ProgressBar(':bar', { total: 10 })
const timer = setInterval(() => {
bar.tick()
if (bar.complete) {
clearInterval(timer)
}
}, 100)