如何使用 Node.js REPL

什么是 Node.js REPL?

Node.js 带有一个内置的 REPL (Read-Eval-Print Loop,读取-求值-打印-循环) 环境,允许你交互式地执行 JavaScript 代码。REPL 可通过终端访问,是测试小段代码的好方法。

如何使用 Node.js REPL

node 命令是我们用来运行 Node.js 脚本的命令。

node script.js

如果我们运行 node 命令时,不带任何要执行的脚本或任何参数,我们就会启动一个 REPL 会话。

node

注意: REPL 是 Read Evaluate Print Loop 的缩写,它是一种编程语言环境(基本上是一个控制台窗口),将单个表达式作为用户输入,并在执行后将结果返回到控制台。REPL 会话提供了一种方便的方式来快速测试简单的 JavaScript 代码。

如果你现在在你的终端中尝试,会发生以下情况:

 node
>

命令会保持空闲模式,等待我们输入内容。

提示: 如果你不确定如何打开终端,可以谷歌搜索“如何在你的操作系统上打开终端”。

REPL 正在等待我们输入一些 JavaScript 代码,更准确地说。

从简单的开始,输入

> console.log('test')
test
undefined
>

第一个值 test 是我们告诉控制台打印的输出,然后我们得到 undefined,这是运行 console.log() 的返回值。Node 读取这行代码,对其进行求值,打印结果,然后返回等待更多的代码行。Node 会对我们在 REPL 中执行的每一段代码重复这三个步骤,直到我们退出会话。这就是 REPL 名称的由来。

Node 会自动打印任何一行 JavaScript 代码的结果,而无需我们指示它这样做。例如,输入以下行并按回车键:

> 5 === '5'
false
>

注意上面两行输出的区别。Node REPL 在执行 console.log() 后打印了 undefined,而另一方面,它只打印了 5 === '5' 的结果。你需要记住,前者只是 JavaScript 中的一个语句,而后者是一个表达式。

在某些情况下,你想测试的代码可能需要多行。例如,假设你想定义一个生成随机数的函数,在 REPL 会话中输入以下行并按回车键:

function generateRandom() {
...

Node REPL 很智能,能够判断你还没有写完代码,它会进入多行模式让你输入更多代码。现在完成你的函数定义并按回车键:

function generateRandom() {
...return Math.random()
}
undefined

特殊变量 _

如果在某些代码之后你输入 _,它将打印上一个操作的结果。

上箭头键

如果你按 上箭头 键,你将可以访问当前甚至之前 REPL 会话中执行过的历史代码行。

点命令

REPL 有一些特殊的命令,都以点 . 开头。它们是:

  • .help: 显示点命令的帮助
  • .editor: 启用编辑器模式,轻松编写多行 JavaScript 代码。进入此模式后,按 ctrl-D 运行你编写的代码。
  • .break: 当输入多行表达式时,输入 .break 命令将中止后续输入。与按 ctrl-C 相同。
  • .clear: 将 REPL 上下文重置为空对象,并清除当前正在输入的任何多行表达式。
  • .load: 加载一个 JavaScript 文件,相对于当前工作目录
  • .save: 将你在 REPL 会话中输入的所有内容保存到一个文件中(需指定文件名)
  • .exit: 退出 repl (与按两次 ctrl-C 相同)

REPL 知道你正在输入一个多行语句,无需调用 .editor

例如,如果你开始输入一个像这样的迭代

[1, 2, 3].forEach(num => {

然后按 enter 键,REPL 会进入一个以 3 个点开头的新行,表示你现在可以继续处理该代码块。

... console.log(num)
... })

如果你在一行末尾输入 .break,多行模式将停止,并且该语句将不会被执行。

从 JavaScript 文件运行 REPL

我们可以使用 repl 在 JavaScript 文件中导入 REPL。

const  = ('node:repl');

使用 repl 变量我们可以执行各种操作。要启动 REPL 命令提示符,输入以下行:

repl.start();

在命令行中运行该文件。

node repl.js

你可以传递一个字符串,它会在 REPL 启动时显示。默认是 '> ' (带有一个尾随空格),但我们可以定义自定义提示符。

// a Unix style prompt
const  = repl.start('$ ');

你可以在退出 REPL 时显示一条消息:

local.on('exit', () => {
  .('exiting repl');
  .();
});

你可以在 repl 文档中阅读更多关于 REPL 模块的内容。