electron + react +react-router-dom 打包桌面应用白屏

hash 是空字符串,说明你访问的是:

复制代码
file:///D:/web3/Harbour/resources/app.asar/build/index.html

没有带 #/ ,React Router 的 <Route path="/"> 也就匹配不到,所以整个 <main> 里什么都没有。


✅ 立即解决

1. 手动在地址栏加上哈希
复制代码
file:///D:/web3/Harbour/resources/app.asar/build/index.html#/

然后回车,看页面是否渲染出 Home 组件内容。

2. 或者把路由改成"兜底"匹配

App.tsx 里加一条通配路由,确保任何路径都至少渲染点什么:

tsx 复制代码
<Routes>
  <Route path="*" element={<Home />} />   {/* 兜底 */}
  <Route path="/" element={<Home />} />
  <Route path="/user" element={<User />} />
  ...
</Routes>

这样即使 hash 为空也能渲染 Home。


✅ 最终建议(Electron 打包后的正确姿势)

Electron 启动时,主动把窗口导航到带哈希的路径

js 复制代码
// main.js / main.ts
mainWindow.loadURL(
  url.format({
    pathname: path.join(__dirname, 'build/index.html'),
    protocol: 'file:',
    slashes: true,
    hash: '/',            // 关键:自动带 #
  })
);

或者使用 win.loadFile 的等价写法:

js 复制代码
mainWindow.loadFile('build/index.html', { hash: '/' });

✅ 总结

现象 原因 解决
hash 为空 没有 #/ → 路由匹配失败 1. 地址栏手动加 #/ 2. 路由加 path="*" 3. 主进程加载时主动带 hash: '/'

先试第 1 步手动加 #/,确认页面能出来,再按第 3 步修改主进程,让最终打包版自动跳到正确路径。

相关推荐
@大迁世界19 小时前
JavaScript 2.0?当 Bun、Deno 与 Edge 运行时重写执行范式
开发语言·前端·javascript·ecmascript
red润19 小时前
Day.js 是一个轻量级的 JavaScript 日期处理库,以下是常用用法:
前端·javascript
前端付豪19 小时前
12、为什么在 <script> 里写 export 会报错?
前端·javascript
Junsen19 小时前
electron窗口层级与dock窗口列表
前端·electron
梦醒繁华尽19 小时前
使用vue-element-plus-x完成AI问答对话,markdown展示Echarts展示
前端·javascript·vue.js
鹏多多20 小时前
关于React父组件调用子组件方法forwardRef的详解和案例
前端·javascript·react.js
Ares-Wang20 小时前
Vue2 》》Vue3》》 Render函数 h
javascript
朝与暮21 小时前
《javascript进阶-类(class):构造函数的语法糖》
前端·javascript
Asort21 小时前
JavaScript设计模式(三)——抽象工厂模式 (Abstract Factory)
前端·javascript·设计模式
fcm191 天前
(6) tauri之前端框架性能对比
前端·javascript·rust·前端框架·vue·react