使用 d8

d8 是 V8 自家的開發人員 shell。

d8 可用於在本地執行一些 JavaScript 或偵錯您對 V8 所做的變更。使用 GN 建置 x64 版的 V8 會在 out.gn/x64.optdebug/d8 中產生 d8 二進位檔。您可以使用 --help 參數呼叫 d8,以取得更多關於用法和標記的資訊。

如果您計畫使用 d8 執行 JavaScript 檔案,而不是互動式執行,那麼列印輸出可能會非常重要。這可以使用 console.log 來達成

$ cat test.js
console.log('Hello world!');

$ out.gn/x64.optdebug/d8 test.js
Hello world!

d8 也附帶一個執行相同功能的 print 全域函式。然而,由於 console.log 也適用於網路瀏覽器,因此它比 print 更受青睞。

讀取輸入 #

使用 read(),您可以將檔案內容儲存在變數中。

d8> const license = read('LICENSE');
d8> license
"This license applies to all parts of V8 that are not externally
maintained libraries. The externally maintained libraries used by V8
are:
(etc.)"

使用 readline() 互動式輸入文字

d8> const greeting = readline();
Welcome
d8> greeting
"Welcome"

載入外部指令碼 #

load() 在目前的內容中執行另一個 JavaScript 檔案,表示您之後可以存取該檔案中宣告的任何內容。

$ cat util.js
function greet(name) {
return 'Hello, ' + name;
}

$ d8
d8> load('util.js');
d8> greet('World!');
"Hello, World!"

將標記傳遞至 JavaScript #

使用 d8,可以在執行階段讓您的 JavaScript 程式碼使用命令列參數。只要在命令列中將它們傳遞至 -- 之後即可。然後,您可以在指令碼的最上層使用 arguments 物件存取它們。

out.gn/x64.optdebug/d8 -- hi

您現在可以使用 arguments 物件存取參數陣列

d8> arguments[0]
"hi"

更多資源 #

Kevin Ennis 的 D8 指南 有許多關於使用 d8 探索 V8 的好資訊。

d8 名稱的背景:在早期,V8 有個「範例 shell」,其目的是示範如何嵌入 V8 以建置 JavaScript shell。它刻意設計得極簡,且僅稱為「shell」。不久之後,便新增了一個「開發人員 shell」,其中有更多便利功能,以協助開發人員進行日常工作,而且它也需要一個名稱。當初選擇「d8」作為名稱的原始原因已不可考;它之所以會被採用,是因為「eveloper」省略了 8 個字元,因此「d8 shell」作為縮寫是有道理的,而且也與專案名稱「V8」相得益彰。