在节点js中使用REPL

时间:2018-01-20 11:16:29

标签: javascript node.js node-modules read-eval-print-loop

  1. 在nodejs中使用REPL有什么用?
  2. 使用REPL有什么用例/场景?
  3. 我应该何时在nodejs中使用REPL节点模块?
  4. 我已经理解了API Doc,如何包含REPL模块以及如何使用提示符和eval启动REPL实例。

    但任何人都可以帮助我理解上述问题吗?这样我才能理解REPL模块究竟是如何使用的?

1 个答案:

答案 0 :(得分:5)

  

使用REPL有哪些用例/场景?

我经常在技术会谈中看到它(或Chrome的控制台,它也是一个JavaScript REPL),作为一种快速的方式来展示不同的表达方式评估的内容。让我们想象一下,您正在谈论 JavaScript中的平等并希望展示NaN strangely is not equal to itself

您可以通过以下方式证明:

  • 终端中没有参数的node运行(这会启动REPL)
  • 输入NaN == NaN并按输入(REPL将评估表达式)
  • 假装对输出为false
  • 感到惊讶
  

我什么时候应该在nodejs中使用REPL节点模块?

当您想要将Node.js REPL实现为应用程序的一部分时,例如通过Web浏览器中的“远程终端”公开它(​​由于安全原因不推荐它)。

实施例

通过调用node

复制显示的REPL
const repl = require('repl')
const server = repl.start()

使用REPLServer的流API

fs-repl.js档案:

const repl = require('repl')
const fs = require('fs')
const { Readable } = require('stream')

const input = new fs.createReadStream('./input.js')

const server = repl.start({
  input,
  output: process.stdout
})

input.js档案:

40 + 2
NaN
["hello", "world"].join(" ")

您现在可以运行node fs-repl,您将获得以下输出:

> 40 + 2
42
> NaN
NaN
> ["hello", "world"].join(" ")
'hello world'

通过更改Writable stream选项,显然可以将此输出传递到process.stdout以外的output