Electron结合Vue使用说明
1. 创建Vue项目:
npm init vue
2. 创建Electron项目
npm init electron-app@latest electron-project – --template=webpack-typescript
npm install copy-webpack-plugin --save-dev
3. 项目配置
1.配置Vue项目:
1)配置base路径
// vite.config.ts export default defineConfig({ plugins: [vue(), vueJsx()], resolve: { alias: { "@": fileURLToPath(new URL("./src", import.meta.url)), }, }, base: "./", // 新增配置(解决绝对路径导致HTML请求文件失败的问题) });
2)配置路由为哈希路由
// router/index.ts import { createRouter, createWebHashHistory } from "vue-router"; import HomeView from "../views/HomeView.vue"; const router = createRouter({ history: createWebHashHistory(import.meta.env.BASE_URL), // 修改为Hash模式 routes: [ { path: "/", name: "home", component: HomeView, }, { path: "/about", name: "about", component: () => import("../views/AboutView.vue"), }, ], }); export default router;
2.配置Electron项目
1)修改入口文件,将开发环境与Vue结合
// src/index.ts // 用于Vue开发环境 if(process.env.npm_lifecycle_event === 'start'){ mainWindow.loadURL(<前端项目地址,如('http://localhost:5174')>); } else { mainWindow.loadURL(MAIN_WINDOW_WEBPACK_ENTRY); }
2)修改webpack配置,将Vue打包文件整合至Electron打包环境
// webpack.renderer.config.ts export const rendererConfig: Configuration = { module: {rules}, plugins: [ // 新增,在打包是将Vue项目整合至Electron new CopyPlugin({ patterns: [ { // 将dist目录文件(排除index.html)拷贝至.webpack/renderer/main_window from: "./dist/**", to: ({ context, absoluteFilename }) => { const relativePath = path .relative(context, absoluteFilename) .replace(/^dist/, "."); const basePath = path.resolve( __dirname, ".webpack/renderer/main_window" ); return path.resolve(basePath, relativePath); }, globOptions: { ignore: ["**/dist/index.html"], }, }, ], }), ...plugins, ], resolve: { extensions: [".js", ".ts", ".jsx", ".tsx", ".css"], }, };
3)修改forge入口
const config: ForgeConfig = { packagerConfig: {}, rebuildConfig: {}, makers: [ new MakerSquirrel({}), new MakerZIP({}, ["darwin"]), new MakerRpm({}), new MakerDeb({}), ], plugins: [ new WebpackPlugin({ mainConfig, renderer: { config: rendererConfig, entryPoints: [ { html: "./dist/index.html", // 将HTML文件入口指向Vue打包文件 js: "./src/renderer.ts", name: "main_window", preload: { js: "./src/preload.ts", }, }, ], }, }), ], };
4. 开发
1.运行Vue项目
2.运行Electron项目
5. 打包
1.将Vue打包后的
dist
目录复制到Electron工程根目录
2.打包Electron