可以在一个 Node.js 实例中创建并运行多个 REPL 实例,它们共享一个 global 对象但有独立的 I/O 接口。

    例子,在 stdin、Unix socket、和 TCP socket 上分别提供了独立的 REPL:

    1. const net = require('net');
    2. const repl = require('repl');
    3. let connections = 0;
    4. repl.start({
    5. prompt: 'Node.js 使用 stdin> ',
    6. input: process.stdin,
    7. output: process.stdout
    8. });
    9. net.createServer((socket) => {
    10. connections += 1;
    11. repl.start({
    12. prompt: 'Node.js 使用 Unix socket> ',
    13. input: socket,
    14. output: socket
    15. }).on('exit', () => {
    16. socket.end();
    17. });
    18. }).listen('/tmp/node-repl-sock');
    19. net.createServer((socket) => {
    20. connections += 1;
    21. repl.start({
    22. prompt: 'Node.js 使用 TCP socket> ',
    23. input: socket,
    24. output: socket
    25. }).on('exit', () => {
    26. socket.end();
    27. });
    28. }).listen(5001);

    从命令行运行这个应用会在 stdin 上启动一个 REPL。 其他 REPL 客户端可以通过 Unix socket 或 TCP socket 进行连接。 例如,可以使用 telnet 连接到 TCP socket,使用 socat 连接到 Unix socket 或 TCP socket。

    通过从一个基于 Unix socket 的服务器(而不是 stdin)启动一个 REPL,可以连接到一个长期运行的 Node.js 进程而无需重启它。

    例子,在一个 net.Server 实例和一个 net.Socket 实例上运行一个全特性的(terminal)REPL,详见:https://gist.github.com/TooTallNate/2209310

    例子,在 [curl(1)][] 上运行一个 REPL 实例,详见:https://gist.github.com/TooTallNate/2053342