使用 Node.js 輸出到命令行

使用 console 模組進行基本輸出

Node.js 提供一個console模組,提供了許多非常有用的方式來與命令行進行交互。

它基本上與您在瀏覽器中找到的 console 物件相同。

最基本且最常用的方法是 console.log(),它會將您傳遞給它的字符串打印到控制台。

如果您傳遞一個物件,它將以字符串形式呈現。

您可以將多個變量傳遞給 console.log,例如

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

Node.js 將會打印兩者。

我們還可以通過傳遞變量和格式化符號來格式化漂亮的短語。

例如

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.countReset('orange') 會將計數器值重置為零。

也許有時候打印函數的調用堆棧跟蹤是有用的,也許是為了回答問題“你是如何到達代碼的那一部分的?”

您可以使用 console.trace() 來實現。

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

這將打印出堆棧跟蹤。這是我們在 Node.js 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 非常適合在控制台中打印消息。這就是所謂的標準輸出,或者 stdout

console.error 打印到 stderr 流。

它不會出現在控制台中,但它會出現在錯誤日誌中。

將輸出的文本著色

您可以使用 轉義序列 將控制台中的文本著色。轉義序列是一組識別顏色的字符。

範例

console.log('\x1b[33m%s\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 步進度條,每 100 毫秒完成一步。當進度條完成時,我們清除間隔

const ProgressBar = require('progress');

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