vite?+?electron-builder?打包配置詳解
創(chuàng)一個(gè)vite項(xiàng)目
npm init vite
安裝打包工具
npm i -D electron // 20.1.0 npm i -D electron-builder // 23.3.3
electron是開(kāi)發(fā)時(shí)運(yùn)行環(huán)境,electron-builder是打包exe用的。
配置桌面環(huán)境
打開(kāi) electron 官網(wǎng),找到“快速開(kāi)始”?;旧峡赐赀@一章就可以實(shí)現(xiàn)將頁(yè)面通過(guò)桌面程序運(yùn)行出來(lái)了。
創(chuàng)建 主進(jìn)程 main.js
項(xiàng)目更目錄下創(chuàng)建 main.js文件與 preload.js 文件, 代碼可以直接復(fù)制官網(wǎng)示例
// 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.html mainWindow.loadFile('index.html') // 打開(kāi)開(kāi)發(fā)工具 // mainWindow.webContents.openDevTools() } // 這段程序?qū)?huì)在 Electron 結(jié)束初始化 // 和創(chuàng)建瀏覽器窗口的時(shí)候調(diào)用 // 部分 API 在 ready 事件觸發(fā)后才能使用。 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 外,當(dāng)所有窗口都被關(guān)閉的時(shí)候退出程序。 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. 也可以拆分成幾個(gè)文件,然后用 require 導(dǎo)入。
// preload.js // All the Node.js APIs are available in the preload process. // 它擁有與Chrome擴(kuò)展一樣的沙盒。 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 運(yùn)行命令
打開(kāi) package.json 在 scrpit 對(duì)象中添加 electron 運(yùn)行命令
"scripts": { "dev": "vite --host", "build": "vite build", "preview": "vite preview", "start": "electron .", },
打包項(xiàng)目,生成dist
運(yùn)行 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') // 打開(kāi)開(kāi)發(fā)工具 // mainWindow.webContents.openDevTools() }
最后運(yùn)行 npm run start
解決資源無(wú)法加載
最后運(yùn)行出來(lái)會(huì)發(fā)現(xiàn)是白屏,打開(kāi)程序控制臺(tái)可以看到是js文件找不到。 打開(kāi)dist中index.html發(fā)現(xiàn)是js和css路徑都是絕對(duì)路徑,所以這里需要修改為相對(duì)路徑。
打開(kāi) vite.config.js 配置更路徑為相對(duì)路徑
export default defineConfig({ plugins: [vue()], base: './', })
然后重新打包,再運(yùn)行npm run start 就可以看到頁(yè)面了。
開(kāi)發(fā)環(huán)境:熱更新
這里在開(kāi)發(fā)環(huán)境中有一個(gè)問(wèn)題就是,咱們這里的渲染進(jìn)程是打包好的dist文件,無(wú)法每次修改后熱更新。只有重新打包生成新的dist后頁(yè)面才會(huì)更新。這在開(kāi)發(fā)的時(shí)候顯然是方便的。
兩個(gè)工具 concurrently wait-on
npm i concurrently -D npm i wait-on -D
- concurrently:方便 script 同時(shí)啟動(dòng)多個(gè)命令
- wait-on:它可以等待文件、端口、套接字和 http(s) 資源可用后觸發(fā)。
開(kāi)發(fā)時(shí)熱更新,我們就要放棄build一個(gè)dist文件來(lái)作為渲染進(jìn)程的做法了。 簡(jiǎn)單來(lái)說(shuō),我們正常執(zhí)行 npm run dev 生成一個(gè)頁(yè)面服務(wù),這樣的環(huán)境是有熱更新的。所以我們只需要在主進(jìn)程中加載dev服務(wù)中的頁(yè)面作為渲染進(jìn)程就可以了。 修改一下主進(jìn)程 main.js
... const createWindow = () => { // Create the browser window. const mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { preload: path.join(__dirname, "/preload.js"), }, }); // 加載 index.html mainWindow.loadURL("http://localhost:3333/"); // 打開(kāi)開(kāi)發(fā)工具 // mainWindow.webContents.openDevTools() }; ...
然后打開(kāi)兩個(gè)終端,第一個(gè)先執(zhí)行 npm run dev,等待服務(wù)啟動(dòng)后在另外一個(gè)里執(zhí)行npm run start 即可。
當(dāng)然我們也可以一個(gè)命令完成這些。在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\"" }, ...
開(kāi)發(fā)時(shí)執(zhí)行 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" }, ...
執(zhí)行 npm run exe-build ,等待執(zhí)行結(jié)束,dist文件夾下會(huì)多一個(gè)win-unpacked,其里面有一個(gè)exe文件就是我們的程序執(zhí)行文件。
現(xiàn)在我們加載的還是dev服務(wù),所以還需要修改一下主進(jìn)程main.js
... // 加載 index.html // 判斷當(dāng)前是否為開(kāi)發(fā)環(huán)境 console.log("isPackaged: ", app.isPackaged); if (!app.isPackaged) { mainWindow.loadURL("http://localhost:3333/"); } else { mainWindow.loadFile("./dist/index.html"); } ...
app.isPackaged 主要用來(lái)判斷是否為開(kāi)發(fā)環(huán)境。
解決index.html找不到的問(wèn)題
我們打開(kāi)win-unpacked,執(zhí)行exe文件,會(huì)發(fā)現(xiàn)頁(yè)面沒(méi)有內(nèi)容,打開(kāi)F12控制臺(tái),發(fā)現(xiàn)index.html根本沒(méi)有找到。
其地址 ...dist/win-unpacked/resources/app.asar/dist/index.html,找不到的原因可以大概猜一下是我們的頁(yè)面沒(méi)有打包進(jìn)app.asar中。
所以我們可以在electron-builder打包配置中設(shè)置一下我們要打包的文件。
項(xiàng)目更目錄創(chuàng)建 electron.config.json
{ "files": ["main.js", "preload.js", "./dist"], "productName": "test" }
這里我們?cè)O(shè)置了files字段,其目的就是設(shè)置打包的數(shù)據(jù)內(nèi)容。 productName 就是設(shè)置exe文件的文件名。
然后修改exe-build命令
"exe-build": "electron-builder -config electron.config.json"
運(yùn)行命令后,可以看到exe文件已經(jīng)修改為test.exe。雙擊運(yùn)行也可以看到頁(yè)面了。
最后完善一下打包命令
"exe-build": "vite build & electron-builder -config electron.config.json"
以上就是vite + electron-builder 打包配置詳解的詳細(xì)內(nèi)容,更多關(guān)于vite + electron-builder 打包配置的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Electron 使? electron-builder 打包應(yīng)用過(guò)程詳解
- 使用electron-builder將項(xiàng)目打包成桌面程序的詳細(xì)教程
- vue配置electron使用electron-builder進(jìn)行打包的操作方法
- electron-builder打包vue2項(xiàng)目問(wèn)題總結(jié)
- 快速解決electron-builder打包時(shí)下載依賴(lài)慢的問(wèn)題
- vue項(xiàng)目使用electron-builder庫(kù)打包成桌面程序的過(guò)程
- electron-builder打包exe后白屏的解決方法
- electron-builder 的基本使用及electron打包步驟
- electron-builder打包配置詳解
- Electron 打包問(wèn)題:electron-builder 下載各種依賴(lài)出錯(cuò)(推薦)
- electron-builder打包與發(fā)布Electron應(yīng)用
相關(guān)文章
解決ant Design中Select設(shè)置initialValue時(shí)的大坑
這篇文章主要介紹了解決ant Design中Select設(shè)置initialValue時(shí)的大坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10Vue3+Vite項(xiàng)目按需自動(dòng)導(dǎo)入配置以及一些常見(jiàn)問(wèn)題修復(fù)
Vite是一種新型前端構(gòu)建工具,能夠顯著提升前端開(kāi)發(fā)體驗(yàn),下面這篇文章主要給大家介紹了關(guān)于Vue3+Vite項(xiàng)目按需自動(dòng)導(dǎo)入配置以及一些常見(jiàn)問(wèn)題修復(fù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02vue的$http的get請(qǐng)求要加上params操作
這篇文章主要介紹了vue的$http的get請(qǐng)求要加上params操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11vue項(xiàng)目中將element-ui table表格寫(xiě)成組件的實(shí)現(xiàn)代碼
這篇文章主要介紹了vue項(xiàng)目中將element-ui table表格寫(xiě)成組件的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-06-06Vue 中指令v-bind動(dòng)態(tài)綁定及與v-for結(jié)合使用詳解
這篇文章主要為大家介紹了Vue 中指令v-bind動(dòng)態(tài)綁定及與v-for結(jié)合使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09vue后臺(tái)管理如何配置動(dòng)態(tài)路由菜單
這篇文章主要介紹了vue后臺(tái)管理如何配置動(dòng)態(tài)路由菜單,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04一文詳解Vue3組件通信輕松玩轉(zhuǎn)復(fù)雜數(shù)據(jù)流
在大型Vue項(xiàng)目中,組件通信如同神經(jīng)網(wǎng)絡(luò)般貫穿整個(gè)應(yīng)用,這篇文章將為大家詳細(xì)介紹一下Vue3中的組件通信方式,有需要的小伙伴可以了解下2025-02-02