Skip to content

Node.js REPL 终端

REPL 是 Read-Eval-Print Loop(读取-求值-打印-循环) 的缩写。它是一个交互式编程环境,就像命令行提示符或 shell 一样,你可以在其中输入命令,立即得到求值结果,查看输出,然后重复此过程。Node.js 内置了自己的 REPL 环境,这对于试验 JavaScript 代码、测试 Node.js 功能、调试小型代码片段以及学习非常有帮助。

REPL 循环包含以下步骤:

  • 读取 (Read):读取用户的输入(一行 JavaScript 代码)。
  • 求值 (Eval):使用 Node.js 运行时对输入的代码进行求值。
  • 打印 (Print):将求值结果打印到控制台 (console)。
  • 循环 (Loop):等待用户输入下一行。此过程持续进行,直到用户退出 REPL(通常通过按两次 Ctrl+C 或输入 .exit)。

要启动 Node.js REPL,只需打开你的终端或命令提示符,输入 node,然后按回车:

$ node

你将看到 REPL 提示符 (>),表示它已准备好接受你的 JavaScript 命令:

Welcome to Node.js vXX.X.X. (Current Node version will be displayed)
Type ".help" for more information.
>

你可以立即开始输入 JavaScript 表达式:

> 5 + 7
12
> 'Hello' + ' ' + 'REPL!'
'Hello REPL!'
> 10 * (3 + 4)
70
> Math.random()
0.123456789... (a random number)

你可以像在脚本中一样声明和使用变量。使用 const 或 let(或 var,现在较少使用)来声明变量。如果你在赋值时没有使用 const/let/var,Node.js 在 REPL 环境中会隐式地将其视为全局变量赋值,并打印赋给的值。使用 const/let/var 通常会在声明行本身打印 undefined。

> const message = 'Welcome'
undefined
> let count = 10
undefined
> count * 5
50
> message + ' to Node.js REPL'
'Welcome to Node.js REPL'
> // 隐式全局赋值(不推荐)
> myVar = 100
100
> myVar / 4
25
> console.log('logging 也可以:', count)
Logging works too: 10
undefined

REPL 支持多行表达式。当你开始一个块(例如,以 {、( 或 [ 开头)或一行结束后期望有更多输入时,提示符会变为 ...,表示正在等待更多输入行。

> function greet(name) {
... console.log(`Hello, ${name}!`);
... }
undefined
> greet('Node User')
Hello, Node User!
undefined
>
> let numbers = [1, 2, 3];
undefined
> numbers.map(n => {
... return n * 2;
... });
[ 2, 4, 6 ]
>

... 会持续出现,直到你关闭块或输入一个完整的语句。

特殊变量 _(下划线)保存着上一个成功求值的表达式的结果。

> 10 + 15
25
> _ * 2 // 使用上一个结果 (25)
50
> const names = ['Alice', 'Bob']
undefined
> names
[ 'Alice', 'Bob' ]
> _[1] // 使用上一个结果(数组)来访问 'Bob'
'Bob'
>

REPL 有一些特殊命令,都以点 (.) 开头:

  • .help:显示帮助消息,列出可用的点命令。
  • .break:(或按一次 Ctrl+C)中止当前的多行表达式输入。
  • .clear:将 REPL 上下文重置为空对象并清除任何多行表达式。效果与 .break 相同。
  • .exit:(或按两次 Ctrl+C,或按 Ctrl+D)退出 Node.js REPL。
  • .save <filename>:将当前 REPL 会话历史记录保存到文件。
  • .load <filename>:从文件加载 JavaScript 代码到当前的 REPL 会话。
  • .editor:进入编辑器模式,用于编写更长的代码块。Ctrl+D 完成输入,Ctrl+C 取消。
  • 上/下方向键:浏览命令历史记录。
  • Tab 键:自动补全变量、关键词和对象属性。
  • Ctrl+L:清除终端屏幕(类似于 console.clear())。

如前所述,你可以通过以下方式退出 REPL:

  • 输入 .exit 并按回车。
  • 按两次 Ctrl+C。
  • 按 Ctrl+D(在空行上)。
> // 按 Ctrl+C
(To exit, press Ctrl+C again or Ctrl+D or type .exit)
> // 再按一次 Ctrl+C
$