如何使用 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 代码的结果,无需指示它这样做。例如,输入以下行并按回车键
> 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 将转到以三个点开头的下一行,表示您现在可以继续处理该代码块。
... 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 模块的信息。