【前端記事】關于electron的入門使用

electron入門使用

  • 背景
  • how to start
    • 第一步 創建一個vite-vue3項目
    • 第二步 裝各種依賴
    • 第三步 配置
      • vite.config.js
      • package.json
      • electron入口
    • 啟動
    • 重寫關閉、隱藏、最大化最小化

背景

最近對electron比較感興趣,折騰一段時間后有了點眉目,記錄一下

how to start

第一步 創建一個vite-vue3項目

# 選vue3但是不要用ts,用js會舒服得多
npm create vite -n test-electron

第二步 裝各種依賴

# 命令1
npm i electron -d -s
# 命令2
npm install vite-plugin-optimizer --save-dev
# 命令3
npm install vite-plugin-node-polyfills --save-dev
# 命令4
npm install @electron/remote
# 命令5
npm install element-plus --save
# 命令6
npm i vue-router

注意,命令1可能需要反復執行反復失敗才會成功,推測是網的原因,而且我自己測試用yarn和pnpm必報錯,只有npm才行

第三步 配置

vite.config.js

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { nodePolyfills } from 'vite-plugin-node-polyfills'
import optimizer from 'vite-plugin-optimizer'// https://vite.dev/config/
export default defineConfig({plugins: [vue(), // 添加 Node.js 內置模塊的 polyfillnodePolyfills({include: ['path'],globals: { Buffer: true, global: true, process: true },protocolImports: true,}),optimizer({electron: `const { ipcRenderer } = require('electron'); export { ipcRenderer };`})],build: {rollupOptions: {output: {manualChunks: {// 將第三方庫分割到單獨的代碼塊'vendor': ['element-plus'],}}}},server: {port: 8888,cors: true, // 允許跨域hmr: true, // 開啟熱更新},"base": "./"
})

package.json

{"name": "ele-pro","private": true,"version": "0.0.0","type": "module","main": "electron/main.cjs","scripts": {"dev": "vite","build": "vite build","preview": "vite preview","electron:serve": "vite build && electron ."},"dependencies": {"@electron/remote": "^2.1.2","electron-reload": "^2.0.0-alpha.1","element-plus": "^2.9.7","vue": "^3.5.13","vue-router": "^4.5.0"},"devDependencies": {"@vitejs/plugin-vue": "^5.2.1","electron": "^35.1.3","vite": "^6.2.0","vite-plugin-node-polyfills": "^0.23.0","vite-plugin-optimizer": "^1.4.3"}
}

一定要重點關注入口:“main”: “electron/main.cjs”,和electron啟動命令:“electron:serve”: “vite build && electron .”

electron入口

在項目的根目錄下新建文件夾/electron。
在文件夾中新建文件main.cjs
注意,一定要是.cjs,不是.js

// 控制應用生命周期和創建原生瀏覽器窗口的模組
const { app, BrowserWindow, Menu } = require('electron')
const path = require('path')
require('@electron/remote/main').initialize()function createWindow() {// 創建瀏覽器窗口const mainWindow = new BrowserWindow({width: 1200,height: 800,frame: false, // 隱藏默認的標題欄webPreferences: {// 書寫渲染進程中的配置nodeIntegration: true, //開啟true這一步很重要,目的是為了vue文件中可以引入node和electron相關的APIcontextIsolation: false, // 可以使用require方法},})require('@electron/remote/main').enable(mainWindow.webContents)let env = 'pro'// 配置熱更新if (env == 'pro') {const elePath = path.join(__dirname, '../node_modules/electron')require('electron-reload')('../', {electron: require(elePath),})// 熱更新監聽窗口mainWindow.loadURL('http://localhost:8888')// 打開開發工具mainWindow.webContents.openDevTools()} else {// 生產環境中要加載文件,打包的版本// Menu.setApplicationMenu(null)// 加載 index.htmlmainWindow.loadFile(path.resolve(__dirname, '../dist/index.html')) // 新增}
}
// 這段程序將會在 Electron 結束初始化
// 和創建瀏覽器窗口的時候調用
// 部分 API 在 ready 事件觸發后才能使用。
app.whenReady().then(() => {// 關閉默認菜單欄Menu.setApplicationMenu(null)createWindow()app.on('activate', function () {// 通常在 macOS 上,當點擊 dock 中的應用程序圖標時,如果沒有其他// 打開的窗口,那么程序會重新創建一個窗口。if (BrowserWindow.getAllWindows().length === 0) createWindow()})
})// 除了 macOS 外,當所有窗口都被關閉的時候退出程序。 因此,通常對程序和它們在
// 任務欄上的圖標來說,應當保持活躍狀態,直到用戶使用 Cmd + Q 退出。
app.on('window-all-closed', function () {if (process.platform !== 'darwin') app.quit()
})

啟動

打開兩個終端窗口,需要都在該項目的根目錄。
先運行npm run dev
再運行npm run electron:serve
這樣,electron就能根據vue的內容實時渲染

重寫關閉、隱藏、最大化最小化

在vue的根組件App.vue中:

<script setup>
import {Close,FullScreen,ArrowDown
} from '@element-plus/icons-vue'
import { getCurrentWindow } from '@electron/remote'
// 關閉
const closeApp = () => {const currentWindow = getCurrentWindow()currentWindow.close()
}
// 全屏/退出全屏應用
const fullScreenApp = () => {const currentWindow = getCurrentWindow()if (currentWindow.isFullScreen()) {currentWindow.setFullScreen(false)} else {currentWindow.setFullScreen(true)}
}// 最小化應用
const hideApp = () => {const currentWindow = getCurrentWindow()currentWindow.minimize()
}
</script><template><div><div style="padding: 10pt; text-align: right;"><el-button type="warning" size="small" circle :icon="ArrowDown" @click="hideApp"></el-button><el-button type="success" size="small" :icon="FullScreen" circle @click="fullScreenApp" /><el-button type="danger" size="small" :icon="Close" circle @click="closeApp" /></div><router-view></router-view></div>
</template><style scoped>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;color: #2c3e50;
}
</style>

先到這里,后面有什么好玩的繼續更新

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

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

相關文章

跨瀏覽器音頻錄制:實現兼容的音頻捕獲與WAV格式生成

在現代Web開發中&#xff0c;音頻錄制功能越來越受到開發者的關注。無論是在線會議、語音識別還是簡單的語音留言&#xff0c;音頻錄制都是一個重要的功能。然而&#xff0c;實現一個跨瀏覽器的音頻錄制功能并非易事&#xff0c;因為不同瀏覽器對音頻錄制API的支持存在差異。本…

Semantic Kernel也能充當MCP Client

背景 筆者之前&#xff0c;分別寫過兩篇關于Semantic Kernel&#xff08;下簡稱SK&#xff09;相關的博客&#xff0c;最近模型上下文協議&#xff08;下稱MCP&#xff09;大火&#xff0c;實際上了解過SK的小伙伴&#xff0c;一看到 MCP的一些具體呈現&#xff0c;會發現&…

識別圖片內容OCR并重命名文件

在工作場景中&#xff0c;經常出現通過拍攝設備獲取圖片后&#xff0c;未及時進行有效命名的情況。這些圖片中往往包含關鍵信息&#xff08;如合同編號、產品型號、日期等&#xff09;&#xff0c;需要人工識別并命名&#xff0c;存在以下痛點&#xff1a; 效率低下&#xff1…

【防火墻 pfsense】3 portal

&#xff08;1&#xff09;應該考慮的問題&#xff1a; ->HTTPS 連接的干擾問題&#xff1a;HTTPS 是一種旨在防止惡意第三方截取和篡改流量的協議。但強制門戶的工作原理是截取并改變終端用戶與網絡之間的連接。這對于 HTTP 流量來說不是問題&#xff0c;但使用 HTTPS 加密…

銀發科技:AI健康小屋如何破解老齡化困局

隨著全球人口老齡化程度的不斷加深&#xff0c;如何保障老年人的健康、提升他們的生活質量&#xff0c;成為了社會各界關注的焦點。 在這場應對老齡化挑戰的戰役中&#xff0c;智紳科技順勢而生&#xff0c;七彩喜智慧養老系統構筑居家養老安全網。 而AI健康小屋作為一項創新…

TCP協議理解

文章目錄 TCP協議理解理論基礎TCP首部結構圖示字段逐項解析 TCP是面向連接&#xff08;Connection-Oriented&#xff09;面向連接的核心表現TCP 面向連接的核心特性TCP 與UDP對比 TCP是一個可靠的(reliable)序號與確認機制&#xff08;Sequencing & Acknowledgment&#xf…

什么是機器視覺3D碰撞檢測?機器視覺3D碰撞檢測是機器視覺3D智能系統中安全運行的核心技術之一

機器視覺3D碰撞檢測是一種結合計算機視覺和三維空間分析的技術,旨在檢測三維場景中物體之間是否發生碰撞(即物理接觸或交疊)。它通過分析物體的形狀、位置、運動軌跡等信息,預測或實時判斷物體間的碰撞可能性。以下是其核心要點: 基本原理 三維感知:利用深度相機(如RGB-…

nacos設置權重進行負載均衡不生效

nacos設置權重進行負載均衡不生效&#xff0c;必須在啟動類下加上這個bean Beanpublic IRule nacosRule(){return new NacosRule();}如下圖所示

創建 Node.js Playwright 項目:從零開始搭建自動化測試環境

一、環境準備 在開始創建 Playwright 項目之前&#xff0c;確保你的電腦上已經安裝了以下工具&#xff1a; Node.js&#xff1a;Playwright 依賴于 Node.js 環境&#xff0c;確保你已經安裝了最新版本的 Node.js。可以通過以下命令檢查是否安裝成功&#xff1a; node -v npm -…

日語學習-日語知識點小記-構建基礎-JLPT-N4階段(11): てあります。

日語學習-日語知識點小記-構建基礎-JLPT-N4階段&#xff08;11&#xff09;&#xff1a; てあります。 1、前言&#xff08;1&#xff09;情況說明&#xff08;2&#xff09;工程師的信仰 2、知識點&#xff08;1&#xff09;てあります。&#xff08;&#xff12;&#xff09;…

【金倉數據庫征文】- 深耕國產數據庫優化,筑牢用戶體驗新高度

目錄 引言 一、性能優化&#xff1a;突破數據處理極限&#xff0c;提升運行效率 1.1 智能查詢優化器&#xff1a;精準優化數據檢索路徑 1.2 并行處理技術&#xff1a;充分釋放多核計算潛力 1.3 智能緩存機制&#xff1a;加速數據訪問速度 二、穩定性提升&#xff1a;筑牢…

Java代理講解

代理 代理模式是一種結構型設計模式&#xff0c;它允許我們通過添加一個代理對象來控制對另一個對象的訪問。代理對象和實際對象具有相同的接口&#xff0c;使得客戶端在不知情的情況下可以使用代理對象進行操作。代理對象在與客戶端進行交互時&#xff0c;可以控制對實際對象…

利用deepseek快速生成甘特圖

一、什么是甘特圖 甘特圖&#xff08;Gantt Chart&#xff09;是一種直觀的項目管理工具&#xff0c;廣泛應用于多個領域&#xff0c;主要用于??時間規劃、任務分配和進度跟蹤??。 直觀性??&#xff1a;時間軸清晰展示任務重疊或延遲。 ??靈活性??&#xff1a;支持…

從零開始學習SLAM|技術路線

概念 視覺SLAM&#xff08;Simultaneous Localization and Mapping&#xff09;系統中&#xff0c;整個過程通常分為 前端 和 后端 兩個主要部分。前端處理的是從傳感器數據&#xff08;如相機圖像、激光雷達等&#xff09;中提取和處理信息&#xff0c;用于實時定位和建圖&am…

LeetCode 解題思路 44(Hot 100)

解題思路&#xff1a; dp 數組的含義&#xff1a; 以 nums[i] 為結尾的最長遞增子序列的長度。遞推公式&#xff1a; dp[i] Math.max(dp[i], dp[j] 1)。dp 數組初始化&#xff1a; dp[i] 1。遍歷順序&#xff1a; 從小到大去遍歷&#xff0c;從 i 1 開始&#xff0c;直到 …

精益數據分析(22/126):解鎖創業增長密碼與長漏斗分析

精益數據分析&#xff08;22/126&#xff09;&#xff1a;解鎖創業增長密碼與長漏斗分析 在創業與數據分析的探索旅程中&#xff0c;我們都在不斷尋求新的知識和方法&#xff0c;以提升創業的成功率。我一直期望能和大家共同學習、共同進步&#xff0c;今天就讓我們繼續深入研…

大模型應用開發之LLM入門

一、大模型概述 1、大模型概念 LLM是指用有大量參數的大型預訓練語言模型&#xff0c;在解決各種自然語言處理任務方面表現出強大的能力&#xff0c;甚至可以展現出一些小規模語言模型所不具備的特殊能力 2、語言模型language model 語言建模旨在對詞序列的生成概率進行建模…

Vue 計算屬性 VS 偵聽器:從原理到性能的深度對比

在 Vue 開發中&#xff0c;computed&#xff08;計算屬性&#xff09;和watch&#xff08;偵聽器&#xff09;是響應式系統的兩大核心工具。 它們看似都能處理數據變化&#xff0c;實則設計理念和應用場景大相徑庭。 一、核心區別&#xff1a;數據驅動的兩種范式 1. 觸發機制…

特斯拉宣布啟動自動駕駛網約車測試,無人出租車服務進入最后準備階段

特斯拉公司于4月24日正式宣布&#xff0c;已在美國得克薩斯州奧斯汀和加利福尼亞州舊金山灣區啟動自動駕駛網約車服務的員工內部測試。這項測試將為今年夏季計劃推出的完全無人駕駛出租車服務進行最后的驗證和準備。 此次測試使用約200輛經過特殊改裝的Model 3車型&#xff0c;…

基于springboot的在線教育系統

一、系統架構 前端&#xff1a;vue | element-ui | html | jquery | css | ajax 后端&#xff1a;springboot | mybatis 環境&#xff1a;jdk1.8 | mysql | maven | nodejs | idea 二、代碼及數據 三、功能介紹 01. web端-首頁1 02. web端-首頁2 03. w…