将本机模块构建为电子应用程序的一部分

Building native modules as part of electron app

我目前正在使用 electron、react、typescript 和 NodeJS 本机模块构建应用程序。我使用提供的样板代码 (https://github.com/electron-react-boilerplate/electron-react-boilerplate) 启动了应用程序。

我希望向应用程序中添加一些本机模块,最好将其编写为应用程序中的库。目前我已经编写了一个 C++ 模块来读取一些内存统计信息。我可以通过如下导入模块在开发模式下 运行 时使模块工作:const native = require('./lib/memmonitor/build/Release/memmonitor.node');'.

我 运行 遇到的第一个问题是模块需要通过进入 director 并手动 运行 electron-rebuild 手动构建。理想情况下,这应该由 运行 yarn installyarn electron-rebuild 触发(均在样板 package.json 中定义);但是这些命令似乎只关心通过 node_modules.

包含的本机模块

我遇到的第二个问题是,在打包应用程序时,节点模块没有包含在最终构建中,导致电子应用程序因找不到节点模块而无法启动。

是否可以将本机模块作为应用程序构建的一部分构建,并将其包含在最终包中,或者是否标准为每个自定义本机模块都有一个单独的 repo,让应用程序将库包含为依赖关系?

因此,在断断续续地想出如何完成这项工作的几周后,结果证明答案是使用 yarn.

的单行线。

“技巧”是使用 yarn add link:../path/to/native/module 将模块作为依赖项添加到项目中。这反过来又告诉 yarn/webpack/electron-builder 关于模块的信息,工具将正确处理模块的构建。