我有一个 C 函数,我想在 Typescript NodeJS 项目中使用它。工作最小项目示例我创建了 .CPP 文件,该文件使用 N-API 包装我的 C 函数并使其可用于 NodeJS。我创建了...
我有一个 C 函数想要在 Typescript NodeJS 项目中使用。
可运行的最小项目示例
我创建了 .CPP 文件,使用 N-API 并将其提供给 NodeJS。我创建了一个 binding.gyp 将 Cpp 文件编译为 AddLib.node 文件 node-gyp .
@funvill\添加\src\添加.cpp
#include <napi.h>
#include <iostream>
int GetNumber() {
return 5;
}
// Wrappers for the C++ functions
Napi::Value GetNumberWrapped(const Napi::CallbackInfo &info)
{
Napi::Env env = info.Env();
int result = GetNumber();
return Napi::Number::New(env, result);
}
// Initialization of the addon
Napi::Object Init(Napi::Env env, Napi::Object exports)
{
// Example
exports.Set(Napi::String::New(env, "GetNumber"), Napi::Function::New(env, GetNumberWrapped));
return exports;
}
NODE_API_MODULE(myaddon, Init)
@funvill\添加\绑定.gyp
{
"targets": [
{
"target_name": "AddLib",
'sources': [
'src/add.cpp',
],
"include_dirs": [
"<!@(node -p \"require('node-addon-api').include\")",
],
"dependencies": [
"<!(node -p \"require('node-addon-api').gyp\")"
],
"cflags!": [ "-fno-exceptions" ],
"cflags_cc!": [ "-fno-exceptions" ],
"defines": [ "NAPI_DISABLE_CPP_EXCEPTIONS"],
"libraries": []
}
]
}
接下来,我 在模块中 index.ts index.ts.d
@funvill\添加\src\index.ts
import * as AddLib from "../build/Release/AddLib";
export function GetNumber():number {
return AddLib.GetNumber();
}
当我构建该项目时出现以下错误
src/index.ts:1:25 - error TS2307: Cannot find module '../build/Release/AddLib' or its corresponding type declarations.
1 import * as AddLib from "../build/Release/AddLib";
~~~~~~~~~~~~~~~~~~~~~~~~~
Found 1 error in src/index.ts:1
我认为(我可能错了)这是因为'../build/Release/'文件夹中的 AddLib.node 文件旁边没有 Typescript 声明文件。
问题1:如何解决此错误?
该模块确实已构建,并且我能够将其安装在其他项目中而不会出现其他错误。
问题 2:在 @funvill\add\src\index.ts ,我需要用 Typescript 函数包装来自原生节点插件的函数,因此它们会使用 Typescript 声明文件导出。这感觉不对。有更好的方法吗?