自定义节点 JS REPL input/output 流
Custom Node JS REPL input/output stream
我需要自定义 REPL input/output 流。例如,当某些事件发生时,我需要将一段脚本传递给 REPL,并获取它的输出并对其进行处理。
为了向您描述得更清楚,我正在开发一个提供 REPL 的 vscode plugin (github: source code)。在我的例子中,我有一个 vscode WebView
并从那里获取用户输入,然后我想将该输入传递给节点 REPL 并获取其输出并将其显示给用户。
那么,我该如何实现呢? 如果您需要更多信息,请告诉我。提前致谢。
编辑 1:
const replServer = repl.start({
input: /* what should be here? */,
output: /* what should be here? */
});
编辑 2:
谁能解释一下上面例子中input
/output
参数的用法?
- 要创建一个 repl 服务器,您只需要做
const repl = require('repl')
repl.start({prompt: "> ", input: input_stream, output: output_stream");
prompt是字符串即提示符,stream即输入。 input_stream
需要是可读流,output_stream
需要是可写流。您可以阅读有关流的更多信息 here。一旦流工作,你可以做
output_stream.on('data', (chunk) => {
14 //whatever you do with the data
15 });
这是一个对我有用的解决方案。
const {
PassThrough
} = require('stream')
const repl = require('repl')
const input = new PassThrough()
const output = new PassThrough()
output.setEncoding('utf-8')
const _repl = repl.start({
prompt: 'awesomeRepl> ',
input,
output
})
_repl.on('exit', function() {
// Do something when REPL exit
console.log('Exited REPL...')
})
function evaluate(code) {
let evaluatedCode = ''
output.on('data', (chunk) => {
evaluatedCode += chunk.toString()
console.log(evaluatedCode)
})
input.write(`${code}\n`)
return result
}
evaluate('2 + 2') // should return 4
注意在 evaluate
函数之外创建了 REPL 实例,因此我们不会为 evaluate
的每次调用都创建一个新实例
我需要自定义 REPL input/output 流。例如,当某些事件发生时,我需要将一段脚本传递给 REPL,并获取它的输出并对其进行处理。
为了向您描述得更清楚,我正在开发一个提供 REPL 的 vscode plugin (github: source code)。在我的例子中,我有一个 vscode WebView
并从那里获取用户输入,然后我想将该输入传递给节点 REPL 并获取其输出并将其显示给用户。
那么,我该如何实现呢? 如果您需要更多信息,请告诉我。提前致谢。
编辑 1:
const replServer = repl.start({
input: /* what should be here? */,
output: /* what should be here? */
});
编辑 2:
谁能解释一下上面例子中input
/output
参数的用法?
- 要创建一个 repl 服务器,您只需要做
const repl = require('repl')
repl.start({prompt: "> ", input: input_stream, output: output_stream");
prompt是字符串即提示符,stream即输入。 input_stream
需要是可读流,output_stream
需要是可写流。您可以阅读有关流的更多信息 here。一旦流工作,你可以做
output_stream.on('data', (chunk) => {
14 //whatever you do with the data
15 });
这是一个对我有用的解决方案。
const {
PassThrough
} = require('stream')
const repl = require('repl')
const input = new PassThrough()
const output = new PassThrough()
output.setEncoding('utf-8')
const _repl = repl.start({
prompt: 'awesomeRepl> ',
input,
output
})
_repl.on('exit', function() {
// Do something when REPL exit
console.log('Exited REPL...')
})
function evaluate(code) {
let evaluatedCode = ''
output.on('data', (chunk) => {
evaluatedCode += chunk.toString()
console.log(evaluatedCode)
})
input.write(`${code}\n`)
return result
}
evaluate('2 + 2') // should return 4
注意在 evaluate
函数之外创建了 REPL 实例,因此我们不会为 evaluate