您好,登錄后才能下訂單哦!
小編這次要給大家分享的是Node.js API如何使用repl模塊,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
Node.js API詳解之 repl
repl(交互式解釋器) 模塊提供了一種“讀取-求值-輸出”循環(REPL)的實現,它可作為一個獨立的程序或嵌入到其他應用中。
可以通過以下方式使用它:
const repl = require('repl');
Node.js 自身也使用 repl 模塊為執行 JavaScript 代碼提供交互接口。
可以通過不帶任何參數(或使用 -i 參數)地執行 Node.js 二進制文件來使用它:
$ node > const a = [1, 2, 3]; undefined > a [ 1, 2, 3 ] > a.forEach((v) => { ... console.log(v); ... }); 1 2 3
說明:
該屬性的值為當前系統的路徑分隔符。Windows下是:”;“ POSIX下是:”:“
repl.start() 方法創建并啟動一個 repl.REPLServer 實例。
如果 options 是一個字符串,則它指定了輸入提示符:
options:
prompt:要顯示的輸入提示符。默認為 >(末尾有一個空格)
input:REPL 輸入要被讀取的可讀流。默認為 process.stdin
output:REPL 輸出要被寫入的可寫流。默認為 process.stdout
terminal:如果為 true,則指定 output 應被當作一個 TTY 終端,并且可以使用 ANSI/VT100 轉義碼寫入。 默認值為初始化時 output 流的 isTTY 屬性的值。
eval: 當解釋每行輸入時使用的函數。默認為 JavaScript eval() 函數的異步封裝。 eval 函數出錯時會返回 repl.Recoverable,表明輸入不完整并提示用戶完成輸入
useColors:如果為 true,則指定默認的 writer 函數可以在 REPL 輸出中包含 ANSI 顏色風格。 如果提供了自定義的 writer 函數,則該參數無效。 默認為 REPL 實例的 terminal 屬性的值。
useGlobal:如果為 true,則指定默認的解釋函數使用 JavaScript global 作為上下文,而不是為 REPL 實例創建一個新的獨立的上下文。
ignoreUndefined:如果為 true,則指定默認的輸出器不會輸出命令返回的 undefined 值。 默認為 false。
writer:寫入到 output 之前,該函數被調用用來格式化每個命令的輸出。 默認為 util.inspect()。
completer:選的函數,用來自定義 Tab 鍵的自動補全。
breakEvalOnSigint:當接收到 SIGINT 時停止解釋當前代碼,比如按下 Ctrl+C。 不能與自定義的 eval 函數同時使用。 默認為 false。
replMode:個標志位,指定默認的解釋器使用嚴格模式或默認(sloppy)模式來執行 JavaScript 命令。 可選的值有:
repl.REPL_MODE_SLOPPY – 使用默認模式解釋表達式。
repl.REPL_MODE_STRICT – 使用嚴格模式解釋表達式。該模式等同于在每個 repl 聲明前加上 ‘use strict'
repl.REPL_MODE_MAGIC – 不推薦使用
如果 options 是一個字符串,則它指定了輸入提示符
demo:
const repl = require('repl'); // 一個 Unix 風格的提示符 repl.start('$ ');
說明:
該屬性的值為當前系統的路徑分隔符。Windows下是:”;“ POSIX下是:”:“
repl.REPLServer 類繼承自 readline.Interface 類。
repl.REPLServer 的實例由 repl.start() 方法創建,不能直接使用 JavaScript 的 new 關鍵字創建。
說明:
該屬性的值為當前系統的路徑分隔符。Windows下是:”;“ POSIX下是:”:“
replServer.defineCommand() 方法用于添加新的前綴為 . 的命令到 REPL 實例。
這些命令通過輸入一個 . 加 keyword 來調用。 cmd 可以是一個函數或一個具有以下屬性的對象:
help:當鍵入 .help 時顯示的幫助說明(可選)。
action:要執行的函數,可接受一個字符串參數。
demo:
const repl = require('repl'); const replServer = repl.start({ prompt: '> ' }); replServer.defineCommand('sayhello', { help: '打招呼', action(name) { this.lineParser.reset(); this.bufferedCommand = ''; console.log(`你好,${name}!`); this.displayPrompt(); } }); replServer.defineCommand('saybye', function saybye() { console.log('再見!'); this.close(); });
說明:
該屬性的值為當前系統的路徑分隔符。Windows下是:”;“ POSIX下是:”:“
replServer.displayPrompt() 方法會讓 REPL 實例做好用戶輸入的準備,打印配置的 prompt 到 output 中新的一行,然后返回 input 等待新的輸入。
當正在鍵入多行輸入時,會打印省略號而不是提示符。
當 preserveCursor 為 true 時,游標位置不會被復位到 0。
replServer.displayPrompt 方法主要被使用 replServer.defineCommand() 方法注冊的命令的 action 函數調用。
說明:
該屬性的值為當前系統的路徑分隔符。Windows下是:”;“ POSIX下是:”:“
當 REPL 的上下文被重置時,觸發 ‘reset' 事件。
每當接收到 .clear 命令時會觸發該事件,除非 REPL 正在使用默認的解釋器并且 repl.REPLServer 實例被創建時 useGlobal 選項被設為 true。
監聽器的回調函數被調用時會帶上 context 對象作為惟一的參數。
這主要被用于重新初始化 REPL 上下文,使之達到某些預定義的狀態,如下面的例子:
demo:
const repl = require('repl'); function initializeContext(context) { context.m = 'test'; } const r = repl.start({ prompt: '> ' }); initializeContext(r.context); r.on('reset', initializeContext); // $ ./node example.js // > m // 'test' // > m = 1 // 1 // > m // 1 // > .clear // Clearing context... // > m // 'test' // >
說明:
該屬性的值為當前系統的路徑分隔符。Windows下是:”;“ POSIX下是:”:“
當接收到 .exit 命令、或按下兩次 ctrl + C 發出 SIGINT 信號、或按下 ctrl+D 發出 ‘end' 信號而使 REPL 被退出時,
觸發 ‘exit' 事件。 監聽器的回調函數被調用時不帶任何參數。
demo:
replServer.on('exit', () => { console.log('從 REPL 接收到 "exit" 事件!'); process.exit(); });
說明:
該屬性的值為當前系統的路徑分隔符。Windows下是:”;“ POSIX下是:”:“
所有 REPL 的實例都支持下列特殊命令:
.break – 在輸入一個多行表達式的過程中,輸入 .break 命令(或按下 ctrl-C 組合鍵)將終止表達式的繼續輸入。
.clear – 重置 REPL 的 context 為一個空對象,并清除當前正輸入的所有多行表達式。
.exit – 關閉輸入輸出流,退出 REPL。
.help – 顯示特定命令的幫助列表。
.save – 保存當前 REPL 會話到一個文件: > .save ./file/to/save.js
.load – 讀取一個文件到當前 REPL 會話。 > .load ./file/to/load.js
.editor 進入編輯模式(ctrl-D 完成,ctrl-C 取消)
REPL 中下列按鍵組合有特殊作用:
ctrl + C – 當按下一次時,與 .break 命令的效果一樣。當在空白行按下兩次時,與 .exit 命令的效果一樣。
ctrl + D – 與 .exit 命令的效果一樣。
tab – 當在空白行按下時,顯示全局和本地作用域內的變量。當在輸入時按下,顯示相關的自動補全選項。
demo:
> .editor // 進入編輯模式(^D 完成,^C 取消) function welcome(name) { return `你好 ${name}!`; } welcome('Node.js 用戶'); // ^D '你好 Node.js 用戶!' >
說明:
該屬性的值為當前系統的路徑分隔符。Windows下是:”;“ POSIX下是:”:“
當創建一個新的 repl.REPLServer 時,可以提供一個自定義的解釋函數。 這可以用于實現完全定制化的 REPL 應用。
例子,一個執行文本翻譯的 REPL:
demo:
const repl = require('repl'); const { Translator } = require('translator'); const myTranslator = new Translator('en', 'fr'); function myEval(cmd, context, filename, callback) { callback(null, myTranslator.translate(cmd)); } repl.start({ prompt: '> ', eval: myEval });
說明:
該屬性的值為當前系統的路徑分隔符。Windows下是:”;“ POSIX下是:”:“
默認情況下,在把輸出寫入到提供的可寫流(默認為 process.stdout)之前,
repl.REPLServer 實例會使用 util.inspect() 方法對輸出進行格式化。
使用 util.inspect() 方法時,useColors 選項可被指定是否在建立默認輸出器時使用 ANSI 風格的代碼給輸出上色。
在構造時,通過在 writer 選項傳入一個新的函數,可以完全地自定義一個 repl.REPLServer 實例的輸出。
例子,把輸入的任何文本轉換為大寫:
demo:
const repl = require('repl'); const r = repl.start({ prompt: '> ', eval: myEval, writer: myWriter }); function myEval(cmd, context, filename, callback) { callback(null, cmd); } function myWriter(output) { return output.toUpperCase(); }
看完這篇關于Node.js API如何使用repl模塊的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。