nodejs开发直接能调用C的模块方式,从nodejs出现至今已经经历了几代了,目前最先进的方式就是n api方式了。他的好处在于不依赖v8引擎的api。因此v8引擎的api变化不会影响调用C模块,今天我们就先讲讲如何搭建开发环境。
在windows下:
首先,通过命令安装node-gyp
npm install -g node-gyp
然后安装windows开发包
npm install -g windows-build-tools
注意,如果是win7系统,这一步是非常慢的,原因是vs2015体积太大了,好几个G。
然后去C:\Users\[用户名]\.windows-build-tools下,将python添加到环境变量中。
注意:这里有个小技巧,如果觉得安装vs2015太慢,可以安装一半停掉进程,然后通过应用程序管理删除安装了一半的vs2015。
最后再手动点击C:\Users\[用户名]\.windows-build-tools下的安装包。
在linux下:
依次安装python2.7,make以及gcc即可。
下面教大家写一个最小的nodejs的C语言模块。
首先建立一个文件名为binding.gyp,内容如下:
{ "targets": [{ "target_name": "test", "sources": [ "test.c" ] }] }
这很简单,就是编译文件test.c,test.c文件如下:
#include <stdio.h> #include <node_api.h> napi_value Test(napi_env env, napi_callback_info info) { printf("%s %s", __DATE__, __TIME__); return NULL; } napi_value Init(napi_env env, napi_value exports) { napi_value fn; if (napi_create_function(env, NULL, 0, Test, NULL, &fn) != napi_ok) return NULL; if (napi_set_named_property(env, exports, "Test", fn) != napi_ok) return NULL; return exports; } NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)
编译命令如下:
node-gyp configure node-gyp build
其中node-gyp configure只需要执行一次即可。
注意:这里会有一个容易发生的错误,那就是提示找不到node-gyp.js文件
解决方式很简单,寻找到node-gyp.js这个文件,通常在C:\Users\[用户名]\AppData\Roaming\npm\node_modules\node-gyp\bin\node-gyp.js
然后设置环境变量npm_config_node_gyp为node-gyp.js文件的完整路径即可。
编译好后,会在build/Release目录下生成一个test.node文件。
调用这个文件的方法如下:
let ts = require('./test.node') ts.Test()
注意,如果只写require('./test')也是可以的,但是如果目录下有个test.js文件,会优先调用js文件,node文件就调用不到了。所以建议写全。
文章作者:沃航科技