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

集成vue-router后Electron应用显示空白页面求助

问题描述

我使用Vue3与独立安装的Electron构建桌面应用,仅渲染组件不使用router-view时应用运行正常,但集成vue-router后页面显示空白。相关实现代码如下:

vite.config.js

import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'

// https://vitejs.dev/config/
export default defineConfig({
  base: path.resolve(__dirname, "./dist/"),
  plugins: [vue()],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
      vue: 'vue/dist/vue.esm-bundler.js'
    }
  }
})

Electron main.js

const { app, BrowserWindow } = require("electron");
const path = require("path");

function createWindow() {
  const win = new BrowserWindow({
    width: 500,
    height: 500,
    frame: false,
    webPreferences: {
      preload: path.join(__dirname, "preload.js"),
    },
  });

  win.loadFile(`${__dirname}/dist/index.html`);
  win.setAlwaysOnTop(true);
}

app.whenReady().then(() => {
  createWindow();
});

Vue main.js

import './assets/main.css'

import { createApp } from 'vue'
import App from './App.vue'
import store from './store'
import router from './router'

createApp(App).use(store).use(router).mount('#app')

router.js

import { createWebHistory, createRouter } from "vue-router";

import LoginPage from '../pages/LoginPage.vue';
import RegisterPage from '../pages/RegisterPage.vue';
import HomePage from '../pages/HomePage.vue';

const routes = [
  {
    path: "/login",
    name: "Login",
    component: LoginPage
  },
  {
    path: "/register",
    name: "Register",
    component: RegisterPage
  },
  {
    path: "/",
    name: "Home",
    component: HomePage
  }
]

const router = createRouter({
  history: createWebHistory(),
  routes
})

export default router;
解决方案

1. 替换vue-router的历史模式

Electron加载本地HTML文件使用file://协议,HTML5 history模式(createWebHistory())无法适配这种本地路径环境,会导致路由匹配失败。改用hash模式即可解决:

import { createWebHashHistory, createRouter } from "vue-router";

// ... 路由配置不变

const router = createRouter({
  history: createWebHashHistory(), // 替换为hash模式
  routes
})

export default router;

2. 修正vite.config.js的base配置

当前base设置为本地绝对路径,会导致Electron加载资源时路径错误,改为相对路径./:

export default defineConfig({
  base: './', // 修改为相对路径
  plugins: [vue()],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
      vue: 'vue/dist/vue.esm-bundler.js'
    }
  }
})

3. 确认App.vue存在路由出口

确保App.vue中添加了<router-view>,否则路由匹配的组件无法渲染:

<template>
  <div id="app">
    <router-view></router-view> <!-- 必须保留路由出口 -->
  </div>
</template>

4. 重新构建并启动

执行Vue项目的构建命令(如npm run build),确保dist目录文件更新后,再启动Electron应用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 09:38:11