vue 項(xiàng)目集成 electron 和 electron 打包及環(huán)境配置方法
vue + electron 開(kāi)發(fā)桌面端應(yīng)用
安裝 electron
npm i electron -D
記得加上-D,electron 需添加到devDependencies,如果添加到dependencies后面運(yùn)行可能會(huì)報(bào)錯(cuò)
根目錄創(chuàng)建electron文件夾,在electron文件夾創(chuàng)建main.js(或者background.js)
在文件中添加如下代碼:
// 控制應(yīng)用生命周期和創(chuàng)建原生瀏覽器窗口的模組
const { app, BrowserWindow, Menu } = require('electron')
const path = require('path')
function createWindow() {
// 創(chuàng)建瀏覽器窗口
const mainWindow = new BrowserWindow({
width: 1200,
height: 800,
webPreferences: {
// 書(shū)寫(xiě)渲染進(jìn)程中的配置
nodeIntegration: true, //開(kāi)啟true這一步很重要,目的是為了vue文件中可以引入node和electron相關(guān)的API
contextIsolation: false, // 可以使用require方法
enableRemoteModule: true, // 可以使用remote方法
},
})
// 加載 index.html
mainWindow.loadFile(path.resolve(__dirname, '../dist/index.html')) // 新增
}
// 這段程序?qū)?huì)在 Electron 結(jié)束初始化
// 和創(chuàng)建瀏覽器窗口的時(shí)候調(diào)用
// 部分 API 在 ready 事件觸發(fā)后才能使用。
app.whenReady().then(() => {
createWindow()
app.on('activate', function () {
// 通常在 macOS 上,當(dāng)點(diǎn)擊 dock 中的應(yīng)用程序圖標(biāo)時(shí),如果沒(méi)有其他
// 打開(kāi)的窗口,那么程序會(huì)重新創(chuàng)建一個(gè)窗口。
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})
// 除了 macOS 外,當(dāng)所有窗口都被關(guān)閉的時(shí)候退出程序。 因此,通常對(duì)程序和它們?cè)?
// 任務(wù)欄上的圖標(biāo)來(lái)說(shuō),應(yīng)當(dāng)保持活躍狀態(tài),直到用戶(hù)使用 Cmd + Q 退出。
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit()
})修改package.json
1、在scripts同級(jí)下添加
"main": "electron/main.js",
根據(jù)實(shí)際的文件路徑配置
2、查看是否存在"type": "module"配置
如果有,則刪除"type"配置,因?yàn)閙ain中用的不是es6的模塊引入
3、"scripts"中添加"electron:dev": "electron .",用于啟用electron
現(xiàn)在就可以通過(guò)npm run electron:dev運(yùn)行electron了
因?yàn)樯厦鎚ain.css運(yùn)行的是 dist文件夾 中的 index.html ,所以如果沒(méi)有該文件的得先npm run build
多環(huán)境配置并在本地開(kāi)發(fā)時(shí)使用熱更新
安裝 electron-reload
npm i electron-reload
修改”scripts“ 指令
"electron:dev": "set ELECTRON_ENV=development& electron .",
在本地運(yùn)行時(shí)添加值為 ‘development’ 的 ELECTRON_ENV 環(huán)境變量
修改main.js內(nèi)容
完整代碼如下
// 控制應(yīng)用生命周期和創(chuàng)建原生瀏覽器窗口的模組
const { app, BrowserWindow, Menu } = require('electron')
const path = require('path')
function createWindow() {
// 創(chuàng)建瀏覽器窗口
const mainWindow = new BrowserWindow({
width: 1200,
height: 800,
webPreferences: {
// 書(shū)寫(xiě)渲染進(jìn)程中的配置
nodeIntegration: true, //開(kāi)啟true這一步很重要,目的是為了vue文件中可以引入node和electron相關(guān)的API
contextIsolation: false, // 可以使用require方法
enableRemoteModule: true, // 可以使用remote方法
},
})
console.log("process.env.ELECTRON_ENV", process.env.ELECTRON_ENV)
// let env = 'pro'
let env = process.env.ELECTRON_ENV
// 環(huán)境變量 ELECTRON_ENV 值為 development 則使用熱更新
// 配置熱更新
if (env == 'development') {
const elePath = path.join(__dirname, '../node_modules/electron')
require('electron-reload')('../', {
electron: require(elePath),
})
// 熱更新監(jiān)聽(tīng)窗口
mainWindow.loadURL('http://localhost:3100')
// 打開(kāi)開(kāi)發(fā)工具
mainWindow.webContents.openDevTools()
} else {
// 生產(chǎn)環(huán)境中要加載文件,打包的版本
Menu.setApplicationMenu(null)
// 加載 index.html
mainWindow.loadFile(path.resolve(__dirname, '../dist/index.html')) // 新增
}
}
// 這段程序?qū)?huì)在 Electron 結(jié)束初始化
// 和創(chuàng)建瀏覽器窗口的時(shí)候調(diào)用
// 部分 API 在 ready 事件觸發(fā)后才能使用。
app.whenReady().then(() => {
createWindow()
app.on('activate', function () {
// 通常在 macOS 上,當(dāng)點(diǎn)擊 dock 中的應(yīng)用程序圖標(biāo)時(shí),如果沒(méi)有其他
// 打開(kāi)的窗口,那么程序會(huì)重新創(chuàng)建一個(gè)窗口。
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})
// 除了 macOS 外,當(dāng)所有窗口都被關(guān)閉的時(shí)候退出程序。 因此,通常對(duì)程序和它們?cè)?
// 任務(wù)欄上的圖標(biāo)來(lái)說(shuō),應(yīng)當(dāng)保持活躍狀態(tài),直到用戶(hù)使用 Cmd + Q 退出。
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit()
})這里 http://localhost:3100 為我本地開(kāi)發(fā)時(shí)項(xiàng)目運(yùn)行的url
運(yùn)行
本地啟動(dòng)web項(xiàng)目
一般是:npm run dev
然后再:npm run electron:dev啟動(dòng)electron。這樣electron就可以實(shí)時(shí)監(jiān)聽(tīng)窗口了。
打包應(yīng)用
安裝 electron-builder
npm i electron-builder -D
package.json中新增scripts
"electron:build": "vite build --mode application & electron-builder build --config electron-builder.json",
創(chuàng)建 electron-builder.json 進(jìn)行打包配置
{
"appId": "com.example.myapp",
"productName": "app名字",
"files": ["./electron/main.js", "./dist"],
"extraFiles": ["./videos", "./cvideo"],
"directories": {
"output": "./buileder"
},
"nsis": {
"oneClick": false,
"perMachine": true,
"allowToChangeInstallationDirectory": true
},
"win": {
"icon": "public/icon.png",
"target": ["nsis", "zip"]
},
"mac": {
"icon": "public/icon.png",
"target": "dmg"
},
"linux": {
"icon": "public/icon.png",
"target": "AppImage"
},
"dmg": {
"contents": [
{
"x": 110,
"y": 150
},
{
"x": 240,
"y": 150,
"type": "link",
"path": "/Applications"
}
]
},
"appx": {
"publisher": "CN=app名字"
}
}public/icon.png 為應(yīng)用的icon圖標(biāo),沒(méi)有的話可以刪除
運(yùn)行打包命令
npm run electron:build
打包成功后,在根目錄會(huì)出現(xiàn)一個(gè)buileder文件夾,打包后的應(yīng)用就在里面

打包過(guò)程中常見(jiàn)的一些坑
一、打包后沒(méi)有報(bào)錯(cuò),但打開(kāi)后一片空白
打開(kāi)調(diào)試工具發(fā)現(xiàn)文件引入失敗,且引入路徑也不對(duì)。這種一般是根路徑配置問(wèn)題
解決方法:
1、配置base,以vite為例
在vite.config.ts中添加base配置
export default defineConfig({
base: './',
})2、在 index.html 中查看head中是否有這段標(biāo)簽
<base href="/" rel="external nofollow" >
注意!注意!注意?。ㄟ@個(gè)bug我之前找了好一會(huì)兒才發(fā)現(xiàn))
有的話刪除掉
二、如果報(bào):Package "electron" is only allowed in "devDependencies". Please remove it from the "dependencies"
這個(gè)錯(cuò)誤表示package.json文件中依賴(lài)electron應(yīng)該在 devDependencies而不是dependencies中
解決方法:
將electron移到devDependencies,并重裝依賴(lài)
三、如果報(bào)類(lèi)似 http://github.com/xxxx/xxxx 的錯(cuò)誤一般是網(wǎng)絡(luò)問(wèn)題
解決方法:
過(guò)一會(huì)兒再?lài)L試,或者科學(xué)上網(wǎng)
四、如果報(bào)類(lèi)似 zip: not a valid zip file github.com/develar/app-builder/pkg/archive/zipx.(*Extractor).extractAndWriteFile的錯(cuò)誤
解決方法:
重裝依賴(lài)
到此這篇關(guān)于vue 項(xiàng)目集成 electron 和 electron 打包及環(huán)境配置的文章就介紹到這了,更多相關(guān)vue 集成 electron 和 electron 打包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue配置electron使用electron-builder進(jìn)行打包的操作方法
- vue3使用Electron打包成exe的方法與打包報(bào)錯(cuò)解決
- 使用electron打包Vue前端項(xiàng)目的詳細(xì)流程
- 如何使用electron將vue項(xiàng)目打包成.exe文件(保姆級(jí)教程)
- 解決electron打包vue-element-admin項(xiàng)目頁(yè)面無(wú)法跳轉(zhuǎn)的問(wèn)題小結(jié)
- vue項(xiàng)目使用electron進(jìn)行打包操作的全過(guò)程
- 手把手教你使用electron將vue項(xiàng)目打包成exe
- 關(guān)于electron-vue打包后運(yùn)行白屏的解決方案
- vue項(xiàng)目打包成桌面快捷方式(electron)的方法
- 用electron打包vue項(xiàng)目中的報(bào)錯(cuò)問(wèn)題及解決
相關(guān)文章
Vue源碼學(xué)習(xí)defineProperty響應(yīng)式數(shù)據(jù)原理實(shí)現(xiàn)
這篇文章主要為大家介紹了Vue源碼學(xué)習(xí)defineProperty響應(yīng)式數(shù)據(jù)原理實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
如何使用vuejs實(shí)現(xiàn)更好的Form validation?
如何使用vuejs實(shí)現(xiàn)更好的Form validation?這篇文章主要介紹了vue-form插件的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
解決vue中使用swiper 插件出錯(cuò)的問(wèn)題
這篇文章主要介紹了vue中使用swiper 插件出錯(cuò)問(wèn)題及解決辦法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08
Vue中實(shí)現(xiàn)v-for循環(huán)遍歷圖片的方法
這篇文章主要介紹了Vue中實(shí)現(xiàn)v-for循環(huán)遍歷圖片的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
vue2中的keep-alive使用總結(jié)及注意事項(xiàng)
vue2.0提供了一個(gè)keep-alive組件用來(lái)緩存組件,避免多次加載相應(yīng)的組件,減少性能消耗。本文給大家介紹vue2中的keep-alive使用總結(jié)及注意事項(xiàng),需要的朋友參考下吧2017-12-12
vux-scroller實(shí)現(xiàn)移動(dòng)端上拉加載功能過(guò)程解析
這篇文章主要介紹了vux-scroller實(shí)現(xiàn)移動(dòng)端上拉加載功能過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
vue-cli創(chuàng)建的項(xiàng)目,配置多頁(yè)面的實(shí)現(xiàn)方法
下面小編就為大家分享一篇vue-cli創(chuàng)建的項(xiàng)目,配置多頁(yè)面的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
element step組件在另一側(cè)加時(shí)間軸顯示
本文主要介紹了element step組件在另一側(cè)加時(shí)間軸顯示,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
Vue.js實(shí)現(xiàn)watch屬性的示例詳解
本文討論了watch函數(shù)是如何利用副作用函數(shù)和options進(jìn)行封裝實(shí)現(xiàn)的,也通過(guò)調(diào)度函數(shù)去控制回調(diào)函數(shù)的立即執(zhí)行和執(zhí)行時(shí)機(jī),還可以解決競(jìng)態(tài)問(wèn)題,感興趣的可以了解一下2022-04-04
el-table 選擇框根據(jù)條件設(shè)置某項(xiàng)不可選中的操作代碼
這篇文章主要介紹了el-table 選擇框根據(jù)條件設(shè)置某項(xiàng)不可選中的操作代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03

