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

Electron自定义模块引入报错:Cannot find module './my-module-two'

解决Electron中require本地模块报错的问题

看起来你遇到的核心问题是渲染进程的执行环境和Node.js模块系统不兼容导致的。当你用普通<script>标签直接引入my-module-one.js时,这段代码运行在浏览器全局上下文,而非Node.js的模块环境,所以require无法按照预期找到你的本地模块。下面给你几个可行的解决方案:

方案一:改用ES模块(推荐,符合现代前端规范)

这种方式不需要依赖Node集成,更适配浏览器的模块加载逻辑:

  1. 修改my-module-two.js为ES导出格式:
export class MyModuleTwo {
  // 可在此添加类的方法或属性
}
  1. 修改my-module-one.js使用ES导入:
import { MyModuleTwo } from './my-module-two.js';

class MyModuleOne {
  constructor() {
    this.myModuleTwoInstance = new MyModuleTwo();
  }
}
  1. 更新index.html中的script标签,添加type="module"属性:
<script type="module" src="js/my-module/my-module-one.js"></script>

这样浏览器会按照ES模块规则解析文件,相对路径的导入就能正常工作了。

方案二:启用Electron渲染进程的Node集成(适合坚持用CommonJS的场景)

如果你想继续使用CommonJS的require,需要确保渲染进程能访问Node.js的API:

  1. 打开主进程文件main.js,修改BrowserWindow的webPreferences配置:
const { BrowserWindow } = require('electron');

const mainWindow = new BrowserWindow({
  // 其他窗口配置项
  webPreferences: {
    nodeIntegration: true, // 启用Node API访问权限
    contextIsolation: false, // Electron 12+版本必须设置此项,否则无法直接在渲染进程使用Node API
    // 注意:生产环境关闭contextIsolation存在安全风险,后续建议改用预加载脚本方案
  }
});
  1. 调整my-module-one.js的require位置(可选,但更稳妥):
// 直接在文件顶部执行require,而非构造函数内部
const { MyModuleTwo } = require('./my-module-two.js');

class MyModuleOne {
  constructor() {
    this.myModuleTwoInstance = new MyModuleTwo();
  }
}
  1. 额外排查:确保文件名拼写完全一致(尤其是大小写,macOS/Linux系统对文件名大小写敏感),或者尝试在require时明确加上.js扩展名。

辅助排查小技巧

如果你不确定当前路径是否正确,可以在my-module-one.js里打印__dirname(启用Node集成后可用),查看当前文件的绝对目录,再确认相对路径是否正确:

console.log(__dirname); // 输出当前js文件所在的绝对路径

内容的提问来源于stack exchange,提问作者Kévin Bibollet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:06:19