You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron报错:Namespace 'Electron.CrossProcessExports'无导出成员Remote如何解决

报错根因

这个TypeScript编译报错由两个问题共同导致:

  • 你使用的ngx-electron库已停止维护多年,其类型定义仍在引用Electron旧版本内置的Remote模块
  • Electron从v14版本开始正式移除了内置Remote模块,该模块被迁移到独立的第三方包@electron/remote,官方默认的Electron命名空间不再导出Remote类型,因此触发类型校验报错。

推荐解决方案(无需依赖ngx-electron,安全性和可维护性更高)

你的业务目标是在Angular侧调用ipcRenderer和主进程通信,完全可以不用第三方封装库,直接通过Electron官方推荐的预加载脚本暴露API实现:

  1. 首先在Electron主进程对应的预加载脚本(通常为preload.ts)中暴露受控的ipc通信接口,不要全量暴露Electron API避免安全风险:
// preload.ts
import { contextBridge, ipcRenderer } from 'electron'

contextBridge.exposeInMainWorld('electronAPI', {
  send: (channel: string, data: unknown) => ipcRenderer.send(channel, data),
  on: (channel: string, callback: (...args: unknown[]) => void) => ipcRenderer.on(channel, (_event, ...args) => callback(...args)),
  removeListener: (channel: string, callback: (...args: unknown[]) => void) => ipcRenderer.removeListener(channel, callback)
})
  1. 在Angular项目的全局类型声明文件(一般为src目录下的typings.d.ts或global.d.ts,没有可自行创建)中添加全局类型声明,避免TS类型报错:
declare global {
  interface Window {
    electronAPI: {
      send: (channel: string, data: unknown) => void;
      on: (channel: string, callback: (...args: unknown[]) => void) => void;
      removeListener: (channel: string, callback: (...args: unknown[]) => void) => void;
    }
  }
}
export {}
  1. 在需要调用通信能力的Angular服务中,直接通过window.electronAPI调用对应方法即可实现和ipcMain的通信。

临时兼容方案(如果必须继续使用ngx-electron)

如果项目中已经大量依赖ngx-electron不想重构,可以选择以下任意一种方式临时解决报错:

  • 降级Electron到v13及以下版本,执行命令npm install electron@13 --save-dev,旧版本Electron仍内置Remote模块可匹配ngx-electron的类型定义
  • 无需降级Electron,在项目的tsconfig.json的compilerOptions配置项中添加"skipLibCheck": true,跳过第三方依赖库的类型校验,该方案仅适用于你没有用到ngx-electron封装的remote相关功能的场景,否则运行时仍会报错。

内容的提问来源于stack exchange,提问作者Vijay Keshri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:36:06