使用 `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
在网页浏览器中也适用,因此优先使用 console.log
。
读取输入
使用 read()
可以将文件内容存储到变量中。
d8> const license = read('LICENSE');
d8> license
"该许可适用于所有 V8 部分,除外由外部维护的库。由 V8 使用的外部维护库为:
… (等等)"
使用 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” 项目名称搭配。