`
骑猪逛街666
  • 浏览: 141248 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

拥抱 Node.js 8.0,N-API 入门极简例子

阅读更多
阅读原文请点击: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-v18.16.0-win-x64

    Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好,V8引擎执行Javascript的速度非常快,性能非常好,基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展...

    Node.js-mocker-api用于为RESTAPI创建模拟服务

    Node.js-mocker-api是专为开发人员设计的一个实用工具,旨在帮助他们在没有实际REST API服务器的情况下,快速构建和测试基于REST API的应用程序。这个库利用了Node.js的强大功能,允许开发者模拟各种HTTP响应,包括...

    Node.js-Todokit-api是TodoKit的服务器端存储库使用Expressjs

    **Node.js-Todokit-api详解** Node.js-Todokit-api是一个基于Node.js的服务器端项目,主要用于TodoKit应用的数据存储和处理。这个项目利用了Express.js框架,它是一个轻量级且灵活的Web应用程序框架,使得构建...

    node.js 安装包 10.16.3-x64

    Node.js 是一个开源、跨平台的JavaScript运行环境,它允许开发者在服务器端执行JavaScript代码,极大地拓宽了JavaScript的应用领域。10.16.3-x64 版本是 Node.js 的一个稳定版本,适用于64位操作系统。下面将详细...

    node-v18.2.0-win-x64.zip

    Node.js 是一个强大的开源开发平台,它允许开发者使用 JavaScript 编程语言在服务器端执行代码。这个“node-v18.2.0-win-x64.zip”文件是 Node.js 的一个特定版本,针对Windows 64位操作系统。在这个版本中,用户...

    node-v16.15.1-win-x64.zip

    Node.js,一个基于Chrome V8引擎的JavaScript运行环境,以其高效的非阻塞I/O模型和事件驱动的编程模式,为开发者提供了在服务器端运行JavaScript的可能。这个名为“node-v16.15.1-win-x64.zip”的压缩包,包含了适用...

    Node.js v4.0.0-pre Documentation

    Node.js v4.0.0-pre 是一个重要的版本更新,它标志着Node.js和io.js的合并,这两大JavaScript运行环境的统一为开发者提供了更稳定和一致的开发体验。这个版本的文档是理解、学习和使用Node.js的关键资源,无论是新手...

    Node.js-n-交互管理你的Node.js版本

    Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript进行编程,提供了一套强大的API来处理I/O操作,如文件系统、网络通信等。由于其非阻塞I/O和事件驱动的特性,Node.js在...

    最新版linux node-v10.22.1-linux-x64.tar.gz

    Node.js的生态系统庞大且活跃,提供了无数的开源项目和工具,如Express.js(一个快速、开放、极简的Web应用框架),React Native(用于构建原生移动应用的JavaScript框架),以及MongoDB驱动(用于与MongoDB数据库...

    node-v16.16.0-win-x64.zip

    Node.js 是一个强大的开源、跨平台的JavaScript运行环境,它允许开发者在服务器端运行JavaScript代码。这个环境由Ryan Dahl在2009年创建,它的核心特性是利用非阻塞I/O模型,使得Node.js非常适合构建高效、可扩展的...

    Node.js-Pokemon-GO-node-api是PokemonGOAPINode.js库

    《深入探讨Node.js-Pokemon-GO-node-api:打造Pokemon GO API的Node.js实践》 在当今的编程世界中,Node.js以其高效的异步非阻塞I/O和强大的JavaScript支持,成为构建网络应用的首选工具之一。而“Pokemon-GO-node-...

    Face-api.js静态页面版Demo

    JavaScript人脸识别库Face-api.js的示例,无需安装nodejs,iis本地直接看效果。注意调用摄像头不能用IP访问,只能localhost,远程预览需要HTTPS;iis无扩展名文件若出现404,需在mime类型中添加扩展名【.】类型...

    node-v12.17.0-headers.tar.gz

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它允许开发者在服务器端使用 JavaScript 进行编程,提供了一套丰富的库和API,极大地简化了网络应用的开发。 描述中的信息同样简洁,只给出了文件名,...

    Node.js-tiny-json-http极简的HTTP客户端用于GET和POSTJSON负载

    **Node.js-tiny-json-http极简的HTTP客户端用于GET和POST JSON负载** 在现代Web开发中,Node.js凭借其非阻塞I/O模型和事件驱动的特性,成为了构建服务器端和网络应用的理想选择。其中,HTTP请求是进行数据交互的...

    nodejs(node-v16.13.2-x64.msi)-(node-v18.12.1-x64.msi)

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行编程,极大地扩展了 JavaScript 的应用范围。Node.js 的设计思想是事件驱动、非阻塞I/O模型,这使得它在...

    Node.js-APIGenerator-实时生成RESTandGraphQLAPIs

    **Node.js API Generator - 实时生成 REST 和 GraphQL APIs** 在当今的Web开发中,API(应用程序接口)扮演着至关重要的角色,尤其是RESTful API和GraphQL API。这两种技术都是用于构建可扩展、高效且灵活的后端...

    Node.js-node-crypto-api提供一个API来消费来自多个加密货币市场的数据

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它让开发者能够在服务器端使用 JavaScript 进行编程。在 Node.js 的生态中,有许多丰富的库和模块,其中 `node-crypto-api` 是一个专门用于处理加密货币...

    Node.js-weibo-request利用m.weibo.cn的公开接口读取单条微博数据

    在IT行业中,Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它允许开发者使用JavaScript进行服务器端编程。在这个场景中,我们关注的是一个名为"Node.js-weibo-request"的库,它专门用于从m.weibo.cn的公开...

    Node.js(node-v21.6.0.tar.xz)

    Node.js是一个基于V8引擎的开源、跨平台的JavaScript运行环境,用于执行JavaScript代码。它允许开发者使用JavaScript编写服务器端应用程序,使得前后端语言统一,提高开发效率。Node.js提供了一个非阻塞I/O模型,使...

    Node.js-Just-API是一个健壮的基于规范的HTTPAPIs(RESTGraphQL)测试框架

    Just-API是一个健壮的,基于规范的无代码测试框架,用于测试REST,GraphQL(或任何基于HTTP的)API。 它在node.js上运行。 Just-API允许用户在不编写代码的情况下测试API。

Global site tag (gtag.js) - Google Analytics