在电子中使用 node.js 模块
Posted
技术标签:
【中文标题】在电子中使用 node.js 模块【英文标题】:Using node.js modules in electron 【发布时间】:2018-10-16 12:02:09 【问题描述】:
我有以下用例:
我想开发一个桌面应用程序,它将在 Raspberry Pi 上运行。我决定使用 Electron 构建桌面应用程序并使用 Angular 作为前端框架 (1)。
我需要为我的应用程序使用一些 npm 模块,以便与 GPIO 引脚或通过以太网 tcp 通信(“net”节点模块)进行通信。我试图在我的 Angular 应用程序中导入这些(例如 import Socket from 'net';),但我没有让它们工作。
尝试像这样构造网络套接字时出现以下错误:
let client = new Socket();
Uncaught (in promise): TypeError: undefined is not a constructor (evalating 'new net.Socket()')
这是基本架构中的一个错误,我无法在有角度的前端运行代码,这取决于后端。还是我做错了什么?
我还发现了电容器 (2),它允许调用本机 sdks。我尝试实现自己的插件,但出现与上述相同的错误。
感谢您的帮助。
(1)https://angularfirebase.com/lessons/desktop-apps-with-electron-and-angular/ (2)https://capacitor.ionicframework.com/docs/plugins/
【问题讨论】:
【参考方案1】:看来你对Electron有点疑惑,虽然你不是经典的client:server
模型,...
让我们先了解 Electron:
主进程和渲染器进程
main 进程用于处理/创建 BrowserWindows(Renderer) 和 用于从一个渲染器窗口到另一个渲染器的一些通信。 (也许还有一些其他特殊的东西)
渲染器是您真正运行大部分应用程序的地方。有节点, 你有你需要的一切。
然后您会注意到您需要在渲染器进程(网页)和主进程之间建立一个通道。
别担心,remote
就派上用场了:
Use main process modules from the renderer process.
远程模块提供了一种在渲染器进程(网页)和主进程之间进行进程间通信 (IPC) 的简单方法。
...即使反过来...
注意:对于反向(从主访问渲染器进程 进程),您可以使用webContents.executejavascript。
所以最后你将能够使用双方的所有魔法。
【讨论】:
以上是关于在电子中使用 node.js 模块的主要内容,如果未能解决你的问题,请参考以下文章
Node.js 电子预建错误找不到模块“浏览器窗口”Windows 10