内容简介:拥抱Node.js 8.0,N-API入门极简例子
本文摘录自《Nodejs学习笔记》,更多章节及更新,请访问 github主页地址 。欢迎加群交流,群号 197339705 。
N-API简介
Node.js 8.0 在2017年6月份发布,升级的特性中,包含了N-API。编写过或者使用过 node扩展的同学,不少都遇到过升级node版本,node扩展编译失败的情况。因为node扩展严重依赖于V8暴露的API,而node不同版本依赖的V8版本可能不同,一旦升级node版本,原先运行正常的node扩展就编译失败了。
这种情况对node生态圈无疑是不利的,N-API的引入正是试图改善这种情况的一种尝试。它跟底层JS引擎无关,只要N-API暴露的API足够稳定,那么node扩展的编写者就不用过分担忧node的升级问题。
如何使用N-API
先强调一点,N-API并不是对原有node扩展实现方式的替代,它只是提供了一系列底层无关的API,来帮助开发者编写跨版本的node扩展。至于如何编写、编译、使用扩展,跟原来的差不多。
本文会从一个超级简单的例子,简单介绍N-API的使用,包括环境准备、编写扩展、编译、运行几个步骤。
备注:当前N-API还处于试验阶段,官方文档提供的例子都是有问题的,如用于生产环境需格外谨慎。
1、环境准备
首先,N-API是8.0版本引入的,首先确保本地安装了8.0版本。笔者用的是 nvm
,读者可自行选择安装方式。
nvm i 8.0 nvm use 8.0
然后,安装 node-gyp
,编译扩展会用到。
npm install -g node-gyp
创建项目目录,并初始化 package.json
。
mkdir hello & cd hello # 目录名随便起 npm init -f
2、编写扩展
创建 hello.cc
作为扩展的源文件。
mkdir src touch src/hello.cc
编辑 hello.cc
,输入如下内容。
#include <node_api.h>
// 实际暴露的方法,这里只是简单返回一个字符串
napi_value HelloMethod (napi_env env, napi_callback_info info) {
napi_value world;
napi_create_string_utf8(env, "world", 5, &world);
return world;
}
// 扩展的初始化方法,其中
// env:环境变量
// exports、module:node模块中对外暴露的对象
void Init (napi_env env, napi_value exports, napi_value module, void* priv) {
// napi_property_descriptor 为结构体,作用是描述扩展暴露的 属性/方法 的描述
napi_property_descriptor desc = { "hello", 0, HelloMethod, 0, 0, 0, napi_default, 0 };
napi_define_properties(env, exports, 1, &desc); // 定义暴露的方法
}
NAPI_MODULE(hello, Init); // 注册扩展,扩展名叫做hello,Init为扩展的初始化方法
3、编译扩展
首先,创建编译描述文件 binding.gyp
。
{
"targets": [
{
"target_name": "hello",
"sources": [ "./src/hello.cc" ]
}
]
}
然后,运行如下命令进行编译。
node-gyp rebuild
4、调用扩展
未方便调用扩展,先安装 bindings
。
npm install --save bindings
然后,创建 app.js
,调用刚编译的扩展。
var addon = require('bindings')('hello');
console.log( addon.hello() ); // world
运行代码,由于N-API当前尚处于Experimental阶段,记得加上 --napi-modules
标记。
node --napi-modules app.js
输出如下
{"path":"/data/github/abi-stable-node-addon-examples/1_hello_world/napi/build/Release/hello.node"}
world
(node:6500) Warning: N-API is an experimental feature and could change at any time.
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
函数式算法设计珠玑
Richard Bird / 苏统华、孙芳媛、郝文超、徐琴 / 机械工业出版社 / 2017-4-1 / 69.00
本书采用完全崭新的方式介绍算法设计。全书由30个珠玑构成,每个珠玑单独列为一章,用于解决一个特定编程问题。这些问题的出处五花八门,有的来自游戏或拼图,有的是有趣的组合任务,还有的是散落于数据压缩及字串匹配等领域的更为熟悉的算法。每个珠玑以使用函数式编程语言Haskell对问题进行描述作为开始,每个解答均是诉诸于函数式编程法则从问题表述中计算得到。本书适用于那些喜欢学习算法设计思想的函数式编程人员、......一起来看看 《函数式算法设计珠玑》 这本书的介绍吧!
RGB转16进制工具
RGB HEX 互转工具
RGB CMYK 转换工具
RGB CMYK 互转工具