使用 `d8`
d8
是 V8 的開發者專用 shell。
d8
可用於在本地運行某些 JavaScript 或調試您對 V8 所做的更改。使用 GN 編譯 V8 對於 x64 會在 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
更被推薦,因為它在 Web 瀏覽器中也能正常運作。
讀取輸入
使用 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:
… (等)"
使用 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” 很搭。