从 REPL 中更改 REPL 提示

Tho*_*ggi 4 javascript node.js read-eval-print-loop

我正在尝试使用 REPL 中给出的文本更改 Node 的 REPL 提示。

我最初的尝试是这样的。

import repl from 'repl'

let PROMPT = 'original > '

repl.start({
  ignoreUndefined: true,
  prompt: PROMPT,
  eval: (text, context, filename, callback) => {
    PROMPT = `${text} >`
    return callback()
  }
})
Run Code Online (Sandbox Code Playgroud)

我意识到这行不通,因为在进程开始时设置了 repl 的提示。

我想出了这样的东西,它在输入命令后用新的提示启动一个新的 repl。

import repl from 'repl'

let PROMPT = 'original > '
let REPL = createRepl(PROMPT)

function createRepl (prompt) {
  return repl.start({
    ignoreUndefined: true,
    prompt: PROMPT,
    eval: (text, context, filename, callback) => {
      PROMPT = `${text.replace(/\n/, '')} >`
      REPL.close()
      REPL = createRepl(PROMPT)
    }
  })
}
Run Code Online (Sandbox Code Playgroud)

这个解决方案几乎就在那里,问题是当我关闭原始 REPL 时进程正在退出。

我只是尝试在进程开始后从脚本内部更改 REPL 提示。我愿意采取任何方式来做到这一点。理想情况下,promptprop 接受一个带有prompt参数的函数,并允许您从函数内部设置它,然后我可以使用事件或其他东西。

msc*_*dex 8

您应该能够调用repl.setPrompt('foo> ');以更改提示。