如何使用 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
>

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

提示: 如果您不确定如何打开终端,请在 Google 上搜索“如何在您的操作系统上打开终端”。

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

从简单开始并输入

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

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

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

> 5 === '5'
false
>

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

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

function generateRandom() {
...

Node REPL 足够聪明,可以确定您尚未完成编写代码,它将进入多行模式,供您输入更多代码。 现在完成您的函数定义并按 Enter

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

_ 特殊变量

如果在某些代码后键入 _,它将打印上次操作的结果。

向上箭头键

如果您按 up 箭头键,您将可以访问当前甚至以前的 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 repl = require('node:repl');

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

repl.start();

在命令行中运行该文件。

node repl.js

您可以传递一个字符串,该字符串显示 REPL 何时启动。 默认值为“>”(带尾随空格),但我们可以定义自定义提示符。

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

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

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

您可以在 repl 文档中阅读有关 REPL 模块的更多信息。