elecctron引入robotjs的坑

简介: elecctron引入robotjs的坑

想在Electron上实现截图、屏幕取色的功能,然后各种搜索最终锁定了robotjs这个node库,在GitHub上也搜到一个做的比较叼的Electron应用colorpicker,发现用的就是这个robotjs。既然人家能做的这么叼,那么这个库一定很好用,robotjs的GitHub也算是star比较多的。

首先我使用npm i robotjs安装到了项目中,然后require('robotjs');很不幸,翻车了,报错提示'<project>/node_modules/robotjs/build/Release/robotjs.node' was compiled against a different Node.js version using NODE_MODULE_VERSION 57. This version of Node.js requires NODE_MODULE_VERSION 54. Please try re-compiling or re-installing the module (for instance, using  npm rebuild or npm install). 好像大概意思是需要我重新编译一下robotjs,大概翻了翻robotjs源码,的确发现有c文件,可能就是需要编译下,第一次接触这块,可能需要我更换对应NODE_MODULE_VERSION版本的node,但是查阅node文档发现

网络异常,图片无法展示
|

好坑爹啊,没有54,那么54是从哪里来的呢?之后使用nvm切换各种node版本尝试都对应不上,后来苦苦google搜索,突然发现有篇博客

网络异常,图片无法展示
|

在另外的一篇博客也有提到

网络异常,图片无法展示
|

哇。。好惨,不是node版本的问题,Electron使用的node版本这么坑,卧槽! 那正确的解决方案怎么办呢?博客中提到了electron-rebuild,我猜可能需要我使用指定的Electron版本编译出来一个robotjs.node,那么creator使用的Electron版本多少呢?

网络异常,图片无法展示
|
process.versions里面有,使用的是1.7.5,需要注意的是,Creator在1.7的版本升级了node版本,所以,这个也有点坑哈,让我哭一会! 找到了Electron的开发版本,在 robotjs的npm文档的building部分上并没有细说编译参数,但是提到了使用node-gyp,那么我们就全局安装下 npm i -g node-gyp文档上说要build下,那么就执行下 node-gyp rebuild --runtime=electron --target=1.7.5 --disturl=https://atom.io/download/atom-shell --abi=48注意这个--target就是Creator使用的Electron版本,在Creator2.x版本中使用的是1.7.5,如果不出意外,会重新生成一份node_modules/robotjs/build/Release/robotjs.node执行文件,Creator再次require的时候,就能正常使用了。

也有其他解决方案说要安装electron-rebuild,但是从我个人使用来说,好像没用上,后续再研究吧

总结一句话,如果对node编译二进制包不了解的话!真的很坑!

在robotjs的GitHub上也有相关issue提到了这个问题,解决办法大致相同。

其他方案:

网络异常,图片无法展示
|
不过使用起来可能有点麻烦,要想获取某个位置的像素,可能还需要自己额外处理

  • Electron应用nanako同样也实现了这个拾色功能,其实也是调用了screencapture,不过这个好像只处理了Mac平台

网络异常,图片无法展示
|

之后这个在获取到截图之后,为了获取某个位置的像素,做了for循环处理,看的也是有点懵逼

网络异常,图片无法展示
|

网络异常,图片无法展示
|



目录
相关文章
|
4月前
|
安全 Unix 物联网
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 9 月更新)
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 9 月更新)
461 2
|
8月前
|
人工智能 Linux C++
即开即用,封装 Flask 项目为 exe 文件实操步骤
即开即用,封装 Flask 项目为 exe 文件实操步骤
|
11月前
|
JSON 数据挖掘 API
lazada商品详情接口 (lazada API系列)
Lazada 是东南亚知名电商平台,提供海量商品资源。通过其商品详情接口,开发者和商家可获取商品标题、价格、库存、描述、图片、用户评价等详细信息,助力市场竞争分析、商品优化及库存管理。接口采用 HTTP GET 请求,返回 JSON 格式的响应数据,支持 Python 等语言调用。应用场景包括竞品分析、价格趋势研究、用户评价分析及电商应用开发,为企业决策和用户体验提升提供有力支持。
389 21
|
JavaScript 前端开发 Linux
在 Node.js 和 Electron 中获取设备 UUID 的最佳实践
【JS】在 Node.js 和 Electron 中获取设备 UUID 的最佳实践
1243 1
|
机器人 计算机视觉
技术好文:RobotJS截取屏幕screen.capture踩坑
技术好文:RobotJS截取屏幕screen.capture踩坑
275 0
|
存储 JavaScript Java
使用NekoHTML解析HTML并提取META标签内容
关于NekoHTML的代码样例,这里提供一个简单的示例,用于展示如何使用NekoHTML来解析HTML文档并提取其中的信息。请注意,由于NekoHTML的具体实现和API可能会随着版本更新而有所变化,以下代码仅供参考。 ### 示例:使用NekoHTML解析HTML并提取META标签内容 ```java import org.cyberneko.html.parsers.DOMParser; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml
280 1
|
SQL 安全 关系型数据库
【100天精通python】Day38:GUI界面编程_PyQt 从入门到实战(中)_数据库操作与多线程编程
【100天精通python】Day38:GUI界面编程_PyQt 从入门到实战(中)_数据库操作与多线程编程
627 0
|
JavaScript 前端开发
用JavaScript脚本将当地时间转换成其它时区
用JavaScript脚本将当地时间转换成其它时区
|
机器学习/深度学习 算法 Python
从零开始:构建你的第一个机器学习模型
【7月更文第16天】在机器学习的浩瀚宇宙中,迈出第一步总是充满挑战又激动人心的。本文旨在通过一个简单而经典的案例——线性回归,引领你动手构建首个机器学习模型,让你从零开始,逐步掌握模型构建的基本流程。
532 3