我正在尝试为Node.js创建本地插件,当我包含
#include <napi.h>
VS Code的Intelli Sense显示无法检测node_api.h
的位置(它由napi.h
包含)。
node-gyp build
能够正常工作并编译。但我不理解这个头文件在系统中的位置,以及node-gyp
从哪里获取它?我需要将路径添加到Intelli Sense选项中,并更好地了解构建过程。
我正在尝试使用这个代码示例。
我正在尝试为Node.js创建本地插件,当我包含
#include <napi.h>
VS Code的Intelli Sense显示无法检测node_api.h
的位置(它由napi.h
包含)。
node-gyp build
能够正常工作并编译。但我不理解这个头文件在系统中的位置,以及node-gyp
从哪里获取它?我需要将路径添加到Intelli Sense选项中,并更好地了解构建过程。
我正在尝试使用这个代码示例。
我已经在C盘进行了全盘搜索(我的操作系统是Windows 10),发现头文件node_api.h
位于以下位置
C:\Users\<UserName>\AppData\Local\node-gyp\Cache\<NodeVersion>\include\node
还有其他标题,例如v8.h
如果您删除该文件夹,node-gyp build
将不再起作用。node-gyp configure
会再次下载所有标题并恢复上述提到的文件夹。
config.gypi
的文件,它类似于json。有一个名为nodedir
的属性,应该指向包含路径。下面是一个可以帮助找到这个属性的函数:
这应该是平台无关的。
const fsp = require('fs/promises');
const { existsSync, readFileSync } = require('fs');
const assert = require('node:assert');
const findnodeapih = () => {
assert(existsSync("./build"), "Haven't built the application once yet. Make sure to build it");
const dir = readFileSync("./build/config.gypi", 'utf8');
const nodedir_line = dir.match(/"nodedir": "([^"]+)"/);
assert(nodedir_line, "Found no matches")
assert(nodedir_line[1]);
console.log("node_api.h found at: ", nodedir_line[1]);
return nodedir_line[1]+"/include/node";
};
node-addon-api
模块。require('node-addon-api').include
包含,或者你可以在node_modules/node-addon-api
文件夹中找到它。
https://github.com/nodejs/node-addon-api/blob/master/doc/setup.md
require('node-addon-api').include
和 node_modules/node-addon-api
在 node_modules/node-addon-api/index.js
中是同一个文件夹。有napi.h
但没有node_api.h
。 - RussCodernode_api.h
存储在 ~/.node-gyp/16.17.0/include/node/node_api.h
。 因此,我可以通过路径 ~/.node-gyp/16.17.0/include/**
包含它。includePath
。
.vscode/c_cpp_properties.json
:{
"configurations": [
{
"name": "Mac",
"includePath": [
"${workspaceFolder}/**",
"~/.node-gyp/16.17.0/include/**"
],
"defines": [],
"macFrameworkPath": [
"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks"
],
"compilerPath": "/usr/bin/clang",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "macos-clang-arm64"
}
],
"version": 4
}
您可以通过更改路径来避免硬编码版本:
~/.node-gyp/**
......但请注意,如果您安装了多个版本的node,您将最终包含重复的头文件(并且会有糟糕的体验)。因此,您可以手动设置符号链接到~/.node-gyp/current
,该链接指向您正在使用的任何版本的node,然后将路径设置为~/.node-gyp/current/**
。或者,只需随意指向一个已安装的node版本,并希望头文件在不同版本之间没有太大变化...!
npm install -g node-gyp && node-gyp install
命令,但是我仍然看不到~/.node-gyp目录。 - user3064538
C:/Users/<user>/.node-gyp/<version>/include/node
。 - merlin.ye<user>
路径的? - itslittlejohn