方法和属性


repl.start([options])

返回并启动一个 REPLServer 实例,继承自 Readline Interface。接受具有以下值的“options”对象:

  • prompt - 用于所有 I/O stream 的提示。默认为 >

  • input - 要监听的可读流。默认为 process.stdin

  • output - 写入逐行读取数据的写入流。默认为 process.stdout

  • terminal - 如果 stream 应该像一个 TTY 对待时,传入 true,并写入 ANSI/VT100 转义码。默认在 output 流实例化时检测 isTTY

  • eval - 将用于评估每个给定的行的函数。默认 eval() 为异步封装器。参见下面的自定义示例 eval

  • useColors - 指定 writer 函数是否应该输出颜色的布尔值。如果设置了一个不同的 writer 函数,那么这将没有效果。默认为该 repl 的 terminal 值。

  • useGlobal - 如果设置为 true,那么该 repl 会使用 global 对象,代替在单独上下文中运行脚本。默认为 false

  • ignoreUndefined - 如果设置为 true,那么 repl 将不会输出返回值为 undefined 的命令。默认为 false

  • writer - 为每个命令调用的函数,它返回格式化后(包括着色)的显示。默认为 util.inspect

  • replMode - 控制 repl 是否以严格模式,默认模式或混合模式(“魔术”模式)运行所有命令。可接受的值为:

    • repl.REPL_MODE_SLOPPY - 以粗略模式运行命令。

    • repl.REPL_MODE_STRICT - 以严格模式运行命令。这相当于在每个 repl 语句前面带上 'use strict'

    • repl.REPL_MODE_MAGIC - 尝试在默认模式下运行命令。如果他们无法解析,请在严格模式下重试。

如果有以下签名的情况下,你可以使用你自己的 eval 函数:

  1. function eval(cmd, context, filename, callback) {
  2. callback(null, result);
  3. }

选项卡完成时,eval 将用 .scope 作为输入字符串调用。它期望返回用于自动补全的作用域名称的数组。

多数的 REPLs 可以针对相同的 Node.js 运行实例启动。每个将共享相同的全局对象,但会具有唯一的 I/O。

这里有一个在 stdin、Unix 套接字和 TCP 套接字上运行 REPL 的例子:

  1. const net = require('net');
  2. const repl = require('repl');
  3. var connections = 0;
  4. repl.start({
  5. prompt: 'Node.js via stdin> ',
  6. input: process.stdin,
  7. output: process.stdout
  8. });
  9. net.createServer((socket) => {
  10. connections += 1;
  11. repl.start({
  12. prompt: 'Node.js via 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 via TCP socket> ',
  23. input: socket,
  24. output: socket
  25. }).on('exit', () => {
  26. socket.end();
  27. });
  28. }).listen(5001);

在一个命令行中运行这个程序会在 stdin 中启动一个 REPL。其他的 REPL 客户端,可以通过 Unix 套接字或 TCP 套接字进行连接。telnet 对于连接到 TCP 套接字很有用,socat 可以用于连接到 Unix 和 TCP 套接字。

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

在一个 net.Servernet.Socket 的实例上运行“全功能”(terminal)REPL 的例子,详见:https://gist.github.com/2209310

curl(1) 上运行 REPL 实例的例子,详见:https://gist.github.com/2053342