跳至主要内容

使用 `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.logprint 更被推薦,因為它在 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” 很搭。