使用 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:
(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”作为名称的最初原因已不为人知;它流行起来是因为“developer”省略了 8 个字符,因此“d8 shell”作为缩写是有意义的,并且与“V8”作为项目名称也相得益彰。