vue 項(xiàng)目集成 electron 和 electron 打包及環(huán)境配置方法
vue + electron 開發(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: { // 書寫渲染進(jìn)程中的配置 nodeIntegration: true, //開啟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í),如果沒有其他 // 打開的窗口,那么程序會(huì)重新創(chuàng)建一個(gè)窗口。 if (BrowserWindow.getAllWindows().length === 0) createWindow() }) }) // 除了 macOS 外,當(dāng)所有窗口都被關(guān)閉的時(shí)候退出程序。 因此,通常對(duì)程序和它們?cè)? // 任務(wù)欄上的圖標(biāo)來說,應(yīng)當(dāng)保持活躍狀態(tài),直到用戶使用 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)在就可以通過npm run electron:dev
運(yùn)行electron了
因?yàn)樯厦鎚ain.css運(yùn)行的是 dist文件夾 中的 index.html ,所以如果沒有該文件的得先npm run build
多環(huán)境配置并在本地開發(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: { // 書寫渲染進(jìn)程中的配置 nodeIntegration: true, //開啟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)聽窗口 mainWindow.loadURL('http://localhost:3100') // 打開開發(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í),如果沒有其他 // 打開的窗口,那么程序會(huì)重新創(chuàng)建一個(gè)窗口。 if (BrowserWindow.getAllWindows().length === 0) createWindow() }) }) // 除了 macOS 外,當(dāng)所有窗口都被關(guān)閉的時(shí)候退出程序。 因此,通常對(duì)程序和它們?cè)? // 任務(wù)欄上的圖標(biāo)來說,應(yīng)當(dāng)保持活躍狀態(tài),直到用戶使用 Cmd + Q 退出。 app.on('window-all-closed', function () { if (process.platform !== 'darwin') app.quit() })
這里 http://localhost:3100 為我本地開發(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)聽窗口了。
打包應(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),沒有的話可以刪除
運(yùn)行打包命令
npm run electron:build
打包成功后,在根目錄會(huì)出現(xiàn)一個(gè)buileder文件夾,打包后的應(yīng)用就在里面
打包過程中常見的一些坑
一、打包后沒有報(bào)錯(cuò),但打開后一片空白
打開調(diào)試工具發(fā)現(xiàn)文件引入失敗,且引入路徑也不對(duì)。這種一般是根路徑配置問題
解決方法:
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文件中依賴electron應(yīng)該在 devDependencies而不是dependencies中
解決方法:
將electron移到devDependencies,并重裝依賴
三、如果報(bào)類似 http://github.com/xxxx/xxxx
的錯(cuò)誤一般是網(wǎng)絡(luò)問題
解決方法:
過一會(huì)兒再嘗試,或者科學(xué)上網(wǎng)
四、如果報(bào)類似 zip: not a valid zip file github.com/develar/app-builder/pkg/archive/zipx.(*Extractor).extractAndWriteFile
的錯(cuò)誤
解決方法:
重裝依賴
到此這篇關(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)目頁面無法跳轉(zhuǎn)的問題小結(jié)
- vue項(xiàng)目使用electron進(jìn)行打包操作的全過程
- 手把手教你使用electron將vue項(xiàng)目打包成exe
- 關(guān)于electron-vue打包后運(yùn)行白屏的解決方案
- vue項(xiàng)目打包成桌面快捷方式(electron)的方法
- 用electron打包vue項(xiàng)目中的報(bào)錯(cuò)問題及解決
相關(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-04Vue中實(shí)現(xiàn)v-for循環(huán)遍歷圖片的方法
這篇文章主要介紹了Vue中實(shí)現(xiàn)v-for循環(huán)遍歷圖片的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08vue2中的keep-alive使用總結(jié)及注意事項(xiàng)
vue2.0提供了一個(gè)keep-alive組件用來緩存組件,避免多次加載相應(yīng)的組件,減少性能消耗。本文給大家介紹vue2中的keep-alive使用總結(jié)及注意事項(xiàng),需要的朋友參考下吧2017-12-12vux-scroller實(shí)現(xiàn)移動(dòng)端上拉加載功能過程解析
這篇文章主要介紹了vux-scroller實(shí)現(xiàn)移動(dòng)端上拉加載功能過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10vue-cli創(chuàng)建的項(xiàng)目,配置多頁面的實(shí)現(xiàn)方法
下面小編就為大家分享一篇vue-cli創(chuàng)建的項(xiàng)目,配置多頁面的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03element step組件在另一側(cè)加時(shí)間軸顯示
本文主要介紹了element step組件在另一側(cè)加時(shí)間軸顯示,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06Vue.js實(shí)現(xiàn)watch屬性的示例詳解
本文討論了watch函數(shù)是如何利用副作用函數(shù)和options進(jìn)行封裝實(shí)現(xiàn)的,也通過調(diào)度函數(shù)去控制回調(diào)函數(shù)的立即執(zhí)行和執(zhí)行時(shí)機(jī),還可以解決競(jìng)態(tài)問題,感興趣的可以了解一下2022-04-04el-table 選擇框根據(jù)條件設(shè)置某項(xiàng)不可選中的操作代碼
這篇文章主要介紹了el-table 選擇框根據(jù)條件設(shè)置某項(xiàng)不可選中的操作代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03