当然可以,以下是一个简单的N-API示例,它创建了一个名为"hello" 的本地模块,该模块包含一个名为"hello" 的函数,当调用时会返回字符串 "Hello, world!"。
首先,你需要创建一个新的Node.js项目,然后在项目目录中创建一个名为hello.c
的文件,文件内容如下:
c
arduino
#include <node_api.h>
// 这是一个简单的N-API函数,它返回一个字符串 "Hello, world!"
napi_value Hello(napi_env env, napi_callback_info info) {
napi_value greeting;
napi_status status;
// 创建一个新的JavaScript字符串值
status = napi_create_string_utf8(env, "Hello, world!", NAPI_AUTO_LENGTH, &greeting);
if (status != napi_ok) return NULL;
return greeting;
}
// 初始化函数,用于设置N-API函数和模块导出
napi_value Init(napi_env env, napi_value exports) {
napi_status status;
napi_value fn;
// 创建一个新的函数对象
status = napi_create_function(env, NULL, 0, Hello, NULL, &fn);
if (status != napi_ok) return NULL;
// 设置导出的属性(即模块返回的函数)
status = napi_set_named_property(env, exports, "hello", fn);
if (status != napi_ok) return NULL;
return exports;
}
// 定义模块,指定初始化函数
NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)
然后,在同一目录下创建一个名为binding.gyp
的文件,文件内容如下:
json
json
{
"targets": [
{
"target_name": "hello",
"sources": [ "hello.c" ]
}
]
}
接着,你需要编译这个模块。在终端中执行以下命令:
sh
npm install -g node-gyp
node-gyp configure
node-gyp build
最后,在项目目录中创建一个名为index.js
的文件,文件内容如下:
javascript
ini
const hello = require('./build/Release/hello.node');
console.log(hello.hello()); // 应该输出 "Hello, world!"
现在,你可以通过运行 node index.js
来测试你的N-API模块,如果一切正常,你应该会在控制台看到输出 "Hello, world!"。
请注意,这个示例假设你已经安装了Node.js和node-gyp。如果你遇到任何问题,请确保你的开发环境已经正确配置,包括安装了所有必要的编译器和工具链。