首页 > 解决方案 > 电子:NodeJS 'net' 模块返回空对象

问题描述

我刚刚开始开发我的第一个电子应用程序并导入了一些使用该net模块的现有代码。当我从电子应用程序导入代码时,net模块返回一个空对象。

const net = require('net'); // => {}

我认为电子将节点与所需的本机模块捆绑在一起,所以我对为什么导入不起作用感到有点困惑。

编辑:我已经用 引导应用程序vue-cli-tools,所以它使用 webpack 来捆绑依赖项。不确定这是否重要。

标签: javascriptnode.jswebpackelectron

解决方案


我认为电子将节点与所需的本机模块捆绑在一起,

确实如此,但是将浏览器运行时和 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")中解释的问题


推荐阅读