如何使用 Electron+Vite 快速搭建桌面应用软件

339 阅读3分钟

参考网址:

官方 | Electron⚡️Vite

electron 操作手册 v30.5.1

创建项目

创建命令

npm create vite@latest my-electron-vite-project

* Select a framework:
|    Vanilla
|    Vue
|    React
|    Preact
|    Lit
|    Svelte
|    Solid
|    Qwik
|    Angular
|  > Others

*  Select a variant:
|    Extra Vite Starters ↗
|  > Electron ↗ (npm create electron-vite@latest)

? Project template: » - Use arrow-keys. Return to submit.
    Vue
>   React
    Vanilla

Done. Now run:

  cd my-electron-vite
  npm install
  npm run dev

注:在选项目模板时,可根据实际情况选择语言类型

安装依赖并运行

  cd my-electron-vite
  npm install
  npm run dev

打包

命令

  npm run build

问题

问题一:运行项目显示白屏 —— ERR_CONNECTION_REFUSED 版

运行完终端显示内容如下:

built in 161ms.

(node:74100) electron: Failed to load URL: http://localhost:5173/ with error: ERR_CONNECTION_REFUSED
(Use `electron --trace-warnings ...` to show where the warning was created)

解决方式:

在根目录下的 vite.config.ts 文件配置 server 相关配置信息,完整代码如下所示:

import { defineConfig } from 'vite';
import path from 'node:path';
import electron from 'vite-plugin-electron/simple';
import react from '@vitejs/plugin-react';

// https://vitejs.dev/config/
export default defineConfig({
    plugins: [
        react(),
        electron({
            main: {
                // Shortcut of `build.lib.entry`.
                entry: 'electron/main.ts',
            },
            preload: {
                // Shortcut of `build.rollupOptions.input`.
                // Preload scripts may contain Web assets, so use the `build.rollupOptions.input` instead `build.lib.entry`.
                input: path.join(__dirname, 'electron/preload.ts'),
            },
            // Ployfill the Electron and Node.js API for Renderer process.
            // If you want use Node.js in Renderer process, the `nodeIntegration` needs to be enabled in the Main process.
            // See 👉 https://github.com/electron-vite/vite-plugin-electron-renderer
            renderer:
                process.env.NODE_ENV === 'test'
                    ? // https://github.com/electron-vite/vite-plugin-electron-renderer/issues/78#issuecomment-2053600808
                      undefined
                    : {},
        }),
    ],
    server: {
        host: '0.0.0.0', // 主机名,设置为0.0.0.0可以允许外部访问
        strictPort: true, // 端口被占用时,是否停止服务
        open: true, // 启动服务时是否自动打开浏览器
    },
});

问题二:初次打包出现“require” 声明但未运用/使用问题

打包时,终端报以下错误信息(“require” 声明但未运用/使用问题):

> my-electron-vite-project@0.0.0 build
> tsc && vite build && electron-builder

electron/main.ts:6:7 - error TS6133: 'require' is declared but its value is never read.

6 const require = createRequire(import.meta.url)
        ~~~~~~~


Found 1 error in electron/main.ts:6

解决方式: 在 electron/main.ts中修改,如下:

import { app, BrowserWindow } from 'electron';
// import { createRequire } from 'node:module';  // 注释该代码
import { fileURLToPath } from 'node:url';
import path from 'node:path';

// const require = createRequire(import.meta.url) // 注释该代码
const __dirname = path.dirname(fileURLToPath(import.meta.url));

// 后续代码不变...

问题三:打包时,出现 Get "github.com/electron/el…" 下载失败问题

解决方式:

{
    // 其余代码不变,增加以下代码,指定下载镜像源
    "config": {
        "electron_mirror": "https://npm.taobao.org/mirrors/electron/"
    }
}

问题四:打包时,出现 winCodesign、nsis、nsis-resources 文件下载不了的错误

解决方式:

  • winCodesign
    • 可根据报错提示,依据下载链接,下载后解压并存放至 C:\Users\你的电脑用户名\AppData\Local\electron-builder\Cache\winCodeSign\
    • 若下载的 winCodesign 命名不是winCodeSign-版本号,需要在C:\Users\你的电脑用户名\AppData\Local\electron-builder\Cache\winCodeSign\下创建winCodeSign-版本号文件夹并将解压的内容放至该目录
  • nsis
    • 可根据报错提示,依据下载链接,下载后解压并存放至 C:\Users\你的电脑用户名\AppData\Local\electron-builder\Cache\nsis\
    • 若下载的 nsis 命名不是nsis-版本号,需要在该目录下创建nsis-版本号文件夹并将解压的内容放至该目录
    • 若下载的连接无法访问,可以访问 electron-builder-binaries Releases 页面找到 nsis 对应的版本,点击下载
  • nsis-resources
    • 可根据报错提示,依据下载链接,下载后解压并存放至 C:\Users\你的电脑用户名\AppData\Local\electron-builder\Cache\nsis\
    • 若下载的 nsis-resources 命名不是nsis-resources-版本号,需要在该目录下创建nsis-resources-版本号文件夹并将解压的内容放至该目录