如何使用 Node.js REPL

作者选择了 开放式互联网 / 自由言论基金作为 写给捐赠计划的一部分接受捐款。

介绍

Node.js Read-Eval-Print-Loop (REPL) 是一个交互式壳,处理 Node.js 表达式. 壳 读取用户输入的 JavaScript 代码, eval显示解读代码行结果, 打印给用户的结果,以及 ** loop**直到用户发出停止信号。

REPL 与每个 Node.js 安装组合在一起,允许您在 Node 环境中快速测试和探索 JavaScript 代码,而无需将其存储在文件中。

前提条件

要完成本教程,您将需要:

要在 macOS 或 Ubuntu 18.04 上安装此功能,请遵循 如何在 macOS 上安装 Node.js 并创建本地开发环境或 [如何在 Ubuntu 18.04 上安装 Node.js]的使用 PPA 安装部分的步骤。 *您可以在这里找到基本的 JavaScript 知识: 如何在 JavaScript 中编码

步骤 1 – 启动和停止 REPL

如果你安装了节点,那么你也有Node.js REPL. 要启动它,只需在命令行壳中输入节点:

1node

以下是 REPL prompt 的结果:

>符号让你知道你可以输入JavaScript代码,以便立即进行评估。

举个例子,请尝试在 REPL 中添加两个数字,键入以下内容:

12 + 2

当您按下ENTER,REPL 将评估表达式并返回:

14

要退出 REPL,您可以键入 .exit,或单击 CTRL+D一次,或单击 CTRL+C两次,这会让你回到壳提示。

随着开始和停止,让我们看看如何使用 REPL 来执行简单的 JavaScript 代码。

步骤 2 — 在 Node.js REPL 中执行代码

REPL 是测试 JavaScript 代码的快速方法,无需创建文件,几乎每个有效的 JavaScript 或 Node.js 表达式都可以在 REPL 中执行。

在之前的步骤中,您已经尝试添加两个数字,现在让我们尝试划分。

1node

即时类型:

110 / 5

ENTER,输出将是2,如预期:

12

REPL也可以在字符串上处理操作。 Concatenate在您的 REPL中键入以下字符串:

1"Hello " + "World"

再次,按ENTER,然后对字符串表达式进行评估:

1'Hello World'

<$>[注] :您可能已经注意到输出使用单引文而不是双引文。在JavaScript中,用于字符串的引文不会影响其值。

呼叫函数

在编写 Node.js 代码时,通常使用全球 console.log 方法或类似的 函数来打印消息。

1console.log("Hi")

点击Enter将产生以下输出:

1Hi
2undefined

第一個結果是「console.log」的輸出,它將訊息打印到「stdout」流(屏幕)。因為「console.log」打印一個字符串,而不是返回一個字符串,訊息會被視為沒有引文。

创建变量

您很少只在 JavaScript 中使用字母字符。在 REPL 中创建变量就像在.js 文件中工作一样。

1let age = 30

按下Enter的结果:

1undefined

与以前一样,在console.log中,该命令的返回值为未定义年龄变量将可用,直到您退出 REPL 会话。

1age * 2

结果是:

160

由于 REPL 返回值,您不需要使用「console.log」或类似的函数来查看屏幕上的输出。

多线块

支持多行代码块,例如,您可以创建一个函数,将3添加到给定的数字。

1const add3 = (num) => {

然后,点击ENTER将提示变更为:

1...

REPL 注意到一个开放的曲线,因此假设您正在写一个以上的代码行,这需要被注入. 为了使其更容易阅读, REPL 添加 3 个点和一个空间在下一个行,所以下面的代码似乎被注入。

输入函数的第二行和第三行,一次,按下ENTER在每个行后:

1return num + 3;
2}

关闭曲线后按ENTER将显示一个未定义,即函数分配给变量的返回值

1undefined
2>

现在,在一个值上调用‘add3()’:

1add3(10)

正如预期的那样,产量是:

113

您可以使用 REPL 来尝试 JavaScript 代码,然后将其纳入您的程序中。

步骤 3 – 掌握 REPL 快捷切片

REPL提供快捷方式,在可能的情况下减少编码时间,它保留了所有输入的命令的历史记录,并允许我们通过它们循环并必要时重复命令。

例如,输入以下字符串:

1"The answer to life the universe and everything is 32"

这一结果在:

1'The answer to life the universe and everything is 32'

如果我们想编辑字符串并将32更改为42,在提示时,请使用UP箭头键返回以前的命令:

1> "The answer to life the universe and everything is 32"

向左移动,删除3,输入4,然后再次按ENTER:

1'The answer to life the universe and everything is 42'

继续按箭头键,您将进一步回溯到您的历史记录,直到当前 REPL 会话中第一个使用的命令。

当您完成通过命令历史记录的操作时,请重复按下载,直到您耗尽了最近的命令历史记录,并再次看到提示。

要快速获取最后一个被评估的值,请使用标注字符。 在提示中,键入 _ 并按下 ENTER:

1_

以前输入的字符串将再次出现:

1'The answer to life the universe and everything is 42'

REPL 还具有函数、变量和关键字的自动完成功能. 如果您想要使用 Math.sqrt 函数找到一个数字的平方根,请输入前几个字母,如下:

1Math.sq

然后按TAB键,REPL将自动完成该函数:

1> Math.sqrt

当有多个自动完成的可能性时,您将被提示使用所有可用的选项,例如,只需输入:

1Math.

然后按TAB两次,您将被欢迎使用可能的自动完成:

 1> Math.
 2Math.__defineGetter__ Math.__defineSetter__ Math.__lookupGetter__
 3Math.__lookupSetter__ Math.__proto__ Math.constructor
 4Math.hasOwnProperty Math.isPrototypeOf Math.propertyIsEnumerable
 5Math.toLocaleString Math.toString Math.valueOf
 6
 7Math.E Math.LN10 Math.LN2
 8Math.LOG10E Math.LOG2E Math.PI
 9Math.SQRT1_2 Math.SQRT2 Math.abs
10Math.acos Math.acosh Math.asin
11Math.asinh Math.atan Math.atan2
12Math.atanh Math.cbrt Math.ceil
13Math.clz32 Math.cos Math.cosh
14Math.exp Math.expm1 Math.floor
15Math.fround Math.hypot Math.imul
16Math.log Math.log10 Math.log1p
17Math.log2 Math.max Math.min
18Math.pow Math.random Math.round
19Math.sign Math.sin Math.sinh
20Math.sqrt Math.tan Math.tanh
21Math.trunc

取决于您的壳的屏幕大小,输出可能会显示不同的行和列数量. 这是在数学模块中可用的所有函数和属性的列表。

CTRL+C,在提示中进入新的行,而不执行当前行中的行。

知道 REPL 快捷键使您在使用它时更加高效. 然而,REPL 还有另一种可提高生产力的功能:The REPL commands

步骤 4 – 使用 REPL 命令

REPL有特定关键字来帮助控制其行为. 每个命令都以点开始。

帮助

要列出所有可用的命令,请使用 .help 命令:

1.help

没有很多,但它们对在 REPL 中完成事情有用:

1.break Sometimes you get stuck, this gets you out
2.clear Alias for .break
3.editor Enter editor mode
4.exit Exit the repl
5.help Print this help message
6.load Load JS from a file into the REPL session
7.save Save all evaluated commands in this REPL session to a file
8
9Press ^C to abort current expression, ^D to exit the repl

如果你忘记了一个命令,你总是可以参阅.help,看看它在做什么。

打破 / 清晰

使用 .break.clear,很容易退出多行表达式. 例如,如下所示,开始一个 for loop:

1for (let i = 0; i < 100000000; i++) {

若要退出输入更多行,而不是输入下一个行,请使用.break.clear命令退出:

1.break

你会看到一个新的快递:

1>

REPL 将移动到一个新的行,而不执行任何代码,类似于按CTRL + C

.save 和.load

.save 命令将您自 REPL 启动以来运行的所有代码存储到一个文件中..load 命令将所有 JavaScript 代码从 REPL 内部的文件中运行。

使用.exit命令或使用CTRL+D快捷键结束会话,现在使用node启动新的 REPL。

用水果组成一组:

1fruits = ['banana', 'apple', 'mango']

在下一行中, REPL 将显示:

1[ 'banana', 'apple', 'mango' ]

将此变量保存到一个新的文件,‘fruits.js’:

1.save fruits.js

我们欢迎您的确认:

1Session saved to: fruits.js

该文件存储在您打开 Node.js REPL 的相同目录中,例如,如果您在您的主目录中打开了 Node.js REPL,则您的文件将保存在您的主目录中。

退出会话并使用节点启动一个新的 REPL。在提示中,输入fruits.js文件:

1.load fruits.js

这一结果在:

1fruits = ['banana', 'apple', 'mango']
2
3[ 'banana', 'apple', 'mango' ]

.load命令读取每个代码行并执行它,正如JavaScript解释器所期望的那样。

输入以下命令,然后按ENTER:

1fruits[1]

REPL将产生:

1'apple'

您可以使用.load命令加载任何JavaScript文件,而不仅仅是您保存的项目,让我们通过打开您喜爱的代码编辑器或命令行编辑器的nano来快速展示,并创建一个名为peanuts.js的新文件:

1nano peanuts.js

现在文件已打开,键入以下内容:

1[label peanuts.js]
2console.log('I love peanuts!');

通过按CTRL+X来保存和退出 nano。

在您保存「peanuts.js」的相同目录中,使用「node」启动 Node.js REPL。

1.load peanuts.js

.load命令将执行单个console语句,并显示以下输出:

1console.log('I love peanuts!');
2
3I love peanuts!
4undefined
5>

当您的 REPL 使用时间超过预期,或者您认为您有一个有趣的代码片段值得分享或更深入地探索时,您可以使用 .save.load 命令来实现这些目标。

结论

REPL是一个交互式环境,允许您执行JavaScript代码,而无需先将其写入文件中。

您可以使用 REPL 来尝试其他教程中的 JavaScript 代码:

Published At
Categories with 技术
comments powered by Disqus