Electron中使用相对路径时require()函数的异常行为
解决Electron渲染进程中require相对路径找不到模块的问题
嘿,我之前在Electron里也踩过这个坑,来帮你排查下问题所在,主要从这几个方向入手:
1. 先确认渲染进程能不能用Node.js的require
Electron从v12开始,默认是关闭渲染进程的Node.js集成的,如果你没手动开启,那渲染进程里根本用不了require,看起来像是模块找不到,实则是功能被禁用了。
你得在main.js创建BrowserWindow的时候,把相关配置打开:
// main.js里的BrowserWindow配置代码 const mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true, // 必须开这个才能在渲染进程用require contextIsolation: false, // 要是开了这个,就得用预加载脚本,新手直接关就行 } });
2. 检查index.html引用test.js的路径对不对
你的文件夹结构是html/index.html对应js/test.js,那index.html里引用test.js的路径得是../js/test.js,要是你写成js/test.js,那浏览器会从html/js/test.js找文件,根本找不到,这时候test.js要么加载失败,要么加载后它的相对路径基准错了,自然找不到同目录的test2.js。
正确的引用应该是这样:
<!-- html/index.html 里的脚本标签 --> <script src="../js/test.js"></script>
3. 用绝对路径验证(避免相对路径坑)
要是上面的都没问题,你可以在test.js里用Node.js的__dirname来拼接绝对路径,这样能彻底避开相对路径解析的问题,也能帮你确认是不是路径的锅:
// test.js里的代码 const path = require('path'); const aTest = require(path.join(__dirname, './test2.js'));
__dirname是Node.js自带的变量,指的就是当前test.js文件所在的文件夹路径,用它拼出来的路径肯定不会错。
4. 最后检查文件名的拼写和大小写
别笑,这真的是很多人忽略的点!如果是在macOS或Linux上,文件名大小写必须完全匹配,比如你文件叫Test2.js,但代码里写的是test2.js,就会找不到。另外也要确认test2.js确实在js文件夹里,没放错位置。
按照这几步排查,应该就能解决你的问题啦~
内容的提问来源于stack exchange,提问作者Wolfone
相关产品推荐
相关产品推荐

