javascript - 电子:NodeJS 'net' 模块返回空对象
问题描述
我刚刚开始开发我的第一个电子应用程序并导入了一些使用该net
模块的现有代码。当我从电子应用程序导入代码时,net
模块返回一个空对象。
const net = require('net'); // => {}
我认为电子将节点与所需的本机模块捆绑在一起,所以我对为什么导入不起作用感到有点困惑。
编辑:我已经用 引导应用程序vue-cli-tools
,所以它使用 webpack 来捆绑依赖项。不确定这是否重要。
解决方案
我认为电子将节点与所需的本机模块捆绑在一起,
确实如此,但是将浏览器运行时和 node.js 运行时捆绑在一起仍然会给您留下两个不同的运行时。
了解Main 和 Renderer 进程之间的区别对于 Electron 开发至关重要。
Main 进程在 Node.js 运行时上运行,并且可以访问 Node.js API(如net
)。
Renderer 进程在 Chromium 上运行,并且可以访问浏览器 API(如 DOM)。
您无法net
从客户端 Vue 代码访问,因为它在 Renderer 进程中运行。
你需要在主进程中创建一个服务,并在它和渲染器中运行的东西之间交换数据。
这通常使用IPC api完成。
// In main process.
const { ipcMain } = require('electron')
ipcMain.on('message-from-browser', (event, arg) => {
const something = doSomethingWithNetModule()
event.reply('reply-to-browser', something)
})
和
// In renderer process (web page).
const { ipcRenderer } = require('electron')
ipcRenderer.on('asynchronous-reply', (event, arg) => {
doSomethingWithDataFromNetModule(arg)
})
ipcRenderer.send('message-from-browser', 'do something with the net module please')
请注意,由于您使用的是 Webpack,因此您将遇到此问题require("electron")
中解释的问题。
推荐阅读
- reactjs - 数据搜索和 RR 重定向
- javascript - Bootstrap 折叠 - 传递值或获取 DOM 对象
- java - 使用 Java swing 制作交互式组件
- c# - Unity 中代表/事件的问题
- python - 在我的 Keras 卷积网络模型中找不到非常低准确率的原因
- android - 默认在gradle中为proto文件生成的类注册一个包,而不是在proto文件中
- android - 改造 - 网络调用导致应用程序挂起
- python - 如何使用 Python 填写 PDF 表单
- python - 用Python用csv中该字符串的中间部分替换一个字符串
- python - 递归地将节点添加到 zss 树