如何使用 Node.js REPL

node 命令是我們用來執行 Node.js 腳本的命令

node script.js

如果我們執行node指令,而不帶任何要執行的腳本或任何參數,我們將開始一個REPL會話

注意:REPL代表Read Evaluate Print Loop,它是一個編程語言環境(基本上是一個控制台窗口),它將單個表達式作為用戶輸入並在執行後將結果返回到控制台。REPL會話提供了一種方便的方式來快速測試簡單的JavaScript代碼。

如果您現在在終端中嘗試,會發生以下情況

 node
>

該命令處於空閒模式並等待我們輸入內容。

提示:如果您不確定如何打開終端,請搜索“如何在您的操作系統中打開終端”。

REPL正在等待我們輸入一些JavaScript代碼,更準確地說。

開始簡單地輸入

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

第一個值test是我們告訴控制台打印的輸出,然後我們得到undefined,這是運行console.log()的返回值。Node讀取此行代碼,評估它,打印結果,然後返回等待更多代碼行。對於我們在REPL中執行的每一段代碼,Node都會循環進行這三個步驟,直到我們退出會話。這就是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

_特殊變量

如果在一些代碼之後您輸入_,那將打印出上一個操作的結果。

上箭頭鍵

如果按下上箭頭鍵,您將獲得對當前及甚至先前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 將 REPL 導入 JavaScript 檔案中。

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 模塊的信息。