В комплекте с Node.js идёт встроенная среда REPL (Read-Eval-Print Loop), которая позволяет выполнять JavaScript-код интерактивно. REPL доступен через терминал и отлично подходит для того, чтобы опробовать небольшие фрагменты кода.
Команда node — та самая, которой мы запускаем наши скрипты на Node.js:
node script.jsЕсли запустить команду node без скрипта для выполнения и без каких-либо аргументов, мы начнём REPL-сессию:
nodeПримечание:
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.
Например, если вы начнёте набирать перебор вот так:
[1, 2, 3].forEach(num => {и нажмёте enter, REPL перейдёт на новую строку, начинающуюся с трёх точек, показывая, что вы можете продолжать работать над этим блоком.
... console.log(num)
... })Если набрать .break в конце строки, многострочный режим прервётся, и инструкция не будет выполнена.
Мы можем импортировать REPL в JavaScript-файл, используя repl.
const repl = require('node:repl');С помощью переменной repl мы можем выполнять различные операции. Чтобы запустить командную строку REPL, введите следующую строку
repl.start();Запустите файл в командной строке.
node repl.jsВы можете передать строку, которая показывается при старте REPL. По умолчанию это '> ' (с завершающим пробелом), но можно задать своё приглашение.
// приглашение в стиле Unix
const local = repl.start('$ ');Можно отобразить сообщение при выходе из REPL
local.on('exit', () => {
console.log('exiting repl');
process.exit();
});Подробнее о модуле REPL можно почитать в документации repl.