Skip to content

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被传递到构造函数它将返回:

js
{ wasi_unstable: wasi.wasiImport }

如果将版本 preview1 传递到构造函数或者未指定版本,它将返回:

js
{ 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

Released under the MIT License.