Node.js原生模块开发之N-API开发教程

长话短说,N-API在node8.0以后开始加入支持,目的在于解决node跨版本之间原生模块的兼容问题,Nan原生模块无法兼容不同版本的Node,需要重新编译(看脸和google的心情)。N-API做了一层抽象,实现了跨版本支持。

需要注意一点,10.0之前,N-API是试验模式,使用该模块的时候会在stderr也可能是stdout输出一段警告,程序不依赖控制外可以无视此警告。10.0以后默认支持,警告不再复现

准备工作:

node环境:node 10.X

node开发环境:https://github.com/nodejs/node

需要安装的模块:npm/node-gyp

本人开发环境:debian 9/Linux kernel 4.9/gcc 6.3.0

最简易的开发方式,进入源码目录下的~/node-master/test/addon-napi/1_hello_world/

直接编译:#node-gyp configure &&node-gyp build

结果呢,当然是一堆错误,参照第二个例子修改这个hello world即可

ANSI C的库可以直接使用,三方库需要在binding.gpy里配置,相当于-l -L这些参数去搞gpy文件即可,google搜node-gpy使用

下边简单介绍一下API调用

NAPI_CALL(env, napi_throw_error(env,”timeout 001″,”time out”));

通过NAPI_CALL宏来调用N-API,N-API帮助去官网看,各种函数,上边这个例子是调用了一个抛出异常的API。

napi_value val1;

通过napi_value声明一个nodejs变量。

变量的初始化通过NAPI_CALL来调用对应的API来实现,可以创建

这么多类型的js变量。

NAPI_CALL(env, napi_create_string_utf8(env, str, str_len, &val1));

这里创建了一个val1的js字符串,还是utf8版本的

如果你的缓存区是个字节流,NAPI能自动给你转UTF-8,大写的赞。

没了,就这么多,不会的看例子。

有心情继续写。

我刚发布的npm模块叫xd-synchttp

执行的功能是同步获取http请求结果。解决http模块全异步的局限性。有些场景必须使用同步。模块内加了超时设定,超时了就会抛出异常。欢迎使用

const sync = require('xd-synchttp');
let content = "";
try{
    content = sync.http_get('http://www.csdn.net',0);//0为不超时
}
catch(err)
{
console.log(err);
}

《Node.js原生模块开发之N-API开发教程》有一个想法

  1. Pingback: viagra

发表评论

电子邮件地址不会被公开。 必填项已用*标注