问题标签 [node-native-addon]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - LINUX 上的 Node.JS 原生插件
我学习了如何为 node.js 制作本机 c++ 插件,但现在我想在 linux 上制作一个已编译的插件。我从 /build/Release 文件夹中取出 .node 文件(我使用 node-gyp 进行编译)并将其放在 linux 文件夹中。该插件在 Windows 上正常工作,但在 linux 上我收到此错误:Error: /root/folder/addon3.node: invalid ELF header
. 此错误是什么意思以及如何解决?我以这种方式使用插件:
javascript - 原生插件如何影响 node.js 程序?
我有这样的代码:
它们工作正常,给出相同的结果,一切都很好,但唯一的问题是在第一个代码中 JS f() 大约需要 15 毫秒,但在第二个示例中需要大约 3 毫秒。而且这个结果是稳定的(当我多次启动程序时,它给出的结果几乎相同)。怎么会这样?为什么函数在 JS 上的性能取决于从原生插件调用独立函数?
PS 这是两次运行程序的控制台:
node.js - 处理 npm 依赖项中的版本不兼容
一些上下文
每次发布基于新版本 Node 的 VS Code 时,VS Code Arduino 扩展都会中断,直到发布新版本。
克隆了 Arduino 扩展 git repo 后,我将其作为扩展卸载并在调试器中运行。这行得通,现在我有了特定的情报,只要我知道如何采取行动就好了。这是消息:
这些文件中的最后一个(Windows x64 文件)确实存在于预期路径上,因此“没有可用的库”并不意味着它找不到该文件。这与报告找不到合适版本的消息的结尾一致。
这条消息的结尾表明npm rebuild
,或者npm i
我尝试了这些都无济于事。
翻箱倒柜package.json
_
依赖于node-usb-native
最新的(0.0.15)。更改它并运行npm i
会触发rebuild-serialport.js
似乎成功的安装后任务,但我在运行时遇到相同的错误。
问题
我该如何解决这个问题?
- 究竟需要重建什么?
usb-detection
未在依赖项(或 devDependencies)中列出,但如果我没记错的话node-usb-native
,取决于它。 - 我该如何解决这个问题,以便抱怨版本的代码看到新生成的位?
c++ - Node-ffi:在 js 中加载 C++ dll(具有外部依赖项)正在崩溃
我正在尝试使用 node-ffi 在 JS 中加载 c++ dll。当 dll 没有任何外部依赖项时,它可以正常工作。但是当它有任何外部依赖时,它就会崩溃。
当“MyDll”有外部依赖时,它会崩溃并抛出下面提到的错误。
node.js - 调用本机插件时电子崩溃,该插件使用窗口的 uiautomation 库来检测另一个窗口中的按钮
我有一个本地插件,可以检测缩放会议窗口并在其中找到一些按钮。
该本机插件是使用 NAPI(node-addon-api) 制作的,当我运行它时,它工作正常......(给我那个按钮名称)。
但是,当我尝试在电子中运行该本地插件时,它会使电子应用程序崩溃。
这是检测元素的本机插件 C++ 代码:
c++ - 无法使用自定义 libobs 构建 32 位 obs-studio-node
我可以64bit
obs-studio-node
用自定义构建OSN_LIBOBS_URL
但我无法32bit
obs-studio-node
使用自定义构建32bit
OSN_LIBOBS_URL
我遵循以下步骤
首先,我32bit
libobs
使用步骤构建
git clone --recursive https://github.com/stream-labs/obs-studio
cd obs-studio
mkdir build32
cmake -G "Visual Studio 16 2019" -A Win32 -S . -B build32 -DDepsPath=C:\Users\alokm\Downloads\dependencies2019\win32 -DCMAKE_CONFIGURATION_TYPES=Release -DENABLE_UI=false -DENABLE_SCRIPTING=false
cmake --build build32 --config Release
cd .\build32\
cpack -G TGZ
我已经obs-studio/build32/obs-studio-x86-26.4.9-modified.tar.gz
生成了
我用这个生成libobs
的建筑obs-studio-node
git clone https://github.com/stream-labs/obs-studio-node
cd obs-studio-node
mkdir build32
cmake -G"Visual Studio 16 2019" -A Win32 -DOSN_LIBOBS_URL="C:/Users/alokm/tmp/streamlabs/obs-studio/build32/obs-studio-x86-26.4.9-modified.tar.gz" -B build32
cmake --build build32 --config Release
此步骤给出链接器错误
在 32 位构建的情况下我缺少什么?
reactjs - Electron-TypeScript-React 应用程序中本机模块的接口
我正在使用 Electron、React 和 TypeScript 编写一个依赖于本机 Node 模块的应用程序。我启用了上下文隔离,并且正在使用预加载脚本将本机模块的 API 公开到全局范围。我的预加载脚本如下所示:
在我的应用程序的非打字稿版本中,我可以通过以下方式使用它:
然而,TypeScript 显然没有原生模块的 API 概念。我应该如何让它知道?我取得的一项成功是index.tsx
推杆:
但这似乎很笨拙。我应该在本机模块中放置一个 .d.ts 文件吗?我可以导出这个接口合并到不同的文件吗?作为参考,我将Neon与 N-API 后端一起使用。
node.js - 在 Node.js 中使用现有的 C 代码作为本机插件
我以前从未处理过 C 或 C++,所以请与我保持一致 :) 我想将此 Repo 中的 C 代码用作节点模块:
https://github.com/torvalds/pesconvert
我读到这可以通过 Node.Js Native Addons 来完成,但我能找到的所有示例都是关于集成 C++ 代码的。我已经安装了 node-gyp 和 windows-build-tools 来编译代码,但是因为我使用的是 windows,所以本地没有安装所需的 png.h 库。我下载了 libpng V1.6.37 并将其复制到我的项目目录中lib/lpng1637
。现在我必须编写 binding.gyp 文件,但我不知道如何编写它以便正确包含库。
我尝试了很多变化,这是我最新的masterpeace ...:DI 读到“库”中的引用必须指向 .a 文件,以防静态库,但甚至没有 .a 文件目录。所以我的关键问题是:我必须在 binding.gyp 文件中写什么才能正确引用 libpng-Library?
我会很高兴收到各种提示或附加信息!
cmake - 将 CMake 生成器表达式与 GYP 一起使用
我正在开发包含 C 和 C++ 源的 Node.js 本机模块。node-gyp
用于构建模块。
由于我只希望在 C 代码中出现一个警告错误,因此我在以下行中使用binding.gyp
:
这在编译 C 代码时工作正常,但会在每个 C++ 源文件上产生以下警告:
我找到了这个答案——将特定于 C 的 gcc 选项应用于 C/C++ 混合库——它在使用“纯”CMake 时解决了同样的问题。不幸的是,我没有找到是否可能以及如何将此条件正确添加到 GYP 配置文件中 - 也许使用变量和条件?请让我知道它是否可以解决。谢谢。
node.js - 如何在我的 Electron 应用程序中加载我自己的本机节点模块?
foo
我为我的 Electron 应用程序构建了一个 C++ 本机模块。该模块位于我的项目根目录中。我package.json
通过设置本地路径将项目添加到我的项目中 - 这是一个受支持并在此处描述的功能。
当我npm i
在我的 Electron 应用程序中执行时,所有本机模块都被编译并且我自己的模块吐出一个my-electron-app/foo/build/Release/foo.node
二进制文件。但是通过在我的 Electron 应用程序中“导入”模块require("foo")
失败,我收到以下错误:
如您所见,foo.node
不在其实际模块目录中搜索my-electron-app/foo/build/Release/
.
位于node_modules/
并包含build/Release
目录的所有其他本机模块都可以正常加载。
PS如果我复制foo.node
到预期的位置之一,模块加载正常。