如何使用 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 模組的內容。