在节点js中使用REPL

Soo*_*ash 3 javascript node.js read-eval-print-loop node-modules

  1. 在nodejs中使用REPL有什么用?
  2. 使用REPL有哪些用例/场景?
  3. 我什么时候应该在nodejs中使用REPL节点模块?

我已经理解了API Doc,如何包含REPL模块以及如何使用prompt和eval启动REPL实例.

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

Nik*_*igi 5

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

我经常在技​​术会谈中看到它(或Chrome控制台也是一个JavaScript REPL),作为一种快速的方式来展示不同表达方式所评估的内容.让我们想象你正在谈论JavaScript中的Equality,并希望表明NaN奇怪的是不等于它自己.

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

  • node在您的终端中不带参数运行(这会启动REPL)
  • 进入NaN == NaN和按下Enter(REPL将评估表达式)
  • 假装对输出感到惊讶 false

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

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

例子

复制通过调用显示的REPL node

const repl = require('repl')
const server = repl.start()
Run Code Online (Sandbox Code Playgroud)

使用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
})
Run Code Online (Sandbox Code Playgroud)

input.js 文件:

40 + 2
NaN
["hello", "world"].join(" ")
Run Code Online (Sandbox Code Playgroud)

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

> 40 + 2
42
> NaN
NaN
> ["hello", "world"].join(" ")
'hello world'
Run Code Online (Sandbox Code Playgroud)

该输出可以明显地传递到一个Writable比其他process.stdout通过更改output选项.