在电子中使用 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:


主进程和渲染器进程

ma​​in 进程用于处理/创建 BrowserWindows(Renderer) 和 用于从一个渲染器窗口到另一个渲染器的一些通信。 (也许还有一些其他特殊的东西)

渲染器是您真正运行大部分应用程序的地方。有节点, 你有你需要的一切。

然后您会注意到您需要在渲染器进程(网页)和主进程之间建立一个通道。

别担心,remote 就派上用场了:

Use main process modules from the renderer process.

远程模块提供了一种在渲染器进程(网页)和主进程之间进行进程间通信 (IPC) 的简单方法。

...即使反过来...

注意:对于反向(从主访问渲染器进程 进程),您可以使用webContents.executejavascript

所以最后你将能够使用双方的所有魔法。

【讨论】:

以上是关于在电子中使用 node.js 模块的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 电子预建错误找不到模块“浏览器窗口”Windows 10

在 Node.js 中发送电子邮件? [关闭]

适用于 Amazon SES 的 Node.js 模块 [关闭]

Node.js:使用 AWS SES 发送电子邮件

无法在 node.js 中导入模块 [重复]

在 node.js 中引发错误