繁体   English   中英

如何使用.node文件?

[英]How to use a .node file?

我试图安装node_mouse ,当我查看我的节点模块文件夹而不是正常的.js文件扩展名时,我找到了一个.node文件扩展名。 我怎么能运行node_mouse? 我看了这个,我认为它可能是用C ++编写的插件,但我不确定( Node addons

是的,正常的“require”用法适用于.node文件。 这些文件的目的是创建可移植的二进制文件(使用来自C ++的node-gyp),可以像普通节点一样引用。 请参阅节点addon docs的hello.js部分:

const addon = require('./build/Release/addon');

console.log(addon.hello());

在查看这个NPM lib之后,它在我的Windows,Mac和Linux VM上正确地加载了几个不同的节点版本,但二进制文件会抛出一系列错误。 在Windows上,它有一个特定版本的Windows作为构建目标(可能是NT,因为Windows 10会抛出错误):

Error: %1 is not a valid Win32 application.

在OS X上,这是dyld无法打开二进制引用的共享库。 (见man dlopen):

Error:dlopen(/.../node_mouse/node_mouse.node, 1): no suitable image found. 

在Linux上,我们得到一个ELF头错误,它告诉我们二进制文件不能在这个操作系统上运行。

Error: /app/available_modules/1484064894000/node_mouse/node_mouse.node: invalid ELF header

作者似乎做了很多Windows NT工作,所以如果你真的需要这个工作,找到一个新的Windows NT副本与所有的开发添加。

最后,考虑在代码库中运行第三方闭源二进制文件的安全风险(尤其是控制鼠标移动的二进制文件)。

是的,这些.node文件是Node Addons(二进制模块),你应该可以在它们上面使用require() 请注意,它将首先查找.json.js文件。

文档

已编译的Addon二进制文件的文件扩展名为.node(与.dll或.so相对)。 编写require()函数以查找具有.node文件扩展名的文件,并将其初始化为动态链接库。

调用require()时,通常可以省略.node扩展名,Node.js仍然可以找到并初始化Addon。 但需要注意的是,Node.js将首先尝试定位和加载碰巧共享相同基本名称的模块或JavaScript文件。 例如,如果在二进制addon.node所在的目录中存在addon.js文件,则require('addon')将优先于addon.js文件并加载它。

您还应该知道这些是二进制模块,因此加载它们就像运行标准可执行文件(如果您只熟悉Windows那样,请考虑.exe文件)。 与本机可执行文件一样,它们更依赖于系统的细节,也可能存在安全风险。 虽然标准的.js模块是可移植的(有一些警告),但.node二进制模块将基本上为特定的机器架构和操作系统构建,甚至通常是特定版本的Node。 如果您在加载二进制模块时遇到问题,则应确保为系统运行正确的版本,并与提供商确认您的系统实际受支持。

有时特定的功能或性能需求需要它,但是使用Node.js你不应该加载二进制模块,除非你真的需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM