【Electron】C++ 模块编译

616 阅读2分钟

背景

electron 客户端有串口相关业务,需要使用 node-searilport 模块,该模块是 C++ 模块,需要经过编译才能在 js 环境中使用。然后根据网上的教程,一直没成功,真的是要砸键盘了,多次尝试后才成功,所以分享出来。

环境

  • system: win10 64
  • node: 16.19.0
  • npm: 8.18.0
  • electron:19.1.9

编译器

编译用到 node 模块 node-gyp,他的作用是编译 C++ 模块。 直接安装就可以了

npm i node-gyp

C++ 开发环境

既然需要编译C++模块,那么C++环境必不可少。node-gyp 的相关文章中都推荐 Windows-Build-Tools,这个不管用,只能在老版本的 node-gyp 中使用,而且已经被原作者摒弃。

image.png

node-gyp 官网推荐 Visual Studio Build Tools, 这个工具需要跟你的系统以及node版本,electron版本相匹配,所以,选择 2019 版(此版本官网不提供下载,请使用2019版

image.png 安装过程中,选择 C++ 的桌面开发

image.png

如果已经安装多个版本,可配置

# 查询
npm config get msvs_version
# 设置
npm config set msvs_version 2019

python 环境

node-gyp 封装了由 python 编写的 gyp 模块,所以 python 也需要安装。同样的,很多文章推荐使用 python 2.7,NO!这个也过时了,需要安装最新的 python 版本,3.11 或 3.10 都可以。

如果已经存在过往版本,可以通过配置

npm config set python python3.11

选择模块

C++ 模块有对 node 和 electron 版本有要求,如 node-serailport,选择 10 版本以上的编译不通过,降级为 9.2.8 就可以

编译 32 位或 64 位

采用 electron-builder 进行编译时需要注意,在配置文件 electron-builder.yaml 中,需要打开 npmRebuild

npmRebuild: true

确保切换 32 位或 64 位时,需要编译的包根据 arch 不同重新编译