阅读原文请点击:
http://click.aliyun.com/m/22548/
摘要: Node.js 8.0 在2017年6月份发布,升级的特性中,包含了N-API。N-API并不是对原有node扩展实现方式的替代,它只是提供了一系列底层无关的API,来帮助开发者编写跨版本的node扩展。
本文摘录自《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.
相关链接
阅读原文请点击:
http://click.aliyun.com/m/22548/
分享到:
相关推荐
Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好,V8引擎执行Javascript的速度非常快,性能非常好,基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展...
Node.js-mocker-api是专为开发人员设计的一个实用工具,旨在帮助他们在没有实际REST API服务器的情况下,快速构建和测试基于REST API的应用程序。这个库利用了Node.js的强大功能,允许开发者模拟各种HTTP响应,包括...
**Node.js-Todokit-api详解** Node.js-Todokit-api是一个基于Node.js的服务器端项目,主要用于TodoKit应用的数据存储和处理。这个项目利用了Express.js框架,它是一个轻量级且灵活的Web应用程序框架,使得构建...
Node.js 是一个开源、跨平台的JavaScript运行环境,它允许开发者在服务器端执行JavaScript代码,极大地拓宽了JavaScript的应用领域。10.16.3-x64 版本是 Node.js 的一个稳定版本,适用于64位操作系统。下面将详细...
Node.js v4.0.0-pre 是一个重要的版本更新,它标志着Node.js和io.js的合并,这两大JavaScript运行环境的统一为开发者提供了更稳定和一致的开发体验。这个版本的文档是理解、学习和使用Node.js的关键资源,无论是新手...
Node.js 是一个强大的开源开发平台,它允许开发者使用 JavaScript 编程语言在服务器端执行代码。这个“node-v18.2.0-win-x64.zip”文件是 Node.js 的一个特定版本,针对Windows 64位操作系统。在这个版本中,用户...
Node.js的生态系统庞大且活跃,提供了无数的开源项目和工具,如Express.js(一个快速、开放、极简的Web应用框架),React Native(用于构建原生移动应用的JavaScript框架),以及MongoDB驱动(用于与MongoDB数据库...
Node.js 是一个强大的开源、跨平台的JavaScript运行环境,它允许开发者在服务器端运行JavaScript代码。这个环境由Ryan Dahl在2009年创建,它的核心特性是利用非阻塞I/O模型,使得Node.js非常适合构建高效、可扩展的...
《深入探讨Node.js-Pokemon-GO-node-api:打造Pokemon GO API的Node.js实践》 在当今的编程世界中,Node.js以其高效的异步非阻塞I/O和强大的JavaScript支持,成为构建网络应用的首选工具之一。而“Pokemon-GO-node-...
Node.js 是一个开源、跨平台的JavaScript运行环境,它允许开发者在服务器端运行JavaScript代码。这个环境基于Google的V8引擎,这意味着它能够高效地执行JavaScript,使得开发人员可以利用JavaScript的强大功能来构建...
JavaScript人脸识别库Face-api.js的示例,无需安装nodejs,iis本地直接看效果。注意调用摄像头不能用IP访问,只能localhost,远程预览需要HTTPS;iis无扩展名文件若出现404,需在mime类型中添加扩展名【.】类型...
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它允许开发者在服务器端使用 JavaScript 进行编程,提供了一套丰富的库和API,极大地简化了网络应用的开发。 描述中的信息同样简洁,只给出了文件名,...
Node.js是一个基于V8引擎的开源、跨平台的JavaScript运行环境,用于执行JavaScript代码。它允许开发者使用JavaScript编写服务器端应用程序,使得前后端语言统一,提高开发效率。Node.js提供了一个非阻塞I/O模型,使...
**Node.js-tiny-json-http极简的HTTP客户端用于GET和POST JSON负载** 在现代Web开发中,Node.js凭借其非阻塞I/O模型和事件驱动的特性,成为了构建服务器端和网络应用的理想选择。其中,HTTP请求是进行数据交互的...
**Node.js API Generator - 实时生成 REST 和 GraphQL APIs** 在当今的Web开发中,API(应用程序接口)扮演着至关重要的角色,尤其是RESTful API和GraphQL API。这两种技术都是用于构建可扩展、高效且灵活的后端...
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行编程。在 Node.js 的生态中,有许多丰富的库和模块,其中 `node-crypto-api` 是一个专门用于处理加密货币...
Just-API是一个健壮的,基于规范的无代码测试框架,用于测试REST,GraphQL(或任何基于HTTP的)API。 它在node.js上运行。 Just-API允许用户在不编写代码的情况下测试API。
《新时期的Node.js入门》是李锴在2018年1月出版的一本专为初学者准备的Node.js教程,旨在帮助读者快速掌握这个强大的JavaScript后端开发平台。本书通过丰富的示例代码,深入浅出地介绍了Node.js的基础知识和实际应用...
Node.js是一个开放源代码、跨平台的JavaScript运行环境,它允许开发者在服务器端执行JavaScript代码,极大地扩展了JavaScript的应用范围,不再局限于浏览器端。 描述中提到的“Node JS library installer for ...
3. N-API(Node API)更新:N-API 是一个 C API,用于构建 Node.js 插件,它与 Node.js 的具体版本无关,确保插件的兼容性。 4. 事件循环和异步处理的改进:Node.js 的核心在于非阻塞I/O和事件驱动,新版本可能会...