Electron主进程原生使用ES Module import语法报错如何解决?
结论
你的需求可通过原生方式实现,但受Electron版本限制,你当前使用的v13.x版本无法满足要求,需升级至Electron 28.0.0及以上版本。
版本限制说明
Electron主进程对原生ESM(ES Module)的官方支持从28.0.0版本才正式上线。低于该版本的Electron内置默认启动逻辑会通过require()加载用户指定的入口文件,而require()不支持加载标记为ESM的模块,因此会出现你遇到的ERR_REQUIRE_ESM报错,该逻辑是底层硬编码的,无原生配置可修改。
满足约束的原生实现步骤
仅需升级Electron版本后做少量调整即可,完全符合你提出的两项使用约束:
- 升级Electron至符合要求的版本
npm i -D electron@latest
- 保留package.json中的
"type": "module"配置,无需修改其他字段 - 修正主进程代码的导入错误:主进程中无法使用仅属于渲染进程的
ipcRenderer模块,需替换为ipcMain,修改后的index.js代码如下:
import { app, BrowserWindow, Menu, ipcMain } from 'electron';
- 执行
npm run start即可正常启动
低版本兼容说明
如果你必须使用Electron v13.x版本,没有任何原生方案可以同时满足你提出的两项约束,只能选择以下不符合约束的方案:
- 使用CommonJS的
require语法导入模块 - 引入打包工具(如vite、rollup、webpack)将ESM代码转译为CJS代码后运行
内容的提问来源于stack exchange,提问作者Bronislav Klučka
相关产品推荐
相关产品推荐

