@electron/remote

中文文档
2.1.4发布于 2026/11/03MITTypeScriptCommonJS零依赖构建来源已验证近 30 天下载 73.1万

Test [npm version(https://npmjs.org/package/@electron/remote) (中文(简体) )

中文使用文档
文档目录18 节
  1. 从 remote
  2. 远程对象
  3. 远程物体的寿命
  4. 向主要进程传递回调
  5. 访问主进程内置模块
  6. 方法
  7. remote.require(module)
  8. remote.getCurrentWindow()
  9. remote.getCurrentWebContents()
  10. remote.getGlobal(name)
  11. 属性
  12. remote.process 只读
  13. 活动
  14. 事件: '远程要求'
  15. 活动:“远取全球”
  16. 活动:“远地建造”
  17. 活动: '远取- 当前窗口'
  18. 事件 : “ 远程获取当前网络内容 ”

@ electron/ 远程

Test npm version

@electron/remote 是一个 电子 连接的模块 JavaScript对象从主要过程到渲染器过程. 这让你 访问仅主进程对象, 如它们在渲染器中可用 进程.

⚠️ 警告你们! 这个模块 许多微妙 陷阱几乎总是有更好的方法 完成您的任务 。 譬如说, ipcRenderer.invoke 可以为许多常用案例服务.

@electron/remote 是内置的替换 remote 模块 被腐烂并最终被取出的电子.

从 remote

注: @electron/remote 需要电能13或更高.

你要从内地迁出三件事 remote 模块改为 @electron/remote。 。 。 .

首先,你需要从国家预防机制安装:

$ npm install --save @electron/remote

第二,我们.., @electron/remote/main 主体必须初始化 工艺在从渲染器使用之前:

// in the main process:
require('@electron/remote/main').initialize()

第三个, require('electron').remote 在渲染工艺中必须是 替换为 require('@electron/remote')。 。 。 .

// in the renderer process:

// Before
const { BrowserWindow } = require('electron').remote

// After
const { BrowserWindow } = require('@electron/remote')

说明: 因为这需要通过 npm 而不是内置模块 模块,如果您正在使用 remote 从沙盒过程,你需要 适当配置您的捆绑器以包装 @electron/remote 在预装入脚本中。 当然, 使用 @electron/remote 造出沙盒来 效率低得多。 。 。 .

说明: 单位 electron >= 14.0.0,您必须使用新的 enable API 启用每个想要的远程模块 WebContents 单独: require("@electron/remote/main").enable(webContents)。 。 。 .

单位 electron < 14.0.0, (中文(简体) ), @electron/remote 尊重 enableRemoteModule 网络首选项 数值。 你必须通过 { webPreferences: { enableRemoteModule: true } } 改为 构造器 BrowserWindows. 应获准使用 @electron/remote。 。 。 .

API 参考

这个 remote 模块提供了进行进程间通信的简单方式 (IPC)介于渲染器过程(网页)和主过程之间.

在Electron中,图形用户界面相关模块(例如: dialog, (中文(简体) ), menu (例如)仅指 用于主要工艺,而非制造工艺。 为了使用它们 从渲染器工艺、 ipc 模块以发送进程间 向主进程发送信息。 与 remote 模块,您可以引用方法 在未明确发送进程间消息的情况下, 类似于 Java 的 马绍尔群岛中创建浏览器窗口的例子 渲染器工艺:

const { BrowserWindow } = require('@electron/remote')
let win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('https://github.com')

要做到这一点,首先需要初始化主进程侧 远程模块:

// in the main process:
require('@electron/remote/main').initialize()

说明: 单位 electron >= 14.0.0 任意远程模块默认已禁用 WebContents 实例并仅为指定的 WebContents 在明确呼叫后 require("@electron/remote/main").enable(webContents)。 。 。 .

单位 electron < 14.0.0 远程模块可以在下列情况下因安全原因被禁用:

  • BrowserWindow - 通过设置 enableRemoteModule 选项到 false。 。 。 .
  • <webview> - 通过设置 enableremotemodule 属性为 false。 。 。 .

远程对象

返回的每个对象(包括函数) remote 模块代表 对象在主进程(我们称之为远程对象或远程函数). 当您引用远程对象的方法时, 请调用远程函数, 或者创建 带有远程构造器(函数)的新对象,您正在实际发送 同步进程间消息.

在上述例子中 BrowserWindow 财务报告和审定财务报表 win 被远程对象和 new BrowserWindow 没有创造 BrowserWindow 渲染器中的对象 进程。 相反,它创造了一个 BrowserWindow 主进程对象和 返回渲染器过程中相应的远程对象,即: win 对象.

说明: 仅 可承担属性 出席者 当远程对象首先被引用时,可以通过远程访问.

说明: 组合和缓冲在 IPC 上复制,如果通过 remote 模块。 在渲染器过程中修改它们不会在主上修改它们 过程和反之亦然.

远程物体的寿命

电能保证只要在渲染器过程中的远程物体 生命(换言之,没有收集到垃圾),相应的对象 在主进程内不会发布。 当远程对象已经 收集的垃圾,主要过程中的相应对象将是 贬入.

如果远程对象在渲染器过程中被泄露(例如存储在地图上,但 永不释放),主过程中相应的对象也会被泄露出, 所以,你应该非常小心 不要泄露远程物体.

然而,像字符串和数字这样的主值类型是通过复制发送的.

向主要进程传递回调

主过程中的代码可以接受渲染器的回调——例如: 页:1 remote 模块 - 但使用此模块时应当非常小心 特性.

首先,为了避免陷入僵局,召回程序转移到主要进程 被称为同步。 你不应该期望主进程 获得通过回调的返回值.

例如,您不能使用一个来自渲染器进程的函数 Array.map 在主要进程中:

// main process mapNumbers.js
exports.withRendererCallback = (mapper) => {
  return [1, 2, 3].map(mapper)
}

exports.withLocalCallback = () => {
  return [1, 2, 3].map(x => x + 1)
}
// renderer process
const mapNumbers = require('@electron/remote').require('./mapNumbers')
const withRendererCb = mapNumbers.withRendererCallback(x => x + 1)
const withLocalCb = mapNumbers.withLocalCallback()

console.log(withRendererCb, withLocalCb)
// [undefined, undefined, undefined], [2, 3, 4]

如你所见,渲染器的回调同步值不是 ,而且没有匹配一个相同的回调值 在主要过程中.

第二,向主要进程发出的回调将持续到 收集垃圾.

例如,以下代码乍一看似乎是无辜的. 它安装一个 调用 close 远程对象上的事件 :

require('@electron/remote').getCurrentWindow().on('close', () => {
  // window was closed...
})

但记住回调是按主进程引用的,直到你 明确解开它。 如果做不到的话,每次重新装入窗口时 将再次安装回调, 每次重新启动时会漏出一个回调 .

更糟糕的是,因为之前安装的回调的背景 在主要过程中,如果 close 事件已释放.

为了避免这个问题, 请确保您清理所有对渲染器召回的引用 传递到主进程。 这涉及清理事件处理者,或 * 确保明确告知主要程序,以删除出现的回调 从一个正在退出的渲染器过程.

访问主进程内置模块

主要进程中的内置模块作为获取器添加于 remote 模块,这样您就可以像 electron 模块.

const app = require('@electron/remote').app
console.log(app)

方法

这个 remote 模块有以下方法:

remote.require(module)

  • module 字符串

回返 any - 物体由 require(module) 在主要过程中. 由相对路径指定的模块将相对于切入点解决 讨论主要进程.

譬如说.

project/
├── main
│   ├── foo.js
│   └── index.js
├── package.json
└── renderer
    └── index.js
// main process: main/index.js
const { app } = require('@electron/remote')
app.whenReady().then(() => { /* ... */ })
// some relative module: main/foo.js
module.exports = 'bar'
// renderer process: renderer/index.js
const foo = require('@electron/remote').require('./foo') // bar

remote.getCurrentWindow()

回返 BrowserWindow - 这个网页所属的窗口.

说明: 不使用 removeAllListeners 打开 BrowserWindow。使用此工具 删除全部 blur 听众, 禁用触摸栏按钮上的事件, 以及其他意外事件 后果.

remote.getCurrentWebContents()

回返 WebContents - 这个网页的网页内容.

remote.getGlobal(name)

  • name 字符串

回返 any - 全球变量: name (例如:. global[name])主要为: 进程.

属性

remote.process 只读

A 类 NodeJS.Process 对象。 这个 process 对象。 这是相同的 remote.getGlobal('process') 但缓存.

覆盖已曝光物体

没有过滤, @electron/remote 将提供对 JavaScript 的访问 任何渲染器请求的对象。 为了控制可以访问的东西, @electron/remote 为应用程序提供返回自定义结果的机会 为其中任何 getGlobal, (中文(简体) ), require, (中文(简体) ), getCurrentWindow, (中文(简体) ), getCurrentWebContents, (中文(简体) ), 或任何内建模块属性.

以下事件将首先在 app 电子模块,以及 然后在具体 WebContents 它请求对象。 当发射时 页:1 app 模块,在 Event 对象将是 WebContents 请求的源头 如果有人打来电话 preventDefault,该请求将被拒绝。 如果有的话 returnValue 参数是: 在结果上设定,然后该数值将返回到渲染器,而不是 默认.

活动

事件: '远程要求'

回返情况:

  • event 活动
  • moduleName 字符串

何时出院 remote.require() 在 webContents。 。 。 . 通话 event.preventDefault() 将防止模块被返回. 自定义值可以通过设置返回 event.returnValue。 。 。 .

活动:“远取全球”

回返情况:

  • event 活动
  • globalName 字符串

何时出院 remote.getGlobal() 在 webContents。 。 。 . 通话 event.preventDefault() 将防止全球返回. 自定义值可以通过设置返回 event.returnValue。 。 。 .

活动:“远地建造”

回返情况:

  • event 活动
  • moduleName 字符串

何时出院 remote.getBuiltin() 在 webContents,包括当内建模块作为属性访问时(例如. require("@electron/remote").BrowserWindow) (中文(简体) ). 通话 event.preventDefault() 将防止模块被返回. 自定义值可以通过设置返回 event.returnValue。 。 。 .

活动: '远取- 当前窗口'

回返情况:

  • event 活动

何时出院 remote.getCurrentWindow() 在 webContents。 。 。 . 通话 event.preventDefault() 这将防止对象被返回. 自定义值可以通过设置返回 event.returnValue。 。 。 .

事件 : “ 远程获取当前网络内容 ”

回返情况:

  • event 活动

何时出院 remote.getCurrentWebContents() 在 webContents。 。 。 . 通话 event.preventDefault() 这将防止对象被返回. 自定义值可以通过设置返回 event.returnValue。 。 。 .

版本与发布记录

@electron/remote 共发布 23 个版本,首次发布于 2020/02/15;过去 12 个月发布了 1 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.1.4latest2026/11/0310 天前
2.1.32025/07/081.3 年前
2.1.22024/01/252 年前
2.1.12023/12/132 年前
2.1.02023/11/083 年前
2.0.122023/10/093 年前

关于 @electron/remote 的常见问题

@electron/remote 是什么?

[(https://npmjs.org/package/@electron/remote) (中文(简体) )

如何安装 @electron/remote?

在项目目录运行 npm install @electron/remote,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:electron(>= 13.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@electron/remote 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@electron/remote 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@electron/remote 可以商用吗?

@electron/remote 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@electron/remote 的下载量有多少?

根据 npm 官方下载统计,@electron/remote 在 2026/10/14 – 2026/11/12 这 30 天内被下载 730,582 次,日均约 24,353 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@electron/remote 还在维护吗?

最新版本 2.1.4 发布于 2026/11/03(10 天前);至今共发布 23 个版本,其中过去 12 个月发布了 1 个;首次发布于 2020/02/15。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。