【electron】 vite + electron-builder 打包配置

本文档介绍了如何使用vite初始化项目,结合electron-builder进行打包配置,包括创建主进程、解决资源加载问题、配置开发环境的热更新以及打包成exe文件的过程。在开发环境,利用concurrently和wait-on工具实现热更新,而在打包过程中,通过electron.config.json配置文件确保资源正确打包。最终,成功创建了一个具备热更新和桌面应用打包功能的项目。

创一个vite项目

 npm init vite 

安装打包工具

 npm i -D electron // 20.1.0npm i -D electron-builder // 23.3.3 

electron是开发时运行环境,electron-builder是打包exe用的。

配置桌面环境

打开 electron 官网,找到“快速开始”。基本上看完这一章就可以实现将页面通过桌面程序运行出来了。

创建 主进程 main.js

项目更目录下创建 main.js文件与 preload.js 文件, 代码可以直接复制官网示例

// main.js
// Modules to control application life and create native browser window
const { app, BrowserWindow } = require('electron')
const path = require('path')

const createWindow = () => {// Create the browser window.const mainWindow = new BrowserWindow({width: 800,height: 600,webPreferences: {preload: path.join(__dirname, 'preload.js')}})// 加载 index.htmlmainWindow.loadFile('index.html')// 打开开发工具// mainWindow.webContents.openDevTools()
}

// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {createWindow()app.on('activate', () => {// On macOS it's common to re-create a window in the app when the// dock icon is clicked and there are no other windows open.if (BrowserWindow.getAllWindows().length === 0) createWindow()})
})

// 除了 macOS 外,当所有窗口都被关闭的时候退出程序。 There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', () => {if (process.platform !== 'darwin') app.quit()
})

// In this file you can include the rest of your app's specific main process
// code. 也可以拆分成几个文件,然后用 require 导入。 
// preload.js

// All the Node.js APIs are available in the preload process.
// 它拥有与Chrome扩展一样的沙盒。
window.addEventListener('DOMContentLoaded', () => {const replaceText = (selector, text) => {const element = document.getElementById(selector)if (element) element.innerText = text}for (const dependency of ['chrome', 'node', 'electron']) {replaceText(`${dependency}-version`, process.versions[dependency])}
}) 

添加electron 运行命令

打开 package.json 在 scrpit 对象中添加 electron 运行命令

 "scripts": {"dev": "vite --host","build": "vite build","preview": "vite preview","start": "electron .",}, 

打包项目,生成dist

运行 npm run build, 生成dist文件。并且将main.js中mainWindow.loadFile路径修改为 ‘./dist/index.html’

 const createWindow = () => {// Create the browser window.const mainWindow = new BrowserWindow({width: 800,height: 600,webPreferences: {preload: path.join(__dirname, '/preload.js')}})// 加载 index.html// mainWindow.loadFile('index.html')mainWindow.loadFile('./dist/index.html')// 打开开发工具// mainWindow.webContents.openDevTools()
} 

最后运行 npm run start

解决资源无法加载

最后运行出来会发现是白屏,打开程序控制台可以看到是js文件找不到。 打开dist中index.html发现是js和css路径都是绝对路径,所以这里需要修改为相对路径。

打开 vite.config.js 配置更路径为相对路径

export default defineConfig({plugins: [vue()],base: './',
}) 

然后重新打包,再运行npm run start 就可以看到页面了。

开发环境:热更新

这里在开发环境中有一个问题就是,咱们这里的渲染进程是打包好的dist文件,无法每次修改后热更新。只有重新打包生成新的dist后页面才会更新。这在开发的时候显然是方便的。

两个工具 concurrently wait-on

 npm i concurrently -Dnpm i wait-on -D 
  • concurrently:方便 script 同时启动多个命令
  • wait-on:它可以等待文件、端口、套接字和 http(s) 资源可用后触发。

开发时热更新,我们就要放弃build一个dist文件来作为渲染进程的做法了。 简单来说,我们正常执行 npm run dev 生成一个页面服务,这样的环境是有热更新的。所以我们只需要在主进程中加载dev服务中的页面作为渲染进程就可以了。 修改一下主进程 main.js

 ...const createWindow = () => {// Create the browser window.const mainWindow = new BrowserWindow({width: 800,height: 600,webPreferences: {preload: path.join(__dirname, "/preload.js"),},});// 加载 index.htmlmainWindow.loadURL("http://localhost:3333/");// 打开开发工具// mainWindow.webContents.openDevTools()};... 

然后打开两个终端,第一个先执行 npm run dev,等待服务启动后在另外一个里执行npm run start 即可。

当然我们也可以一个命令完成这些。在package.json中添加命令:

 ..."scripts": {"dev": "vite --host","build": "vite build","preview": "vite preview","start": "electron .","electron": "wait-on tcp:3333 && electron .","exe-dev": "concurrently -k \"npm run dev\" \"npm run electron\""},... 

开发时执行 exe-dev 即可。

打包exe

添加打包命令

 ..."scripts": {"dev": "vite --host","build": "vite build","preview": "vite preview","start": "electron .","electron": "wait-on tcp:3333 && electron .","exe-dev": "concurrently -k \"npm run dev\" \"npm run electron\"","exe-build": "electron-builder"},... 

执行 npm run exe-build ,等待执行结束,dist文件夹下会多一个win-unpacked,其里面有一个exe文件就是我们的程序执行文件。

现在我们加载的还是dev服务,所以还需要修改一下主进程main.js

 ...// 加载 index.html// 判断当前是否为开发环境console.log("isPackaged: ", app.isPackaged);if (<img src="http://localhost:3333/");} else {mainWindow.loadFile("./dist/index.html");}..." style="margin: auto" />

app.isPackaged 主要用来判断是否为开发环境。

解决index.html找不到的问题

我们打开win-unpacked,执行exe文件,会发现页面没有内容,打开F12控制台,发现index.html根本没有找到。

其地址 …dist/win-unpacked/resources/app.asar/dist/index.html,找不到的原因可以大概猜一下是我们的页面没有打包进app.asar中。

所以我们可以在electron-builder打包配置中设置一下我们要打包的文件。

项目更目录创建 electron.config.json

{"files": ["main.js", "preload.js", "./dist"],"productName": "test"
} 

这里我们设置了files字段,其目的就是设置打包的数据内容。 productName 就是设置exe文件的文件名。

然后修改exe-build命令

 "exe-build": "electron-builder -config electron.config.json" 

运行命令后,可以看到exe文件已经修改为test.exe。双击运行也可以看到页面了。

最后完善一下打包命令

 "exe-build": "vite build & electron-builder -config electron.config.json" 

最后

整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。

有需要的小伙伴,可以点击文末卡片领取这份文档,无偿分享

部分文档展示:



文章篇幅有限,后面的内容就不一一展示了

有需要的小伙伴,可以点下方卡片免费领取

<think>我们正在安装Electron及相关开发依赖。根据用户提供的命令,我们需要执行: npm install electron vite-plugin-electron electron-builder -D 注意:这里的`-D`等同于`--save-dev`,表示将这些包作为开发依赖安装。 根据引用内容,我们可以得到一些相关信息: 1. 引用[1]中提到安装Electronelectron-builder的命令为:`npm install --verbose electron electron-builder --save-dev`,并且还安装了`vite-plugin-electron`和`vite-plugin-electron-renderer`。 2. 引用[3]中提到了如何使用`vite-plugin-electron`插件,并给出了配置示例。 但是,用户要求安装的包是`electron`、`vite-plugin-electron`和`electron-builder`三个包。注意,引用[1]中同时安装了四个包(包括`vite-plugin-electron-renderer`),但用户并没有要求安装`vite-plugin-electron-renderer`。 因此,我们只需执行用户提供的命令即可。 然而,需要注意的是,引用[1]和引用[3]中使用的`vite-plugin-electron`的安装方式略有不同。引用[1]中安装的是`vite-plugin-electron`和`vite-plugin-electron-renderer`两个包,而引用[3]中只使用了`vite-plugin-electron`,并且从`vite-plugin-electron/simple`导入。根据`vite-plugin-electron`的文档,它已经包含了渲染器的支持,所以可能不需要单独安装`vite-plugin-electron-renderer`。但用户没有要求,我们就不安装。 步骤: 1. 在项目根目录下执行安装命令。 2. 安装完成后,根据引用[3]配置`vite.config.ts`(或`vite.config.js`)文件。 但是,用户目前只需要安装命令,所以我们只需提供安装命令即可。 注意:由于网络原因,安装Electron可能会遇到下载二进制文件慢的问题。可以设置镜像,如引用[1]中提到的`electron-custom-mirror`,但用户没有要求,我们暂时不处理。 因此,直接执行: ```bash npm install electron vite-plugin-electron electron-builder -D ``` 如果安装过程中遇到Electron下载问题,可以考虑设置环境变量: ```bash # 设置Electron镜像 export ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/" ``` 或者使用`.npmrc`文件配置: ```ini electron_mirror="https://npmmirror.com/mirrors/electron/" ``` 但用户没有提到网络问题,所以先执行安装命令。 安装完成后,我们可以根据引用[3]配置`vite.config.ts`。 示例配置(根据引用[3]): ```typescript import electron from 'vite-plugin-electron/simple' export default { plugins: [ electron({ main: { entry: 'electron/main.ts', // 主进程入口文件 }, preload: { input: 'electron/preload.ts', // 预加载脚本入口文件 }, // 可选:在渲染器进程中使用Node.js API renderer: {}, }), ], } ``` 注意:用户项目结构可能不同,请根据实际情况调整入口文件路径。 另外,引用[4]中提到了一个模拟后端请求的插件`vite-plugin-mock-server`,但用户没有要求,所以忽略。 总结: 1. 执行安装命令。 2. 配置`vite.config.ts`。 如果用户需要进一步帮助,可以提供项目结构信息,以便给出更具体的配置。 现在,我们只需告诉用户执行安装命令即可。</think>根据您的要求,我将指导您安装 Electron 及相关开发依赖: ### 安装步骤 1. **执行安装命令**: ```bash npm install electron vite-plugin-electron electron-builder -D ``` * `-D` 等同于 `--save-dev`,表示作为开发依赖安装[^1] * 这个命令会同时安装: - Electron 核心包 - vite-plugin-electronVite 集成插件) - electron-builder打包工具) 2. **推荐镜像设置**(解决国内下载慢问题): ```bash # 设置 Electron 镜像 export ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/" ``` 或在 `.npmrc` 文件中添加: ```ini electron_mirror="https://npmmirror.com/mirrors/electron/" ``` 3. **基础配置**(在 `vite.config.ts` 中): ```typescript import electron from 'vite-plugin-electron/simple' export default { plugins: [ electron({ main: { entry: 'electron/main.ts', // 主进程入口 }, preload: { input: 'electron/preload.ts', // 预加载脚本 } }), ], } ``` ### 注意事项 1. 如果安装卡在 `node install.js` 阶段,请确认镜像设置正确 2. 建议使用 Node.js 16+ 版本以获得最佳兼容性 3. 安装完成后可创建基础目录结构: ``` ├── electron │ ├── main.ts # 主进程 │ └── preload.ts # 预加载脚本 └── vite.config.ts ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值