8e64cfc4b2a9f17387f0de66a0d01630
Electron 中 Node Native 模块的安装与编译指南

在做多译的过程中有个上实现跨应用复制文本的需求,在发现目前可能唯一能实现的是 robotjs,带有node native模块的一个包。所以这篇文章将以 robotjs 为例,和大家介绍 native 模块在 Electron 中的使用方法。


首先讲讲什么是 Node Native 模块?
即模块中包含用 c 编写的代码,编译出来在 Release 目录下包含有.node 文件。
接下来具体展开。

报错说明

在安装 robotjs 之后,准备运行main端。结果很不幸,翻车了,报错提示如下:

<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.node 是另外一个版本 Node 编译的,与目前使用的 Node 版本不一致,需要重新编译一下robotjs。
如果大家去翻一下robotjs 模块,大家可以看到在build/Release/文件夹下会有robotjs.node 文件。而.node文件是由 c 编译过来的。所以我们必须要保证编译使用的 node 版本是正确的。
可能大家会问,为什么会出现 node 版本不一致的情况?原因很简单,因为 Electron 内部内置了一个 node 。因此用 Electron 来执行 native 模块,相当于用不同的 node 版本在执行 native 模块,这个时候就会报上述的错误。

解决方案

那正确的解决方案怎么办呢?electron-builder 提供了重构的功能,只要执行

electron-builder install-app-deps

这个指令即可。
但是有个细节前提需要注意,那就是你需要rebuild的模块必须在dependencies中,不能在devDependencies中。因为electron-builder只会rebuild dependencies中依赖,具体可以看这里ref node version error
此外,从开发流程上来说,可以把这行指令集成进 npm scripts 中:

```json
"scripts": {

top Created with Sketch.