v8 vm

http://nodejs.cn/api/



源代码: lib/v8.js



v8 模块暴露了特定于内置到 Node.js 二进制文件中的 V8 版本的 API。 可以使用以下方式访问它:



const v8 = require(‘v8’);



源代码: lib/vm.js



vm 模块可在 V8 虚拟机上下文中编译和运行代码。 vm 模块不是安全的机制。 不要使用它来运行不受信任的代码。



JavaScript 代码可以被立即编译并运行,也可以编译、保存并稍后运行。



一个常见的用例是在不同的 V8 上下文中运行代码。 这意味着被调用的代码与调用的代码具有不同的全局对象。



可以通过使对象上下文隔离化来提供上下文。 被调用的代码将上下文中的任何属性都视为全局变量。 由调用的代码引起的对全局变量的任何更改都将会反映在上下文对象中。



const vm = require(‘vm’);



const x = 1;



const context = { x: 2 };
vm.createContext(context); // 上下文隔离化对象。



const code = ‘x += 40; var y = 17;’;
// x and y 是上下文中的全局变量。
// 最初,x 的值为 2,因为这是 context.x 的值。
vm.runInContext(code, context);



console.log(context.x); // 42
console.log(context.y); // 17



console.log(x); // 1; y 没有定义。




源代码: lib/wasi.js



The WASI API provides an implementation of the WebAssembly System Interface specification. WASI gives sandboxed WebAssembly applications access to the underlying operating system via a collection of POSIX-like functions.



源代码: lib/tty.js



tty 模块提供了 tty.ReadStream 和 tty.WriteStream 类。 在大多数情况下,不需要也不可能直接地使用此模块。 但是,可以使用以下方法访问它:



const tty = require(‘tty’);
当 Node.js 检测到它被运行时附加了一个文本终端(TTY),则默认情况下,process.stdin 会被初始化为 tty.ReadStream 的实例,process.stdout 和 process.stderr 会被初始化为 tty.WriteStream 的实例。 判断 Node.js 是否被运行在一个 TTY 上下文中的首选方法是检查 process.stdout.isTTY 属性的值是否为 true:



$ node -p -e “Boolean(process.stdout.isTTY)”
true
$ node -p -e “Boolean(process.stdout.isTTY)” | cat
false
在大多数情况下,应用程序几乎没有理由手动地创建 tty.ReadStream 和 tty.WriteStream 类的实例。



Category node