想在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搜索,突然发现有篇博客说
image.png
在另外的一篇博客也有提到
image.png
哇。。好惨,不是node版本的问题,Electron使用的node版本这么坑,卧槽!
那正确的解决方案怎么办呢?博客中提到了electron-rebuild,我猜可能需要我使用指定的Electron版本编译出来一个robotjs.node,那么creator使用的Electron版本多少呢?
image.png
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提到了这个问题,解决办法大致相同。
其他方案:
-
使用mac自带的screencapture实现截图
-
这个node-screencapture相对完善一点,针对不同平台做了不同的处理
image.png
不过使用起来可能有点麻烦,要想获取某个位置的像素,可能还需要自己额外处理 -
Electron应用nanako同样也实现了这个拾色功能,其实也是调用了screencapture,不过这个好像只处理了Mac平台
image.png
之后这个在获取到截图之后,为了获取某个位置的像素,做了for循环处理,看的也是有点懵逼
image.png
网友评论