Electron實戰之環境搭建

工欲善其事必先利其器,在進行實戰開發的時候,我們最終的步驟是搞好一個舒服的開發環境,目前支持 Vue 的 Electron 工程化工具主要有 electron-vue、Vue CLI Plugin Electron Builder、electron-vite。

接下來我們將分別介紹基于 Vue CLI Plugin Electron Builder 和 electron-vite 的開發環境搭建。

一、vue-cli-plugin-electron-builder

vue-cli-plugin-electron-builder 是一個基于 VueCli 的插件工具,它是一個 npm 包,能夠為 Vue CLI 創建的項目添加 Electron 構建的能力。

1.1 創建 VueCli 項目

創建一個基于 VueCli 的項目,需要先安裝VueCli工具,命令如下:

npm?install?-g?@vue/cli
#?OR
yarn?global?add?@vue/cli

安裝好 Cli工具后,我們就可以使用Cli工具創建一個 Vue 項目了,如下所示。

vue?create?electron-vue

此處,我們選擇 Vue 3 + babel + eslint 的模式。

圖片

圖片

創建完成之后,目錄結構如下所示。

圖片

圖片

1.2 安裝 vue-cli-plugin-electron-builder

vue-cli-plugin-electron-builder 是一個 VueCli 插件,可以使用下面的命令進行安裝。

vue?add?electron-builder

在安裝的時候,只提供了 Electron v11、v12、v13 這 3 個版本選擇,這里我們先選 v13。安裝完成之后,目錄結構如下所示。

圖片

圖片

對于Electron項目,我們需要重點關注以下幾個文件:

  • package.json:這個文件通過 main 字段定義了編譯后的主入口文件路徑,并且通過 script 字段定義了應用程序的啟動、編譯等腳本程序。

  • src/background.js:這個文件就是 Electron 的主進程的入口文件,它是應用程序的入口點,負責管理整個應用的生命周期、創建窗口、原生 API 調用等。

  • src/main.js 是渲染進程的入口文件,就是我們通常寫的 Vue 前端代碼的入口。

1.3 目錄結構優化

接下來,我們對主進程和渲染進程進行一些優化,目的是方面后期項目的擴展。我們新建了 main 和 renderer 目錄,并將之前的 src/background.js 遷移到了 main 目錄下,且重命名為 index.js。然后再把之前和 Vue 相關的渲染進程的文件以及文件夾全部遷移到了 renderer 目錄下。

同時,目錄調整后,我們需要重新修改一下 vue.config.js 的編譯配置:

//?vue.config.js
const?{?defineConfig?}?=?require('@vue/cli-service')
module.exports?=?defineConfig({transpileDependencies:?true,pages:?{index:?{entry:?'src/renderer/main.js',},},pluginOptions:?{electronBuilder:?{nodeIntegration:?true,mainProcessFile:?'src/main/index.js',mainProcessWatch:?['src/main'],},},
})

當然,記得修改 package.json 里面的 main 配置:

{..."main":?"index.js",...
}

1.4 安裝electron

然后,我們安裝最新的electron版本,命令如下:

yarn?add?electron@29.0.0?-D

版本情況:

如果安裝過程中,出現下面的網絡錯誤。

圖片

圖片

可以在項目中.npmrc 文件代理 Electron 的安裝源,指向 taobao,如下所示。

electron_mirror=https://npmmirror.com/mirrors/electron/

安裝完成后,我們運行一下啟動本地服務。

npm?run?electron:serve

如果沒有任何的錯誤,會看到下面的頁面。

圖片

圖片

二、electron-vite

electron-vite 是一個新型 Electron 開發構建工具,旨在為 Electron 提供更快、更精簡的開發體驗,它是基于 vite 構建 Electron 應用的。我們可以使用 @quick-start/electron 工具快速創建一個 electron-vite 的應用。

npm?create?@quick-start/electron

然后按照提示輸入對應的內容,下一步即可:

??Project?name:?…?<electron-app>
??Select?a?framework:???vue
??Add?TypeScript??…?No?/?Yes
??Add?Electron?updater?plugin??…?No?/?Yes
??Enable?Electron?download?mirror?proxy??…?No?/?YesScaffolding?project?in?./<electron-app>...
Done.

新建完成后,electron-vite 的項目結構如下所示。

可以看到,整體目錄結構還是比較規范和清晰的,我們幾乎不需要進行任何調整就可以直接使用了。在我們安裝好相關的依賴后,我們可以使用下面的命令運行項目。

npm?run?dev

最終的效果如下圖。

圖片

圖片

三、主進程啟動項目

不管是通過 vue-cli-plugin-electron-builder 創建還是通過 electron-vite 創建的項目,都需要通過唯一的主進程進行應用程序的啟動。主進程的第一步操作就是監聽 app ready 事件來創建窗口:

//?main/index.js
app.whenReady().then(()?=>?{createWindow()
})

接下來,我們需要通過 createWindow 函數構造一個簡單的窗口。

//?main/index.js
function?createWindow()?{const?mainWindow?=?new?BrowserWindow({width:?900,height:?670,show:?false,autoHideMenuBar:?true,webPreferences:?{preload:?join(__dirname,?'../preload/index.js'),sandbox:?false}})mainWindow.on('ready-to-show',?()?=>?{mainWindow.show()})if?(is.dev?&&?process.env['ELECTRON_RENDERER_URL'])?{mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL'])}?else?{mainWindow.loadFile(join(__dirname,?'../renderer/index.html'))}
}

需要注意的是,我們在窗口初始化時,指定了 show: false 的參數,意味著窗口創建完成后不會立即顯示。然后通過監聽 mainWindow.on('ready-to-show') 的事件觸發后再通過 mainWindow.show() 方法來顯示窗口。
這樣做是因為 Electron 中的 ready-to-show 事件表示窗口內容已經加載完成且應用程序準備好顯示給用戶。在等待 ready-to-show 事件觸發后再調用 window.show(),可以確保用戶看到的是完全加載并準備好的界面,避免了展示未完成的內容。

最后,通過監聽 app.on('window-all-close') 事件,來處理非 macOS 下的所有窗口關閉后的退出整個 electron 應用。

//?main/index.js
app.on('window-all-closed',?()?=>?{if?(process.platform?!==?'darwin')?{app.quit()}
})

這和 windows 平臺的操作習慣是一樣的,在windows平臺上,通常我們把應用的窗口都關了之后也就默認把這個應用給退出了。


參考:https://cn.electron-vite.org/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697461.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697461.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697461.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一、計算機的語言奇跡:探秘ChatGPT的智能回答和寫作能力—我耀學IT

目前我們這個行業&#xff0c;最火的話題無疑是AI人工智能&#xff0c;類似ChatGPT這樣的智能Ai,今天剩下的時間不多&#xff0c;每天一個主題&#xff0c;我給大家講一下計算機回答問題和寫作的能力&#xff0c;尤其是聊天型AI模型ChatGPT。讓大家可以更加前沿的了解一下關于它…

暴雨信息|警惕AI 的變革陣痛與不穩定性

過去的未來主義幽靈使我們對數字化變革的預測保持謹慎。 我們現在經常聽到&#xff0c;世界正處于一個技術轉折點&#xff1b;我們正在快速步入一個由 ChatGPT 等人工智能工具塑造的未來。然而&#xff0c;我懷疑&#xff0c;2024 年我們將會被提醒到納普斯特的幽靈——以及其他…

ChatGPT在數據分析崗位了解階段的應用

ChatGPT在數據分析崗位了解階段的應用 ? 1.1 數據分析師的職責與技能要求 ? 如果想成為數據分析師&#xff0c;首先要了解這個崗位的具體職責和技能要求。這個問題可以直接詢問ChatGPT&#xff1a; ? ChatGPT收到上述內容后&#xff0c;返回如下結果。 ? ChatGPT給出的信…

LeetCode56.合并區間

題目 以數組 intervals 表示若干個區間的集合&#xff0c;其中單個區間為 intervals[i] [starti, endi] 。請你合并所有重疊的區間&#xff0c;并返回 一個不重疊的區間數組&#xff0c;該數組需恰好覆蓋輸入中的所有區間 。 示例 輸入&#xff1a;intervals [[1,3],[2,6]…

【論文精讀】Segment Anything

Segment Anything 前言Abstract1. Introduction2. Segment Anything Task3. Segment Anything Model4. Segment Anything Data Engine5. Segment Anything Dataset6. Segment Anything RAI Analysis7. Zero-Shot Transfer Experiments7.1. Zero-Shot Single Point Valid Mask E…

【開源】SpringBoot框架開發音樂平臺

目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊三、系統展示 四、核心代碼4.1 查詢單首音樂4.2 新增音樂4.3 新增音樂訂單4.4 查詢音樂訂單4.5 新增音樂收藏 五、免責說明 一、摘要 1.1 項目介紹 基于微信小程序JAVAVueSpringBootMySQL的音樂平臺&#xff0c;包含了音樂…

Python 類型提示(Type Hinting)及typing庫

目錄 為什么要進行類型提示變量添加靜態類型注釋函數參數的類型注釋**基本類型注釋****基于`typing`庫**其他高級用法注意事項特殊情況類引用自身實例作為形參時的類型注釋參數要求為一個函數為什么要進行類型提示 從 Python 3.5 開始引入,類型提示允許程序員為變量、函數參數…

【ctfshow—web】——信息搜集篇1(web1~20詳解)

ctfshow—web題解 web1web2web3web4web5web6web7web8web9web10web11web12web13web14web15web16web17web18web19web20 web1 題目提示 開發注釋未及時刪除 那就找開發注釋咯&#xff0c;可以用F12來查看&#xff0c;也可以CtrlU直接查看源代碼呢 就拿到flag了 web2 題目提示 j…

第3.5章:StarRocks數據導入——Broker Load

注&#xff1a;本篇文章闡述的是StarRocks-3.2版本的Broker Load導入機制 一、概述 Broker Load導入方式支持從HDFS類的外部存儲系統&#xff08;例如&#xff1a;HDFS、阿里OSS、騰訊COS、華為云OBS等&#xff09;&#xff0c;支持Parquet、ORC、CSV、及 JSON 四種文件格式&a…

vue里echarts的使用:畫餅圖和面積折線圖

vue里echarts的使用,我們要先安裝echarts,然后在main.js里引入: //命令安裝echarts npm i echarts//main.js里引入掛載到原型上 import echarts from echarts Vue.prototype.$echarts = echarts最終我們實現的效果如下: 頭部標題這里我們封裝了一個全局公共組件common-he…

qt 軟件發布(Windows)

1. 開發環境 QtCreator MSVC編譯器 2. 源碼編譯 生成release或者debug版本的exe可執行文件(x64或x86) 3. windeployqt 打包 ①左下角開始菜單欄找到QT的命令交互對話框&#xff0c;如下圖MSVC 2017 64-bit(根據第二步編譯的類型選擇64位或者32位)。 ②cd 切換到第二步可…

TCP/IP協議詳解

文章目錄 TCP/IP協議概述基于TCP/IP協議的應用工具協議協議的必要性 TCP/IP協議TCP/IP協議族協議的分層 傳輸方式的分類報文、幀、數據包等的區別TCP 和 UDP的區別 TCP/IP協議概述 TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff09;是一組通信協…

《圖解HTTP》筆記2:http的構成

1&#xff0c;查看瀏覽器上面一個具體的http請求 瀏覽器地址欄輸入網址&#xff1a;https://news.baidu.com/ 使用瀏覽器的開發者工具&#xff0c;查看網絡中發送和接受的數據。 可以看到輸入一個網址&#xff0c;瀏覽器和服務器進行了很多的交互。&#xff08;綠色部分&#…

python + selenium/appnium

Selenium 的自動化原理: selenium 自動化流程: 自動化程序調用Selenium 客戶端庫函數&#xff08;比如點擊按鈕元素&#xff09;客戶端庫會發送Selenium 命令 給瀏覽器的驅動程序瀏覽器驅動程序接收到命令后 ,驅動瀏覽器去執行命令瀏覽器執行命令瀏覽器驅動程序獲取命令執行的…

ubuntu環境下openssl庫的簡單使用

安裝 sudo apt-get install libssl-devaes算法demo 編譯&#xff1a;gcc aes.c -lssl -lcrypto -o aes 運行&#xff1a;./aes #include<stdio.h> #include<stdlib.h> #include<string.h> #include<openssl/aes.h>#define AES_KEY_SIZE 128 // AES密…

UNI-APP_app跳轉企業微信客服對話

uniapp打包app&#xff0c;app里點擊客服&#xff0c;跳轉企業微信客服對話。為什么是企業微信&#xff1f;因為只有微信小程序才可以通過 button 的 open-type‘share’ 打開微信客服對話框&#xff08;微信客服要在公眾號平臺配置&#xff09; 1、appId獲取 &#xff08;1&a…

OJAC近嶼智能張立賽博士揭秘GPT Store:技術創新、商業模式與未來趨勢

> - [Look&#xff01;&#x1f440;我們的大模型商業化落地產品](https://www.airecruitas.com/aigc) >- &#x1f4d6;更多AI資訊請&#x1f449;&#x1f3fe;[關注](https://mp.weixin.qq.com/s/85qwuIydaaydMQz2g0rgMA) >- [Free三天集訓營助教在線為您火熱答疑…

C#_各式各樣的參數(引用參數、輸出參數、數組參數、具名參數、可選參數)

引用參數 值參數和引用參數的區別在于傳參時是否會創建參數副本&#xff1a;值參數不會創建副本&#xff0c;而引用參數會創建副本。 換言之&#xff0c;值類型參數的參數與實體之間無直接關聯&#xff0c;修改參數不會對實體產生影響&#xff1b;引用類型參數的參數與實體可視…

6.微格式

微格式 經典真題 知道什么是微格式嗎&#xff1f;談談理解。在前端構建中應該考慮微格式嗎&#xff1f; 微格式介紹 所謂微格式&#xff0c;是建立在已有的、被廣泛采用的標準基礎之上的一組簡單的、開放的數據格式。 具體表現是把語義嵌入到 HTML 中&#xff0c;以便有助…

通過SSH 可以訪問Ubuntu Desktop嗎?

你可以在 Ubuntu Desktop 上開啟 SSH 服務&#xff0c;以便其他機器可以通過 SSH 連接到你的服務器。以下是在 Ubuntu Desktop 上開啟 SSH 服務的步驟&#xff1a; 打開終端 (Terminal) 應用程序。 輸入以下命令安裝 OpenSSH 服務器&#xff1a; sudo apt-get update sudo ap…