使用electron將vue3網頁項目包裝成pc客戶端

    • 一、準備前工作
      • 在項目的根目錄 打開命令行工具 安裝四個依賴庫
      • 安裝報錯的話
    • 二、準備工作完成之后,在項目根目錄需要有倆個文件
      • 在項目根目錄創建electron文件夾
      • 在vite.config.js中添加配置項
      • 在package.json中添加配置項
      • 運行命令 npm run electron:build 打包
      • 關于mac,win和nsis配置 完整說明
    • 打包成功后的輸出的文件目錄,及安裝界面展示

一、準備前工作

在項目的根目錄 打開命令行工具 安裝四個依賴庫

electron-builder: 是執行命令打包成客戶端所需要的工具
cross-env:該庫讓開發者只需要注重環境變量的設置,而無需擔心平臺設置
wait-on:等待資源,此處用來等待url可訪問

npm install --save-dev electron electron-builder cross-env wait-on

安裝報錯的話

如果安裝electron第三方庫失敗: 是因為:electron的安裝并不依賴本地npm中registry所配置的鏡像,需要增加名稱為electron_mirror的鏡像源
可按照一下方法執行:
1、cmd窗口執行:

 npm config edit

2、執行此命令之后會有彈出一個配置文件,只需將以下內容粘貼進配置文件保存即可

registry=https://registry.npmmirror.com
electron_mirror=https://cdn.npmmirror.com/binaries/electron/
electron_builder_binaries_mirror=https://npmmirror.com/mirrors/electron-builder-binaries/

如圖所示:
CSDN_img
3、粘貼保存之后,刪除項目的node_modules文件夾
4、關閉cmd窗口,重新打開一個cmd(重新啟動)
5、清除npm緩存

npm cache clean --force

6、重新安裝第三方庫

npm install --save-dev electron electron:build

二、準備工作完成之后,在項目根目錄需要有倆個文件

倆個文件分別是main.js(主進程)、preload.js(渲染進程)。

在項目根目錄創建electron文件夾

在項目根目錄創建electron文件夾,里面存放main.jspreload.js倆js文件
為什么需要將main.js和preload.js放在項目根目錄的某個文件夾下。因為在vue項目中也存在一個main.js文件避免搞混淆

// pc客戶端main.js(主進程)
const { app, BrowserWindow, Menu } = require("electron");
const path = require("path");
const NODE_ENV = process.env.NODE_ENV;function createWindow() {Menu.setApplicationMenu(null);// 創建瀏覽器窗口const mainWindow = new BrowserWindow({show: false,minWidth: 1440,minHeight: 900,webPreferences: {partition: String(+new Date()),preload: path.join(__dirname, "preload.js"),},});mainWindow.maximize();mainWindow.show();// 如果是開發環境就把當前運行的web端口做成客戶端預覽// 如果是生產環境就把打包后的index做成客戶端預覽mainWindow.loadURL(NODE_ENV === "development"? "http://localhost:8090": `file://${path.join(__dirname, "../dist/index.html")}`);
}// 這段程序將會在 Electron 結束初始化
// 和創建瀏覽器窗口的時候調用
// 部分 API 在 ready 事件觸發后才能使用。
app.whenReady().then(() => {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();
});
// pc客戶端preload.js(渲染進程)
window.addEventListener('DOMContentLoaded', () => {const replaceText = (selector, text) => {const element = document.getElementById(selector)if (element) element.innerText = text}for (const dependency of ['chrome', 'node', 'electron']) {replaceText(`${dependency}-version`, process.versions[dependency])}
})

在vite.config.js中添加配置項

publicPath: './', // 防止electron打包后 頁面空白
transpileDependencies: true, // 防止electron打包后 頁面空白

如圖所示:
CSDN_img2

在package.json中添加配置項

{"main": "electron/main.js", // 剛剛創建的main.js文件的路徑"scripts": {"electron": "wait-on tcp:8090 && cross-env NODE_ENV=development electron .","electron:build": "vite build --mode production && electron-builder"},// 以下是electron-builder的配置"build": {"appId": "com.test", // 應用程序的唯一標識符"productName": "electron打包測試", // 應用程序的名稱"copyright": "Copyright ? 2023", // 版權信息// macOS配置"mac": {"category": "public.app-category.utilities", // App Store 分類"icon": "public/icons/icon.icns" // macOS 應用圖標文件},"win": {}, // windows配置 可以添加windows特定配置// 安裝程序配置"nsis": {"oneClick": false, // 是否一鍵安裝(無安裝界面)"allowToChangeInstallationDirectory": true // 是否允許用戶選擇安裝目錄},// 包含文件"files": ["dist/**/*", // 包含dist目錄下的所有文件(Vite構建輸出)"electron/**/*" // 包含electron目錄下的所有文件(主進程渲染進程代碼)],// 目錄配置"directories": {"buildResources": "assets", // 構建資源目錄(圖標 證書等)"output": "dist_electron" // 構建輸出目錄}}
}

如圖所示:
CSDN_img3

運行命令 npm run electron:build 打包

為了使項目和electron正常運行,需要先運行項目,使得其開發服務器的url可以正常訪問,然后再開啟electron去加載url。
打包成功后,會在根目錄出現一個 dist_electron 文件夾,文件夾下會有一個 .exe 應用程序

關于mac,win和nsis配置 完整說明

"mac": {}
常用配置:
category: 應用分類"public.app-category.utilities" - 工具類"public.app-category.productivity" - 生產力工具"public.app-category.developer-tools" - 開發工具"public.app-category.graphics-design" - 圖形設計"public.app-category.photography" - 攝影"public.app-category.music" - 音樂"public.app-category.video" - 視頻"public.app-category.games" - 游戲"public.app-category.education" - 教育"public.app-category.business" - 商務"public.app-category.finance" - 財務"public.app-category.medical" - 醫療"public.app-category.news" - 新聞"public.app-category.social-networking" - 社交網絡"public.app-category.reference" - 參考工具"public.app-category.sports" - 體育"public.app-category.travel" - 旅行"public.app-category.weather" - 天氣
icon: 應用圖標文件(.icns 文件路徑)
target: 構建目標格式"dmg" - 磁盤鏡像文件(推薦)"zip" - 壓縮包格式"pkg" - 安裝包格式"mas" - Mac App Store 發布版"mas-dev" - Mac App Store 開發版"dir" - 目錄格式(用于測試)
identity: 代碼簽名身份null - 不進行代碼簽名"Developer ID Application: 你的名字 (TEAM_ID)" - 開發者證書"3rd Party Mac Developer Application: 第三方證書" - 第三方開發者證書完整的 macOS 配置示例:
"mac": {"category": "public.app-category.utilities","icon": "build/icon.icns","target": [{"target": "dmg","arch": ["x64", "arm64"]},{"target": "zip","arch": ["x64", "arm64"]}],"identity": null,"gatekeeperAssess": false,"hardenedRuntime": false,"artifactName": "${productName}-${version}-${arch}.${ext}","minimumSystemVersion": "10.14.0","darkModeSupport": true,"extendInfo": {"CFBundleURLTypes": [{"CFBundleURLName": "com.example.app","CFBundleURLSchemes": ["myapp"]}]}
}
"win": {} 
常用配置:
icon: windows應用圖標(.ico文件 路徑)
target: 構建目標格式'nsis' - 安裝程序(.exe)'portable' - 便攜版(無需安裝)'appx' - Windows Store應用包'zip' - 壓縮包格式'7z' - 7-Zip壓縮包'tar.xz' - Tar.XZ壓縮包
requestedExecutionLevel: 執行權限級別'asInvoker' - 以調用者權限運行(默認)'requireAdministrator' - 需要管理員權限'highestAvailable' - 使用最高可用權限
forceCodeSigning: 是否強制代碼簽名true - 強制代碼簽名,無證書則會失敗false - 不強制,允許未簽名的應用
signAndEditExecutable: 是否簽名可執行文件true - 對可執行文件進行數字簽名false - 不對可執行文件進行簽名完整的 Windows 配置示例:
"win": {"icon": "build/icon.ico","target": [{"target": "nsis","arch": ["x64"]},{"target": "portable","arch": ["x64"]}],"requestedExecutionLevel": "asInvoker","forceCodeSigning": false,"signAndEditExecutable": false,"artifactName": "${productName}-${version}-${arch}.${ext}","publisherName": "我的公司","verifyUpdateCodeSignature": false
}
"nsis": {} 
常用配置:
installerIcon: 安裝程序圖標(.ico文件 路徑)
uninstallerIcon: 卸載程序圖標(.ico文件 路徑)
createDesktopShortcut: 是否創建桌面快捷方式true - 為所有用戶創建false - 不創建'always' - 總是創建'perUser' - 僅為當前用戶創建
createStartMenuShortcut: 是否創建開始菜單快捷方式true - 為所有用戶創建false - 不創建'always' - 總是創建'perUser' - 僅為當前用戶創建完整的 NSIS 配置示例:
"nsis": {"oneClick": false,"allowToChangeInstallationDirectory": true,"installerIcon": "build/installer.ico","uninstallerIcon": "build/uninstaller.ico","createDesktopShortcut": true,"createStartMenuShortcut": true,"shortcutName": "我的應用",              // 快捷方式名稱"include": "build/installer.nsh",       // 自定義 NSIS 腳本"script": "build/installer.nsh",        // 自定義安裝腳本"artifactName": "${productName}-${version}-Setup.${ext}", // 安裝包文件名"deleteAppDataOnUninstall": false,      // 卸載時是否刪除應用數據"runAfterFinish": true,                 // 安裝完成后是否運行應用"menuCategory": false,                  // 是否在開始菜單中創建分類"allowElevation": true,                 // 是否允許提升權限"requestExecutionLevel": "asInvoker"    // 執行權限級別
}

打包成功后的輸出的文件目錄,及安裝界面展示

CSDN_img4

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

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

相關文章

基于安全抽象模型(SAM)的汽車網絡安全防御與攻擊分析

摘要自動駕駛汽車比以往任何一種個人出行交通工具都具有更大的受攻擊可能性。這主要是因為這類汽車對通信有極高的需求,一方面是出于功能和安全方面的考慮,另一方面則是為了滿足舒適性需求。無人駕駛汽車需要與周圍環境進行通信的接口、直接連接&#xf…

線掃相機不出圖原因總結

1、幀觸發信號有問題 線掃相機出圖由幀信號決定開始采集,如果沒有幀信號線掃相機無法識別開始信號,所以不出圖 1)沒有給相機幀信號 幀信號是一個短暫的脈沖信號,持續時間不要太長,相機能識別就可以,一般由plc或者控制卡的數字量輸出口觸發,可以通過監測數字量輸出口來確…

開發避坑指南(46):Java Stream 對List的BigDecimal字段進行求和

需求 對int,long類型的數據求和直接用stream().mapToInt()、stream().mapToDouble(),可是沒有stream().mapToBigDecimal()這樣的方法,那么如何用stream對List的BigDecimal字段進行求和? 代碼實現 直接上代碼 public class OrderIn…

pycharm如何處理python項目間引用

1. 如何在pycharm中將其它項目添加到打開的項目中 如圖所示:文件->打開->附加(Attach)即可2.如何引用:直接作為一個普通package引用即可 from attack_projectxxx.modulexxx import xxx3.pyinstaller如何編譯這種引用其它項目的可執行文…

家庭勞務機器人發展階段與時間預測

家庭勞務機器人大規模進入家庭不會是一個單一的時間點,而是一個分階段、漸進式的過程。我們可以將這個進程分為以下幾個階段,并對每個階段的時間線進行預測:第一階段:單一功能機器人普及(現在 - 2025年)這個…

Zynq開發實踐(FPGA之spi實現)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing 163.com】雖然串口用的地方比較多,實現起來也比較簡單。但是串口本身速度比較慢,不利于高速數據通信。而且單個串口沒有辦法和很多芯片…

指甲打磨機/磨甲器MCU控制方案開發,輕松解決磨甲問題

美甲打磨機/指甲打磨機核心功能需求 1. 基礎功能 無級調速(5,000-30,000 RPM,PWM控制) 正反轉切換(可選,用于拋光/去角質) 按鍵鎖/防誤觸(長按3秒解鎖) 鋰電池管理(3.7V單節,帶充電指…

臨床數據挖掘與分析:利用GPU加速Pandas和Scikit-learn處理大規模數據集

點擊 “AladdinEdu,同學們用得起的【H卡】算力平臺”,注冊即送-H卡級別算力,80G大顯存,按量計費,靈活彈性,頂級配置,學生更享專屬優惠。 摘要 隨著電子健康記錄(EHR)的普…

二進制安裝MySQL 8.0指南:跨平臺、自定義數據路徑、安全遠程訪問配置

二進制安裝 MySQL 8.0 在生產或測試環境中,我們常常希望避免包管理器帶來的依賴和交互問題,尤其是當系統自帶版本過舊或安裝過程頻繁彈窗時。此時,使用 MySQL 官方提供的二進制壓縮包(Generic Linux Binary) 進行安裝…

Z檢驗與T檢驗的區別與聯系:原理、公式和案例全解

Z檢驗與T檢驗全解析:原理、區別與實際案例 統計學的核心任務之一,就是通過有限的樣本數據去推斷總體特征。在這一過程中,假設檢驗成為了最常見的工具。而在眾多檢驗方法中,Z檢驗與T檢驗幾乎是入門必學,也是應用最廣泛的…

SpringBoot之緩存(最詳細)

文章目錄項目準備新建項目并選擇模塊安裝添加依賴添加application.yml刪除demos.web包編寫pojo層userdto/ResultJson編寫mapper層UserMapper編寫service層UserService編寫controller層編寫配置類MybatisPlusConfig編寫測試類1 緩存分類1.1 MyBatis一級緩存1.2 MyBatis二級緩存1…

B站 韓順平 筆記 (Day 29)

目錄 1(集合的框架體系) 2(Collection接口和常用方法) 2.1(Collection接口實現類特點) 2.2(常用方法) 2.3(遍歷元素方式1:迭代器) 1&#x…

axios報錯解決:unsupported BodyInit type

目錄 問題 原因 解決方法 問題 Got ‘unsupported BodyInit type’ bug on iPhone 14(IOS 17.5) Issue #6444 axios/axios 我這里是iPhone 6plus打開會報錯白屏 好多人遇到了相同的問題 當我在 iPhone 14 上瀏覽頁面時,我收到一條錯誤消息:錯誤:不支持的 BodyInit 類型,…

iperf3網絡性能測試工具

iperf3 是一個功能非常強大的網絡性能測試工具,用于測量兩個網絡節點之間的最大TCP、UDP帶寬和性能。它通過創建數據流并測量其吞吐量來工作。 下面我將為您詳細介紹其核心用法、常用命令和參數。 核心概念:客戶端/服務器模式 iperf3 測試需要兩臺機器:一臺作為服務器端(…

【C#】 資源共享和實例管理:靜態類,Lazy<T>單例模式,IOC容器Singleton我們該如何選

文章目錄前言一、靜態類1.1 靜態類的特點1.2 靜態類的使用1.3 靜態類的缺點二、單例模式2.1 Lazy延遲初始化2.2 Lazy< T>單例模式的使用2.3 單例模式的特點三、IOC的Singleton總結前言 編寫程序的時候&#xff0c;常常能碰到當某些數據或方法需要被整個程序共享&#xf…

MySQL——存儲引擎、索引

一、存儲引擎1.MySQL體系結構2.存儲引擎簡介存儲引擎就是儲存數據、建立索引、更新/查詢數據等技術的實現方式。儲存引擎是基于表的&#xff0c;而不是基于庫的&#xff0c;所以存儲引擎也可被稱為表類型建表語句&#xff1a;查詢數據庫支持的儲存引擎&#xff1a;show engines…

機器學習01——機器學習概述

上一章&#xff1a;機器學習核心知識點目錄 下一章&#xff1a;機器學習02——模型評估與選擇 機器學習實戰項目&#xff1a;【從 0 到 1 落地】機器學習實操項目目錄&#xff1a;覆蓋入門到進階&#xff0c;大學生就業 / 競賽必備 文章目錄一、參考書推薦二、機器學習的基本概…

Shell編程:檢測主機ip所在網段內其他在線ip

一、邏輯設計獲取本機 ip 及 網段循環檢測網段內所有 ip判斷 ping 結果&#xff0c;符合條件的輸出相關信息二、代碼展示#!/bin/bash#獲取本機ip local_iphostname -I #local_ipip addr| grep "inet "|grep -v 127.0.0.1| awk {print $2}#獲取本機網段 networkecho $…

Windows安裝Chroma DB

安裝步驟 安裝python 3.8或以上的版本創建虛擬環境&#xff1a;python -m venv chroma_env激活虛擬環境&#xff1a;.\chroma_env\Scripts\activate安裝Chroma DB&#xff1a;pip install chromadb(可選)安裝擴展功能&#xff1a;pip install sentence-transformers pypdf tikt…

李彥宏親自說

昨天&#xff0c;李彥宏親自說&#xff1a;百度的數字人直播以假亂真&#xff0c;很多人是看不出這是數字人&#xff0c;而且轉化率很高”這幾個月百度一直在推“數字人”不再強調“大模型”了。數字人是AI落地最適合企業的一款產品&#xff0c;一般用于客服、面試、直播帶貨等…