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

electron-builder打包React应用后无法正常加载的技术求助

React+Electron打包后无法加载登录页面问题排查

使用npm run electron:build命令打包React+Electron应用后,应用无法正常加载——本该在根路径(/)显示的登录页面未出现。该React应用部署至Netlify平台可正常运行,但在Electron环境下出现异常。以下是相关配置文件及项目结构:

package.json

{
  "name": "security_cams_management_app",
  "version": "0.1.0",
  "author": "Abderrahmane fatimi",
  "private": true,
  "dependencies": {
    "@electron/remote": "^2.0.9",
    "@testing-library/jest-dom": "^5.16.5",
    "@testing-library/react": "^13.4.0",
    "@testing-library/user-event": "^13.5.0",
    "axios": "^1.3.5",
    "electron-is-dev": "^2.0.0",
    "pocketbase": "^0.13.1",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "react-router-dom": "^6.10.0",
    "react-scripts": "5.0.1",
    "react-toastify": "^9.1.2",
    "web-vitals": "^2.1.4"
  },
  "main": "public/main.js",
  "homepage": "./",
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject",
    "electron:serve": "concurrently -k \"cross-env BROWSER=none npm start \" \"npm run electron:start\"",
    "electron:build": "npm run build && electron-builder -c.extraMetadata.main=build/main.js",
    "electron:start": "wait-on http://127.0.0.1:3000 && electron ."
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "concurrently": "^8.0.1",
    "cross-env": "^7.0.3",
    "electron": "^24.0.0",
    "electron-builder": "^23.6.0",
    "wait-on": "^7.0.1"
  },
  "build":{
    "appId": "com.electron.security_cams_management_app",
    "productName" : "Store Managment App",
    "extends": null,
    "files":[
      "dist/**/*",
      "build/**/*",
      "node_modules/**/*",
      "package.json"
    ]
  }
}

main.js

const { app, BrowserWindow } = require('electron')

const isDev = require('electron-is-dev')

require('@electron/remote/main').initialize()

const path = require('path')
function createWindow() {
  const win = new BrowserWindow({
    width: 1200,
    height: 600,
    minWidth: 1200,
    minHeight: 600,
    webPreferences: {
      enableRemoteModule: true,
    },
  })

  win.loadURL(
    isDev
      ? 'http://localhost:3000'
      : `file://${path.join(__dirname, '../build/index.html')}`
  )
}

app.on('ready', createWindow)

项目文件结构

项目文件结构

异常截图

应用加载异常截图


问题排查与解决方案

1. React Router 路由适配问题

Electron打包后使用file://协议加载本地文件,BrowserRouter依赖HTTP服务的路由机制,在本地文件系统下会出现路由匹配异常,导致根路径页面无法加载。

解决步骤:
将路由组件从BrowserRouter替换为HashRouter:

// 原代码
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';

// 修改后
import { HashRouter as Router, Routes, Route } from 'react-router-dom';

2. main.js 路径匹配问题

打包后main.js会被复制到build目录,此时__dirname指向build文件夹,原路径中的../build/index.html会导致路径错误。

解决步骤:
修改main.js中的加载路径:

win.loadURL(
  isDev
    ? 'http://localhost:3000'
    : `file://${path.join(__dirname, 'index.html')}` // 移除../,直接引用当前目录下的index.html
)

3. electron-builder 配置与文件复制问题

打包过程中需要确保public/main.js被正确复制到build目录,否则Electron找不到入口文件。

解决步骤:

  • 方式一:修改electron:build脚本,添加文件复制步骤:
    // Windows系统用copy替换cp
    "electron:build": "npm run build && cp public/main.js build/main.js && electron-builder -c.extraMetadata.main=build/main.js"
    
  • 方式二:调整build.files配置,确保public/main.js被包含:
    "files":[
      "build/**/*",
      "public/main.js",
      "node_modules/**/*",
      "package.json"
    ]
    

4. 本地资源加载路径验证

确认React打包后的资源引用均为相对路径,homepage: "./"配置已确保这一点,但可手动检查build/index.html中的资源路径是否为./static/xxx格式,避免绝对路径导致加载失败。


内容的提问来源于stack exchange,提问作者Abderrahmane Fatimi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:52:49