WebAssembly 系统接口 (WASI)
该 node:wasi
模块目前不提供某些 WASI 运行时提供的全面文件系统安全属性。未来可能会或可能不会实现对安全文件系统沙盒的全面支持。同时,不要依赖它来运行不受信任的代码。
WASI API 提供了 WebAssembly 系统接口 规范的实现。WASI 允许 WebAssembly 应用程序通过一组类似 POSIX 的函数访问底层操作系统。
WASI
该类 WASI
提供 WASI 系统调用 API 和其他便捷方法,用于处理基于 WASI 的应用程序。每个WASI实例代表一个不同的环境
new WASI([options])
options
args
| WebAssembly 应用程序将视为命令行参数的字符串数组。第一个参数是 WASI 命令本身的虚拟路径。默认值: []
。env
|process.env
与WebAssembly 应用程序将视为其环境的对象类似的对象。默认值: {}
。preopens
| 此对象表示 WebAssembly 应用程序的本地目录结构。的字符串键preopens
被视为文件系统内的目录。中的对应值preopens
是主机上这些目录的实际路径。returnOnExit
| 默认情况下,当 WASI 应用程序调用时__wasi_proc_exit()
wasi.start()
将返回指定的退出代码,而不是终止进程。将此选项设置为 false将导致 Node.js 进程以指定的退出代码退出。默认值: true
。stdin
| WebAssembly 应用程序中用作标准输入的文件描述符。默认值: 0
。stdout
| WebAssembly 应用程序中用作标准输出的文件描述符。默认值: 1
。stderr
| WebAssembly 应用程序中用作标准错误的文件描述符。默认值: 2
。version
| 请求的 WASI 版本。目前仅支持unstable和版本preview1。此选项为必选。
wasi.getImportObject()
WebAssembly.instantiate()
如果除了 WASI 提供的导入之外不需要其他 WASM 导入,则返回可以传递给的导入对象。
如果版本unstable被传递到构造函数它将返回:
{ wasi_unstable: wasi.wasiImport }
如果将版本 preview1
传递到构造函数或者未指定版本,它将返回:
{ wasi_snapshot_preview1: wasi.wasiImport }
wasi.start(instance)
尝试通过调用其导出来开始执行 instanceWASI
命令 _start()
。如果 instance
不包含 _start()
导出,或者 instance
包含 _initialize()
导出,则会引发异常。
start()
要求 instance
导出 WebAssembly.Memory
名为 的 memory
。如果 instance
没有 memory
导出,则会引发异常。
如果 start()
调用多次,则会引发异常。
wasi.initialize(instance)
如果存在,则尝试 instance
通过调用其导出来初始化为 WASI 反应器 。如果包含 导出,则抛出异常。_initialize()instance_start()
initialize()
要求 instance
导出WebAssembly.Memory名为 的 memory
。如果 instance
没有 memory
导出,则会引发异常。
如果 initialize()
调用多次,则会引发异常。
wasi.wasiImport
wasiImport
是实现 WASI 系统调用 API 的对象。此对象应 wasi_snapshot_preview1
在实例化期间作为导入传递 WebAssembly.Instance。