每一个样例目录会包含 3 个子目录,分别代表了传统的 NAN,N-API,和 node-addon-api 开发 add-on 的例子。我们可以直接运行下面的命令,立刻从 Hello World 的例子开始使用 node-addon-api: $ git clone https://github.com/nodejs/node-addon-examples.git $ cd node-addon-examples/1_hello_world/node-add...
稍后我们会以 node-addon-api 作为例子来具体介绍其编写方式。 模块编写指南 本节介绍使用 C++ 配合 node-addon-api 开发模块时常见的一些模式和样板代码,仅供参考。 更多用法详见官方文档:https://github.com/nodejs/node-addon-api/blob/main/doc/hierarchy.md 模块初始化 使用NODE_API_MODULE 宏绑定一个 C++ ...
node-addon-api把Method的返回值(String对象)转成napi的格式后(napi_value)再返回到napi(这里比较复杂,目前还没有深入分析)。 至此我们看到了node-addon-api设计的基本思想如图所示。 大致的思想就是node-addon-api为我们封装了一层,当napi调用我们定义的内容时,会先经过node-addon-api。node-addon-api封装napi的...
sources指明c++的源文件,如果有多个文件,需要用逗号隔开,放到同一个数组中。 include_dirs是编译时使用的头文件引入路径,这里使用node -p执行node-addon-api模块中的预置变量。 dependencies是必须的,不要改变。 后面部分,cflags!/cflags_cc!/defines三行指定如果c++程序碰到意外错误的时候,由NAPI接口来处理,而不是通...
a-first-project/node-addon-api Adds additional tutorial examples Feb 28, 2020 array_buffer_to_native/node-addon-api add clang-format (nodejs#112) Sep 6, 2019 async_pi_estimate Script test for async_pi_estimate (nodejs#129) Mar 19, 2020 ...
目前Node.js提供的开发方式是napi。但是napi用起来非常冗余和麻烦,每一步都需要我们自己去控制,所以又有大佬封装了面向对象版本的api(node-addon-api),使用上方便了很多,本文分析一下node-addon-api的设计思想,但不会分析过多细节,因为我们理解了设计思想后,使用时去查阅文档或者看源码就可以。
The examples are primarily maintained for Node-API and node-addon-api and as outlined in the Node.jsdocumentation, unless there is a need for direct access to functionality which is not exposed by Node-API, use Node-API. TheNode-API Resourceoffers an excellent orientation and tips for develop...
用Node-addon-api实现C++调用Javascript 本文介绍在使用Node-addon-api时,能够实现用C++调用Javascript的几种方式。 1. Callback 比较简单,示例: Napi::Function cb=info[0].As<Napi::Function>();cb.Call(env.Global(),{Napi::String::New(env,"hello world")});...
用Node-addon-api实现C++调用Javascript 本文介绍在使用Node-addon-api时,能够实现用C++调用Javascript的几种方式。 1. Callback 比较简单,示例: Napi::Function cb = info[0].As<Napi::Function>(); cb.Call(env.Global(), { Napi::String::New(env, "hello world") });...
NODE_API_MODULE是node-addon-api定义的宏。 #define NODE_API_MODULE(modname, regfunc) \staticnapi_value __napi_##regfunc(napi_env env, napi_value exports) { \returnNapi::RegisterModule(env,exports,regfunc);\}\NAPI_MODULE(modname,__napi_##regfunc) ...