Fork me on GitHub

Node.js — Документация


Содержание


Интерактивная консоль (REPL)

Интерактивная консоль (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.start(prompt='> ', stream=process.openStdin())

Запускает 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

Внутри 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 есть несколько специальных команд: