На этой странице

В комплекте с Node.js идёт встроенная среда REPL (Read-Eval-Print Loop), которая позволяет выполнять JavaScript-код интерактивно. REPL доступен через терминал и отлично подходит для того, чтобы опробовать небольшие фрагменты кода.

Команда node — та самая, которой мы запускаем наши скрипты на Node.js:

Если запустить команду node без скрипта для выполнения и без каких-либо аргументов, мы начнём REPL-сессию:

Примечание: REPL расшифровывается как Read Evaluate Print Loop (читать — вычислять — печатать — повторять). Это среда языка программирования (по сути, окно консоли), которая принимает от пользователя одно выражение и после выполнения возвращает результат в консоль. REPL-сессия — удобный способ быстро проверить простой JavaScript-код.

Если попробовать это прямо сейчас в терминале, произойдёт следующее:

❯ node
>

Команда остаётся в режиме ожидания и ждёт, пока мы что-нибудь введём.

Подсказка: если вы не уверены, как открыть терминал, загуглите «Как открыть терминал в your-operating-system».

Точнее говоря, REPL ждёт, пока мы введём какой-нибудь JavaScript-код.

Начнём с простого и введём

> console.log('test')
test
undefined
>

Первое значение, test, — это вывод, который мы попросили консоль напечатать, затем мы получаем undefined — возвращаемое значение вызова console.log(). Node прочитал эту строку кода, вычислил её, напечатал результат, а затем снова вернулся к ожиданию следующих строк кода. Node будет прокручивать эти три шага для каждого фрагмента кода, который мы выполняем в REPL, пока мы не выйдем из сессии. Отсюда REPL и получил своё название.

Node автоматически печатает результат любой строки JavaScript-кода — указывать ему это не нужно. Например, введите следующую строку и нажмите enter:

> 5 === '5'
false
>

Обратите внимание на разницу в выводе двух строк выше. Node REPL напечатал undefined после выполнения console.log(), тогда как во втором случае он просто напечатал результат 5 === '5'. Нужно держать в голове, что первое — это просто инструкция (statement) в JavaScript, а второе — выражение (expression).

Иногда код, который вы хотите проверить, требует нескольких строк. Например, допустим, вы хотите определить функцию, генерирующую случайное число. В REPL-сессии введите следующую строку и нажмите enter:

function generateRandom() {
...

Node REPL достаточно умён, чтобы понять, что вы ещё не закончили писать код, и перейдёт в многострочный режим, чтобы вы могли ввести ещё код. Теперь завершите определение функции и нажмите enter:

function generateRandom() {
...return Math.random()
}
undefined

Если после некоторого кода вы наберёте _, будет напечатан результат последней операции.

Если нажать клавишу «стрелка вверх», вы получите доступ к истории ранее выполненных строк кода в текущей и даже в предыдущих REPL-сессиях.

У REPL есть несколько специальных команд, все начинаются с точки .. Вот они:

  • .help: показывает справку по dot-командам.
  • .editor: входит в режим редактора для написания многострочного JavaScript-кода.
  • .break / .clear: выходит из многострочного кода вроде функций. То же, что нажать CTRL-C.
  • .load: загружает JavaScript-файл относительно текущей рабочей директории.
  • .save: сохраняет все команды, введённые в сессии, в файл.
  • .exit: выходит из REPL (то же, что нажать CTRL-C дважды).

REPL понимает, когда вы набираете многострочную инструкцию, без необходимости вызывать .editor.

Например, если вы начнёте набирать перебор вот так:

и нажмёте enter, REPL перейдёт на новую строку, начинающуюся с трёх точек, показывая, что вы можете продолжать работать над этим блоком.

... console.log(num)
... })

Если набрать .break в конце строки, многострочный режим прервётся, и инструкция не будет выполнена.

Мы можем импортировать REPL в JavaScript-файл, используя repl.

С помощью переменной repl мы можем выполнять различные операции. Чтобы запустить командную строку REPL, введите следующую строку

Запустите файл в командной строке.

Вы можете передать строку, которая показывается при старте REPL. По умолчанию это '> ' (с завершающим пробелом), но можно задать своё приглашение.

// приглашение в стиле Unix
const local = repl.start('$ ');

Можно отобразить сообщение при выходе из REPL

local.on('exit', () => {
  console.log('exiting repl');
  process.exit();
});

Подробнее о модуле REPL можно почитать в документации repl.