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

命令會保持空閒模式,等待我們輸入內容。

提示: 如果你不確定如何開啟終端,可以谷歌搜尋“如何在你的作業系統上開啟終端”。

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 會進入一個以 3 個點開頭的新行,表示你現在可以繼續處理該程式碼塊。

... console.log(num)
... })

如果你在一行末尾輸入 .break,多行模式將停止,並且該語句將不會被執行。

從 JavaScript 檔案執行 REPL

我們可以使用 repl 在 JavaScript 檔案中匯入 REPL。

const  = ('node:repl');

使用 repl 變數我們可以執行各種操作。要啟動 REPL 命令提示符,輸入以下行:

repl.start();

在命令列中執行該檔案。

node repl.js

你可以傳遞一個字串,它會在 REPL 啟動時顯示。預設是 '> ' (帶有一個尾隨空格),但我們可以定義自定義提示符。

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

你可以在退出 REPL 時顯示一條訊息:

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

你可以在 repl 文件中閱讀更多關於 REPL 模組的內容。