当前位置:嗨网首页>书籍在线阅读

14-高级内容_Node的C、C++插件

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

[toc]

1.6 高级内容:Node的C/C++插件

安装了 Node 之后,你就可以随意用它了,但你可能会好奇自己都安装了些什么。

虽然用于创建 Node 程序的语言是基于 JavaScript 的,但是 Node 很大程度上却是用 C++ 实现的,你可能没有注意到这一点。如果你对 C 和 C++ 语言很熟悉,那么你就可以用 C/C++ 创建 Node 插件(add-on),来扩展 Node 的功能。

编写一个 Node 插件和编写一个传统的 C/C++ 程序并不一样。一方面,有很多库,比如 V8 的库,可以供你使用。另一方面,编译插件所用的工具不是你平常所使用的工具。

Node 文档中介绍插件的部分给我们提供了一个 Hello World 插件的例子。你可以看看这个简单例子的代码,如果你使用过 C/C++ 语言的话,它看起来会很熟悉。完成了代码的编写之后,你将需要使用一个工具—— node-gyp ,来将插件编译为一个 .node 文件。

首先,这个工具会生成一个 binding.gyp 的配置文件,文件中使用类 JSON 的格式提供了插件的信息:

{
   "targets": [
     {
       "target_name": "addon",
       "sources": [ "hello.cc" ]
     } 
   ] 
}

下面的命令就是用来生成这个配置文件的:

node-gyp configure

它会创建一个相应的配置文件(对于UNIX系统来说是一个 Makefile ,对Windows而言是一个 vcxproj 文件),将其放在 build/ 目录中。然后运行下面的命令来构建我们的 Node 插件:

node-gyp build

编译后的文件将安装在 build/release 目录中,以供使用。这时候,像其他的插件一样,你就可以在你的程序中引用这个插件了(详情请见第3章)。

**维护原生模块** 虽然这已经超出了本书的范围,但是如果你对创建原生模块(插件)有兴趣的话,你需要留意平台之间的区别。比如说,微软针对原生模块,在 Azure 上提供了专门的说明。知名的 node-serialport 模块的维护者将他所遇到过的模块维护中的挑战都列了出来。

当然了,如果你对 C/C++ 并不熟悉,你也可以使用 JavaScript 来创建模块,这部分内容会在第 3 章讲解。但是如果你确实熟悉这些语言,那么插件可以是一种有效的扩展,特别是针对系统相关的需求。

要知道,从 v0.8 到 v6.x,Node 呈现出一种戏剧性的快速发展。如果在升级过程中出现任何问题,你可以安装NAN(Native Abstractions for Node.js)。这个头文件会帮你在不同的 Node.js 版本之间实现平滑过渡。