REPLServer类


它继承自 Readline Interface 并带有以下事件:

‘reset’ 事件

function (context) {}

当 REPL 的上下文被重置时发出。这在你键入 .clear 时发生。如果你启动时带有 { useGlobal: true },那么这个事件永远不会被触发。

监听 'reset' 事件的例子:

  1. // Extend the initial repl context.
  2. var replServer = repl.start({
  3. options...
  4. });
  5. someExtension.extend(r.context);
  6. // When a new context is created extend it as well.
  7. replServer.on('reset', (context) => {
  8. console.log('repl has a new context');
  9. someExtension.extend(context);
  10. });

‘exit’ 事件

function () {}

当用户以任何定义的方式退出 REPL 时发出。也就是说,在 repl 中键入 .exit,按下 Ctrl+C 两次来示意 SIGINT,或在 input 流中,按下 Ctrl+D 来示意 'end'

监听 'exit' 事件的例子:

  1. replServer.on('exit', () => {
  2. console.log('Got "exit" event from repl!');
  3. process.exit();
  4. });

replServer.defineCommand(keyword, cmd)

  • keyword {String}

  • cmd {Object} | {Function}

使一个命令在 REPL 中可用。该命令通过键入 . 后面跟着关键字来调用。该 cmd 是一个具有以下值的对象:

  • help - 当输入 .help 时显示的帮助文本信息(可选)。

  • action - 一个要执行的函数,可能可以接受字符串参数,当调用命令时,绑定到 REPL 服务器实例上(必需)。

如果提供了一个函数而不是一个 cmd 对象,它被视为 action

定义命令的例子:

  1. // repl_test.js
  2. const repl = require('repl');
  3. var replServer = repl.start();
  4. replServer.defineCommand('sayhello', {
  5. help: 'Say hello',
  6. action: function (name) {
  7. this.write(`Hello, ${name}!\n`);
  8. this.displayPrompt();
  9. }
  10. });

从 REPL 中调用该命令的例子:

  1. > .sayhello Node.js User
  2. Hello, Node.js User!

replServer.displayPrompt([preserveCursor])

  • preserveCursor {Boolean}

readline.prompt 那样,当在块内时,添加缩进和省略号。preserveCursor 参数是传给 readline.prompt 的。这主要用于 defineCommand。它也用于内部渲染每个提示行。