【OpenHarmony】napi基本用法----HelloWorld
文章目录
创建Hello.cc文件
// hello.cc using Node-API#include namespace demo {napi_value Method(napi_env env, napi_callback_info args) { napi_value greeting; napi_status status; status = napi_create_string_utf8(env, "world", NAPI_AUTO_LENGTH, &greeting); if (status != napi_ok) return nullptr; return greeting;}napi_value init(napi_env env, napi_value exports) { napi_status status; napi_value fn; status = napi_create_function(env, nullptr, 0, Method, nullptr, &fn); if (status != napi_ok) return nullptr; status = napi_set_named_property(env, exports, "hello", fn); if (status != napi_ok) return nullptr; return exports;}NAPI_MODULE(NODE_GYP_MODULE_NAME, init)} // namespace demo
- 每一个node.js的插件,都必须暴露如下模式的初始化函数:
void Initialize(Local<Object> exports);NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
- 参数
module_name
除了后缀.node
不一样之外,必须和最终的二进制文件名称相匹配。 - 上述列子中,初始化函数是
init
,module_name
使用了NODE_GYP_MODULE_NAME
宏,该宏在使用node-gyp
进行编译时,会保证二进制文件名称被当作第一个参数传递给NODE_MODULE
。
创建binding.gyp
{ "targets": [ { "target_name": "addon", "sources": [ "hello.cc" ] } ]}
- 该文件是json格式的,被工具
node-gyp
所使用,用来编译我们的插件。
编译插件
- 在我们的项目目录下执行
node-gyp configure build
编译我们的插件。 - 编译完成后在目录
./build/Release
下面会生成我们的插件的二进制文件addon.node
。
测试
- 编写测试文件如下
// hello.jsconst addon = require('./build/Release/addon');console.log(addon.hello());// Prints: 'world'
- 执行测试文件
node hello.js
,会打印world
。
全部代码在这里