Интерактивная консоль (Read-Eval-Print-Loop, REPL) доступна как самостоятельная программа и может включаться в другие скрипты. REPL предоставляет возможность интерактивно выполнять JavaScript и сразу видеть результат. Он может использоваться для отладки, тестирования, и просто знакомства с системой.
Выполняя node без аргументов из командной строки вы попадёте прямо в REPL.
В нём есть простое редактирование строк по образцу emacs.
mjr:~$ node
Type '.help' for options.
> a = [ 1, 2, 3];
[ 1, 2, 3 ]
> a.forEach(function (v) {
... console.log(v);
... });
1
2
3
Чтобы использовать продвинутые редакторы, запустите Node с переменной окружения
NODE_NO_READLINE=1. Это запустит REPL с обычными терминальными настройками,
позволяющими использовать rlwrap.
К примеру, можно добавить следующее к Вашему файлу bashrc:
alias node="env NODE_NO_READLINE=1 rlwrap node"
Запускает REPL с prompt в качестве приглашения и потоком stream для ввода/вывода.
Параметр prompt необязателен и по умолчанию принимает значение '>'.
Параметр stream также необязателен и по умолчанию принимает значение process.stdin.
В одном экземпляре node могут быть запущены несколько консолей REPL. Все будут использовать один глобальный объект но разный ввод-вывод.
Вот пример, запускающий консоль REPL на стандартном потоке ввода-вывода, сокете Unix, и TCP-сокете:
var net = require("net"),
repl = require("repl");
connections = 0;
repl.start("node via stdin> ");
net.createServer(function (socket) {
connections += 1;
repl.start("node via Unix socket> ", socket);
}).listen("/tmp/node-repl-sock");
net.createServer(function (socket) {
connections += 1;
repl.start("node via TCP socket> ", socket);
}).listen(5001);
Запуск этой программы из командной строки запустит консоль на stdin. Другие
клиенты могут подключаться через Unix-сокет или TCP-сокет. Для подключения
к TCP сокетам можно использовать telnet, a socat можно использовать
для обоих типов сокетов.
Запуская REPL на сокете вместо стандартного ввода-вывода Вы можете подключаться к работающему процессу node не перезапуская его.
Внутри REPL Control+D завершает его работу. Можно вводить многострочные выражения.
Специальная переменная _ (знак подчёркивания) содержит результат последнего выражения.
> [ "a", "b", "c" ]
[ 'a', 'b', 'c' ]
> _.length
3
> _ += 1
4
REPL предоставляет доступ к любым переменным глобальной области видимости.
Вы можете явно передать переменную в REPL, присвоив её объекту context,
ассоциированному с каждым экземпляром REPLServer. Например:
// repl_test.js
var repl = require("repl"),
msg = "message";
repl.start().context.m = msg;
Свойства объекта context выглядят внутри REPL как локальные:
mjr:~$ node repl_test.js
> m
'message'
В REPL есть несколько специальных команд:
.break - При вводе многострочного выражения иногда можно ошибиться,
либо совсем отказаться от его ввода. .break начнёт ввод заново..clear - Сбрасывает объект context в пустой и очищает введённое многострочное выражение..exit - Закрывает потоки ввода-вывода, принуждая REPL завершиться..help - Показывает список специальных команд.