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()');
// делаем что-то и измеряем, сколько это занимает
doSomething();
console.timeEnd('doSomething()');
};
measureDoingSomething();Как мы видели, console.log отлично печатает сообщения в консоль. Это и есть так называемый стандартный вывод, или stdout.
console.error печатает в поток stderr.
Он появится в консоли, но его можно обрабатывать отдельно от обычного вывода.
ПРИМЕЧАНИЕ Эта часть материала написана под версию 22.11, где
styleTextпомечен как «в активной разработке» (Active development).
Во многих случаях возникает соблазн вставить определённый текст, чтобы получить красивый вывод в терминале.
Модуль node:util предоставляет функцию styleText. Давайте разберёмся, как её использовать.
Прежде всего нужно импортировать функцию styleText из модуля node:util:
import { styleText } from 'node:util';Затем с её помощью можно стилизовать текст:
console.log(
styleText(['red'], 'This is red text ') +
styleText(['green', 'bold'], 'and this is green bold text ') +
'this is normal text'
);Первый аргумент — массив стилей, второй — текст, который нужно стилизовать. Рекомендуем почитать документацию