它们是提高 Node.js 代码性能和功能的一种方法,可以直接在 JavaScript 环境中扩展 C 代码。换句话说,C 插件是您为 Node.js 创建的模块,它允许您编写 C 函数和库并在 JavaScript 代码中使用它们。
它们基本上是 JavaScript 和 C 之间的桥梁,这意味着 Node.js 可以运行较重的代码,而不会失去灵活性,最重要的是,它的简单性。
首先,让我们为我们的代码创建一个目录
mkdir addon cd addon
接下来,让我们创建初始化 package.json 并下载 lib node-gyp (确保在您的操作系统上正确安装依赖项)
npm init -y npm i node-gyp
在我们的package.json中,我们将为我们的插件创建一个构建脚本。
mkdir addon cd addon
现在,我们将在 C 中创建插件并配置我们的绑定。
npm init -y npm i node-gyp
"scripts": { "build": "node-gyp configure build" }
准备好,一旦创建了这两个文件,我们就可以运行我们的构建脚本(npm run build)并等待整个过程能够享受我们的插件。接下来,我们将创建一个新文件并在终端中执行命令 node index.js
// array_sum.cpp #include <node.h> namespace demo { using v8::Array; using v8::Context; using v8::Exception; using v8::FunctionCallbackInfo; using v8::Isolate; using v8::Local; using v8::Number; using v8::Object; using v8::Value; void SumArray(const FunctionCallbackInfo<Value> &args) { Isolate *isolate = args.GetIsolate(); Local<Context> context = isolate->GetCurrentContext(); Local<Array> array = Local<Array>::Cast(args[0]); uint32_t length = array->Length(); double sum = 0; for (uint32_t i = 0; i < length; ++i) { Local<Value> element = array->Get(context, i).ToLocalChecked(); if (element->IsNumber()) { sum += element->NumberValue(context).FromJust(); } } args.GetReturnValue().Set(Number::New(isolate, sum)); } void Initialize(Local<Object> exports) { NODE_SET_METHOD(exports, "sum", SumArray); } NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize) }
当目标是优化关键操作的性能或与本机代码集成时,插件是强大的资源。尽管它们需要 C 语言知识并增加项目复杂性,但对于纯 JavaScript 无法提供理想解决方案的情况,它们可以成为完美的解决方案。借助 N-API 等工具,插件开发变得更加易于访问和稳定,使您的项目能够将 JavaScript 的实用性与 C 的效率结合起来。
存储库链接: cpp-addon-nodejs
参考文献: Node.js
以上是C 插件 无 Node.js的详细内容。更多信息请关注PHP中文网其他相关文章!