Electron(一)

前言:?參考尚硅谷視頻記錄:b站尚硅谷視頻-1小時上手electron

一、什么是electron?

是一款應用廣泛的、跨平臺的、桌面應用開發框架。

  • 應用廣泛:很多桌面應用都是這個框架寫的,例如騰訊qq、百度云
  • 跨平臺:跨window、mac、Linux這三大系統

二、electron的進程

main.js主進程使用Node api跟各個頁面之間雙向通信(ipc),同時使用native api實現操作的兼容

比如:主進程發出執行a,要想window、mac、linux都能聽懂,就需要native api翻譯一下

三、搭建工程

可參考:快速入門 | Electron

1、安裝node

在Node官網下載安裝即可,最好是最新的版本

2、初始化項目

package.json配置文件里會出現下圖,注意:作者和描述是必填的

3、安裝electron

npm install --save-dev electron
//或者
npm install electron -D

如果安裝報錯,可以試試用淘寶鏡像來安

cnpm i electron

4、打印hello world

在package.json里添加運行指令

新建一個入口文件main.js,就可以測試下能否正常打印了

四、案例實戰

可參考BrowserWindow | Electron

1、遠程頁面窗口

寫一個可以展示遠程頁面的窗口

2、本地頁面

新建個本地頁面,然后在main.js里掛上去就好

const { app, BrowserWindow } = require('electron');const createWindow = () => {const win = new BrowserWindow({width: 800,//窗口寬度height: 600,//窗口高度autoHideMenuBar: true,//隱藏默認菜單欄})win.loadFile('./pages/index/index.html')
}app.on('ready', () => {createWindow()
})

備注:關于CSP的詳細說明:MDN內容安全策略詳解?、Electron安全策略規范

//可以解決安全策略警告問題,記得在html里加上
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">

3、多系統兼容窗口生命周期

因為關閉窗口操作,對于不同系統有不同的規則。

  • window和Linux,關閉所有窗口時會退出應用
  • macOS 應用通常即使在沒有打開任何窗口的情況下也繼續運行,并且在沒有窗口可用的情況下激活應用時會打開新的窗口

所以需要配置以下代碼

//window && linux
//若果是非macOs系統,頁面全部關閉時就退出應用
app.on('window-all-closed', () => {if (process.platform !== 'darwin') app.quit()
})
//macOs
//這里的whenReady寫法和前面的on ready一樣
app.whenReady().then(() => {createWindow()//當應用啟動,且沒有頁面時,則打開一個新頁面app.on('activate', () => {if (BrowserWindow.getAllWindows().length === 0) createWindow()})
})

4、熱更新nodemon

每次保存后就自動熱更新頁面,配置如下:

//安裝nodemon
cnpm i nodemon -D
//重寫package.json里的start"scripts": {"start": "nodemon --exec electron ."},

添加一個nodemon文件

自此就可以利用nodemon,完成保存時刷新頁面啦。

5、認識preload

什么是preload?還記得前面的electron進程圖嗎?preload(預加載文件)也就是主進程node和渲染進程(html+js+css頁面)之間雙向通信的那個ipc,是二者之間的橋梁

什么情況需要使用preload呢?

例如,render里需要訪問process時,process是node主進程的參數,render渲染進程無法直接訪問,就需要通過preload傳遞

主進程和預加載腳本通過webPreferences關聯,而預加載進程通過設置類似全局參數把內容傳給了渲染進程

注意:主進程和渲染進程是一對多的關系,主進程、預加載腳本、渲染進程依次加載

五、進程通信

1、渲染進程 => 主進程

借案例來理解,要求從渲染進程頁面輸入文字后,點擊存入按鈕,輸入內容通過主進程存儲到D盤

效果如下

添加代碼如下

2、主進程 <=> 渲染進程

例如,渲染進程告知主進程要讀取的指令,主進程將信息傳遞給渲染進程,實現了雙向的溝通

效果如下:

參考上面的添加代碼

render.js

const btn3 = document.getElementById("btn3")btn3.onclick = async() => {//獲取主進程傳過來的文件信息const res = await myAPI.readFile()alert(res)
}

main.js

//讀取文件
function readFile() {const res = fs.readFileSync("D:/hello.txt").toString()return res
}//關鍵字關聯preload讀取操作
ipcMain.handle('file-read', readFile)

preload.js

readFile() {return ipcRenderer.invoke('file-read')}

3、主進程 => 渲染進程

類似于1

主進程,用win.webContens.send('信道','數據')發出數據

渲染進程,用ipcRender.on('信道','回調') 接收數據

//main.js
function createWindow(){win.webContents.sernd('message','你好嗎?')
}//preload.js
contextBrige.exposeInMainWorld('myApi',{getMessage:(callback) => {return ipcRender.on('message',callback);}
})

六、打包

方法一

失敗了,視頻中使用electron-builder打包

1、安裝electron-builder

cnpm install electron-builder -D

2、添加builder配置

3、運行命令打包

npm run build

然后就打包失敗了,原因是因為github訪問失敗

方法二

參考electron官網:打包您的應用程序 | Electron

npm install --save-dev @electron-forge/cli
npx electron-forge import
npm run make

打包后的文件,在根項目下的out文件夾里

七、框架

electron已經集成了框架,比如electron-vite,開箱即用支持react和vue,很方便

可以多多看下,并運用

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

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

相關文章

AI Agent開發第64課-DIFY和企業現有系統結合實現高可配置的智能零售AI Agent(上)

開篇 我們之前花了將近10個篇章講Dify的一些基礎應用,包括在講Dify之前我們講到了幾十個AI Agent的開發例子,我不知道大家發覺了沒有,在AI Agent開發過程中我們經常會伴隨著這樣的一些問題: 需要經常改貓娘;需要經常改調用LLM的參數,甚至在一個流程中有3個節點,每個節點…

ssti刷刷刷

[NewStarCTF 公開賽賽道]BabySSTI_One 測試發現過濾關鍵字&#xff0c;但是特殊符號中括號、雙引號、點都能用 可以考慮拼接或者編碼&#xff0c;這里使用拼接 ?name{{()["__cla"~"ss__"]}}?name{{()["__cla"~"ss__"]["__ba&…

google-Chrome常用插件

google-Chrome常用插件 1. json格式化展示插件 github下載jsonview-for-chrome插件 通過離線安裝方式 拓展程序-》管理拓展程序-》打開開發者模式-》加載已解壓的拓展程序-》選擇拓展程序解壓的位置 2. 翻譯插件 插件下載地址&#xff1a;Immersive Translate - Bilingual …

基于redis實現分布式鎖方案實戰

分布式鎖的進階實現與優化方案 作為Java高級開發工程師&#xff0c;我將為您提供更完善的Redis分布式鎖實現方案&#xff0c;包含更多生產級考量。 1. 生產級Redis分布式鎖實現 1.1 完整實現類&#xff08;支持可重入、自動續約&#xff09; import redis.clients.jedis.Je…

XML簡要介紹

實際上現在的Java Web項目中更多的是基于springboot開發的&#xff0c;所以很少再使用xml去配置項目。所以我們的目的就是盡可能快速的去了解如何讀懂和使用xml文件&#xff0c;對于DTD&#xff0c;XMLSchema這類約束的學習可以放松&#xff0c;主要是確保自己知道這里面的大致…

UI自動化測試中,一個完整的斷言應所需要考慮的問題

在UI自動化測試中,一個完整的斷言應全面覆蓋用戶界面(UI)的功能性、交互性和視覺正確性。以下是斷言需要包含的核心內容及詳細說明: 一、基礎元素驗證 存在性斷言 驗證元素存在于DOM中示例代碼(Python + Selenium):assert driver.find_element(By.ID, "submit_btn&…

[Java][Leetcode middle] 238. 除自身以外數組的乘積

第一個想法是&#xff1a; 想求出所有元素乘積&#xff0c;然后除以i對應的元素本書&#xff1b;這個想法是完全錯誤的&#xff1a; nums[I] 可能有0題目要求了不能用除法 第二個想法是&#xff1a; 其實寫之前就知道會超時&#xff0c;但是我什么都做不到啊&#xff01; 雙…

5.16本日總結

一、英語 背誦list30&#xff0c;復習list1 二、數學 學習14講部分內容&#xff0c;訂正30講13講題目 三、408 學習計網5.3知識點&#xff0c;完成5.1&#xff0c;5.2題目并訂正 四、總結 高數對于基本定義概念類題目掌握不好&#xff0c;做題時往往不會下手&#xff0c…

深度學習---常用優化器

優化器一&#xff1a;Adam&#xff08;Adaptive Moment Estimation&#xff09; 一、適用場景總結&#xff08;實踐導向&#xff09; 場景是否推薦用 Adam說明小模型訓練&#xff08;如 MLP、CNN&#xff09;???穩定、無需復雜調參&#xff0c;適合快速實驗初學者使用或結構…

SparkSQL 連接 MySQL 并添加新數據:實戰指南

SparkSQL 連接 MySQL 并添加新數據&#xff1a;實戰指南 在大數據處理中&#xff0c;SparkSQL 作為 Apache Spark 的重要組件&#xff0c;能夠方便地與外部數據源進行交互。MySQL 作為廣泛使用的關系型數據庫&#xff0c;與 SparkSQL 的結合可以充分發揮兩者的優勢。本文將詳細…

基于對抗性后訓練的快速文本到音頻生成:stable-audio-open-small 模型論文速讀

Fast Text-to-Audio Generation with Adversarial Post-Training 論文解析 一、引言與背景 文本到音頻系統的局限性&#xff1a;當前文本到音頻生成系統性能雖佳&#xff0c;但推理速度慢&#xff08;需數秒至數分鐘&#xff09;&#xff0c;限制了其在創意領域的應用。 研究…

AI畫圖Stable Diffusion web UI學習筆記(中)

本文記錄講解AI畫圖工具Stable Diffusion web UI的部分基本使用方法&#xff0c;以便進行學習。AI畫圖Stable Diffusion web UI學習筆記分為上、中、下三篇文章。 我在 AI畫圖Stable Diffusion web UI學習筆記&#xff08;上&#xff09;_webui-CSDN博客 這篇文章中介紹了Stabl…

安全與智能的雙向奔赴,安恒信息先行一步

人類文明發展的長河中&#xff0c;每一次技術變革都重新書寫了安全的定義。 從蒸汽機的轟鳴到電力的普及&#xff0c;從互聯網的誕生到人工智能的崛起&#xff0c;技術創新與變革從未停止對于安全的挑戰。今天&#xff0c;我們又站在一個關鍵的歷史節點&#xff1a;AI大模型的…

【Reality Capture 】02:Reality Capture1.5中文版軟件設置與介紹

文章目錄 一、如何設置中文二、如何設置界面分區三、如何切換二三維窗口四、工具欄有多個視圖選項卡RealityCapture是虛幻引擎旗下一款三維建模軟件,跟我們常用的三維建模軟件一樣,可以從圖像或激光掃描中創建實景三維模型和正射影像等產品。可用于建筑、測繪、游戲和視覺特效…

真題卷001——算法備賽

藍橋杯2024年C/CB組國賽卷 1.合法密碼 問題描述 小藍正在開發自己的OJ網站。他要求用戶的密碼必須符合一下條件&#xff1a; 長度大于等于8小于等于16必須包含至少一個數字字符和至少一個符號字符 請計算一下字符串&#xff0c;有多少個子串可以當作合法密碼。字符串為&am…

17.three官方示例+編輯器+AI快速學習webgl_buffergeometry_lines

本實例主要講解內容 這個Three.js示例展示了如何使用BufferGeometry創建大量線段&#xff0c;并通過**變形目標(Morph Targets)**實現動態變形效果。通過隨機生成的點云數據&#xff0c;結合頂點顏色和變形動畫&#xff0c;創建出一個視覺效果豐富的3D線條場景。 核心技術包括…

InfluxDB 2.7 連續查詢實戰指南:Task 替代方案詳解

InfluxDB 2.7 引入了 Task 功能&#xff0c;作為連續查詢&#xff08;CQ&#xff09;的現代替代方案。本文詳細介紹了如何使用 Task 實現傳統 CQ 的功能&#xff0c;包括語法解析、示例代碼、參數對比以及典型應用場景。通過實際案例和最佳實踐&#xff0c;幫助開發者高效遷移并…

Pytorch張量和損失函數

文章目錄 張量張量類型張量例子使用概率分布創建張量正態分布創建張量 (torch.normal)正態分布創建張量示例標準正態分布創建張量標準正態分布創建張量示例均勻分布創建張量均勻分布創建張量示例 激活函數常見激活函數 損失函數(Pytorch API)L1范數損失函數均方誤差損失函數交叉…

大模型在數據分析領域的研究綜述

大模型在業務指標拆解中的應用場景與方法研究 隨著人工智能技術的快速發展&#xff0c;大模型&#xff08;Large Language Models, LLMs&#xff09;在數據分析領域的應用日益廣泛。尤其是在業務指標拆解這一復雜任務中&#xff0c;大模型展現了其獨特的價值和潛力。通過對多維…

JAVA:ResponseBodyEmitter 實現異步流式推送的技術指南

1、簡述 在許多場景下,我們希望后端能夠以流式、實時的方式推送數據給前端,比如消息通知、日志實時展示、進度條更新等。Spring Boot 提供了 ResponseBodyEmitter 機制,可以讓我們在 Controller 中異步地推送數據,從而實現實時流式輸出。 樣例代碼:https://gitee.com/lh…