本文档涵盖了 Bun 对 Node-API (NAPI) 的实现,它提供了一个稳定的 C ABI,用于构建可与 JavaScript 接口的原生插件。NAPI 系统使 C/C++ 模块能够创建、操作和与 JavaScript 值、对象和函数交互,同时保持与 Node.js 原生模块的兼容性。
有关 Node.js 模块兼容性的更广泛信息,请参阅 核心模块实现。有关 Web 标准合规性,请参阅 Web API 和标准合规性。
Bun 的 NAPI 实现通过多层架构连接了 C/C++ 原生代码和 JavaScriptCore
来源: src/bun.js/bindings/napi.cpp src/napi/napi.zig src/bun.js/bindings/napi.h
NAPI 环境 (napi_env) 是原生模块的主要执行上下文
napi_env__ 结构管理
来源: src/bun.js/bindings/napi.h64-301
NAPI 值通过包装 JavaScriptCore JSValue 实例的 napi_value 枚举来表示
值系统提供
来源: src/napi/napi.zig118-138 src/napi/napi.zig264-485
句柄作用域管理 NAPI 值的生命周期,以防止过早垃圾回收
句柄作用域特性
来源: src/napi/napi.zig76-109 src/napi/napi.zig616-751
NAPI 提供了全面的对象操作功能
属性管理包括
来源: src/bun.js/bindings/napi.cpp456-750 src/napi/napi.zig513-575
NAPI 使原生函数能够从 JavaScript 调用,反之亦然
回调系统提供
this 上下文new 运算符的可调用构造函数来源: src/bun.js/bindings/napi.cpp287-382 src/napi/napi.zig662-695
NAPI 提供持久引用和清理机制
引用管理特性
来源: src/bun.js/bindings/napi.h236-291 test/napi/napi-app/module.js504-594
NAPI 支持后台工作执行和线程安全的 JavaScript 交互
异步功能包括
来源: test/napi/napi-app/module.js src/napi/napi.zig913-970
NAPI 使用全面的错误报告系统
| 状态码 | 描述 | 用途 |
|---|---|---|
napi_ok | 成功 | 正常操作完成 |
napi_invalid_arg | 无效参数 | 参数验证失败 |
napi_object_expected | 对象类型错误 | 对象操作的类型不匹配 |
napi_string_expected | 字符串类型错误 | 字符串操作的类型不匹配 |
napi_function_expected | 函数类型错误 | 函数操作的类型不匹配 |
napi_pending_exception | 挂起的异常 | 需要处理 JavaScript 异常 |
napi_generic_failure | 通用失败 | 未指定的]操作失败 |
错误系统提供
来源: src/napi/napi.zig205-228 src/bun.js/bindings/napi.cpp166-226
Bun 的 NAPI 实现包含全面的测试覆盖
测试套件验证
来源: test/napi/napi.test.ts test/napi/napi-app/main.cpp test/napi/napi-app/module.js