5 A Read-Eval-Print-Loop (REPL) is available both as a standalone program and
6 easily includable in other programs. The REPL provides a way to interactively
7 run JavaScript and see the results. It can be used for debugging, testing, or
8 just trying things out.
10 By executing `node` without any arguments from the command-line you will be
11 dropped into the REPL. It has simplistic emacs line-editing.
14 Type '.help' for options.
17 > a.forEach(function (v) {
24 For advanced line-editors, start node with the environmental variable
25 `NODE_NO_READLINE=1`. This will start the main and debugger REPL in canonical
26 terminal settings which will allow you to use with `rlwrap`.
28 For example, you could add this to your bashrc file:
30 alias node="env NODE_NO_READLINE=1 rlwrap node"
33 ## repl.start(options)
35 Returns and starts a `REPLServer` instance, that inherits from
36 [Readline Interface][]. Accepts an "options" Object that takes
39 - `prompt` - the prompt and `stream` for all I/O. Defaults to `> `.
41 - `input` - the readable stream to listen to. Defaults to `process.stdin`.
43 - `output` - the writable stream to write readline data to. Defaults to
46 - `terminal` - pass `true` if the `stream` should be treated like a TTY, and
47 have ANSI/VT100 escape codes written to it. Defaults to checking `isTTY`
48 on the `output` stream upon instantiation.
50 - `eval` - function that will be used to eval each given line. Defaults to
51 an async wrapper for `eval()`. See below for an example of a custom `eval`.
53 - `useColors` - a boolean which specifies whether or not the `writer` function
54 should output colors. If a different `writer` function is set then this does
55 nothing. Defaults to the repl's `terminal` value.
57 - `useGlobal` - if set to `true`, then the repl will use the `global` object,
58 instead of running scripts in a separate context. Defaults to `false`.
60 - `ignoreUndefined` - if set to `true`, then the repl will not output the
61 return value of command if it's `undefined`. Defaults to `false`.
63 - `writer` - the function to invoke for each command that gets evaluated which
64 returns the formatting (including coloring) to display. Defaults to
67 You can use your own `eval` function if it has following signature:
69 function eval(cmd, context, filename, callback) {
70 callback(null, result);
73 Multiple REPLs may be started against the same running instance of node. Each
74 will share the same global object but will have unique I/O.
76 Here is an example that starts a REPL on stdin, a Unix socket, and a TCP socket:
78 var net = require("net"),
79 repl = require("repl");
84 prompt: "node via stdin> ",
86 output: process.stdout
89 net.createServer(function (socket) {
92 prompt: "node via Unix socket> ",
95 }).on('exit', function() {
98 }).listen("/tmp/node-repl-sock");
100 net.createServer(function (socket) {
103 prompt: "node via TCP socket> ",
106 }).on('exit', function() {
111 Running this program from the command line will start a REPL on stdin. Other
112 REPL clients may connect through the Unix socket or TCP socket. `telnet` is useful
113 for connecting to TCP sockets, and `socat` can be used to connect to both Unix and
116 By starting a REPL from a Unix socket-based server instead of stdin, you can
117 connect to a long-running node process without restarting it.
119 For an example of running a "full-featured" (`terminal`) REPL over
120 a `net.Server` and `net.Socket` instance, see: https://gist.github.com/2209310
122 For an example of running a REPL instance over `curl(1)`,
123 see: https://gist.github.com/2053342
129 Emitted when the user exits the REPL in any of the defined ways. Namely, typing
130 `.exit` at the repl, pressing Ctrl+C twice to signal SIGINT, or pressing Ctrl+D
131 to signal "end" on the `input` stream.
133 Example of listening for `exit`:
135 r.on('exit', function () {
136 console.log('Got "exit" event from repl!');
143 `function (context) {}`
145 Emitted when the REPL's context is reset. This happens when you type `.clear`.
146 If you start the repl with `{ useGlobal: true }` then this event will never
149 Example of listening for `reset`:
151 // Extend the initial repl context.
152 r = repl.start({ options ... });
153 someExtension.extend(r.context);
155 // When a new context is created extend it as well.
156 r.on('reset', function (context) {
157 console.log('repl has a new context');
158 someExtension.extend(context);
166 Inside the REPL, Control+D will exit. Multi-line expressions can be input.
167 Tab completion is supported for both global and local variables.
169 The special variable `_` (underscore) contains the result of the last expression.
178 The REPL provides access to any variables in the global scope. You can expose
179 a variable to the REPL explicitly by assigning it to the `context` object
180 associated with each `REPLServer`. For example:
183 var repl = require("repl"),
186 repl.start("> ").context.m = msg;
188 Things in the `context` object appear as local within the REPL:
190 mjr:~$ node repl_test.js
194 There are a few special REPL commands:
196 - `.break` - While inputting a multi-line expression, sometimes you get lost
197 or just don't care about completing it. `.break` will start over.
198 - `.clear` - Resets the `context` object to an empty object and clears any
199 multi-line expression.
200 - `.exit` - Close the I/O stream, which will cause the REPL to exit.
201 - `.help` - Show this list of special commands.
202 - `.save` - Save the current REPL session to a file
203 >.save ./file/to/save.js
204 - `.load` - Load a file into the current REPL session.
205 >.load ./file/to/load.js
207 The following key combinations in the REPL have these special effects:
209 - `<ctrl>C` - Similar to the `.break` keyword. Terminates the current
210 command. Press twice on a blank line to forcibly exit.
211 - `<ctrl>D` - Similar to the `.exit` keyword.