WebAssembly 系统接口 (WASI)
该 node:wasi 模块目前不提供某些 WASI 运行时提供的全面文件系统安全属性。未来可能会或可能不会实现对安全文件系统沙盒的全面支持。同时,不要依赖它来运行不受信任的代码。
WASI API 提供了 WebAssembly 系统接口 规范的实现。WASI 允许 WebAssembly 应用程序通过一组类似 POSIX 的函数访问底层操作系统。
WASI
该类 WASI 提供 WASI 系统调用 API 和其他便捷方法,用于处理基于 WASI 的应用程序。每个WASI实例代表一个不同的环境
new WASI([options])
optionsargs| 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。
CodeVortex