最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3集成electron的過程

 更新時(shí)間:2024年10月18日 10:49:58   作者:zjun1001  
本文詳細(xì)介紹了如何在Vue3項(xiàng)目中集成Electron,包括安裝electron和electron-builder兩個(gè)依賴,以及配置.npmrc文件和手動修改鏡像源的方法,整個(gè)過程詳細(xì)記錄了從創(chuàng)建項(xiàng)目、安裝依賴、修改配置、到最終打包部署的每一步

安裝說明

vue集成electron時(shí),會用到兩個(gè)依賴。分別是electron和electron-builder,前者是開發(fā)環(huán)境下使用,后者是打包部署時(shí)使用。安裝時(shí),可在線安裝也可離線安裝。所謂離線安裝就是自己下載好用到的包,然后放到指定目錄下。其實(shí)在線安裝時(shí)候,也是這個(gè)過程,只是它自己去下載包。

本次集成過程,沒有開VPN,訪問github,基本不通。所以最終安裝時(shí)候,采用了在線+離線方式安裝,因?yàn)橛行┌枰獜膅ithub上下載。整個(gè)安裝過程如下。

創(chuàng)建一個(gè)vue3項(xiàng)目

創(chuàng)建過程參考vue3官網(wǎng)。執(zhí)行npm run dev運(yùn)行項(xiàng)目,瀏覽器頁面展示如下:

安裝electron作為開發(fā)依賴

用上面創(chuàng)建的vue3項(xiàng)目做測試,開始集成electron。執(zhí)行如下命令開始安裝。

npm install electron --save-dev

通常這一步安裝會報(bào)如下錯(cuò)誤。

這是因?yàn)殓R像地址問題,有些沒有配置,有些無法訪問。所以我們直接手動修改鏡像地址,改為國內(nèi)鏡像源。

說明一下,npm的配置文件是.npmrc,相當(dāng)于Maven中的配置文件settings.xml。都是用來管理依賴包的鏡像源。文件路徑一般在用戶目錄下,如C:\Users\ZHANGJUN\.npmrc。

我們也可以用命令查找下

npm config get userconfig

現(xiàn)在我們執(zhí)行如下命令,修改配置文件,將electron鏡像源添加進(jìn)去。我這里用的華為鏡像源,用其他的都行。只要能正常訪問即可。

npm config set ELECTRON_MIRROR https://repo.huaweicloud.com/electron/

如果因?yàn)闄?quán)限問題或其他問題,導(dǎo)致上面命令報(bào)錯(cuò),添加失敗。我們也可以直接打開配置文件,手動修改。

可以直接到文件目錄下,打開文件,如C:\Users\ZHANGJUN\.npmrc。也可以通過命令打開。執(zhí)行如下命令后,會彈出npmrc頁面,然后將上面地址添加進(jìn)去。

npm config edit

修改完后,再次執(zhí)行npm install electron --save-dev。又出現(xiàn)如下錯(cuò)誤,后面排查是版本問題。所以安裝命令帶上版本號。

npm install electron@29.1.1 --save-dev

可以看到,在帶上版本后,安裝成功。我們也可以在package.json和node_modules中看到添加的electron內(nèi)容。

添加electron配置文件

在項(xiàng)目跟目錄下創(chuàng)建electron目錄,然后新增main.js、preload.js等

main.js代碼

const { app, BrowserWindow, Menu, session, globalShortcut } = require('electron')
const { join } = require('path')
const path = require('path')
//const preloadPath = app.isPackaged ? "../../preload.js" : "../preload.js";
const preloadPath = './preload.js'
const renderProcessApi = path.resolve(__dirname, preloadPath)
// process.env.DIST = join(process.env.DIST_ELECTRON, "../dist");
// const indexHtml = join(process.env.DIST, "index.html");
process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = true
const createWindow = async () => {
  Menu.setApplicationMenu(null)
  const win = new BrowserWindow({
    // width: 1024,
    // height: 768,
    width: 1040,
    height: 807,
    fullscreen: true, //全屏
    title: 'electron測試項(xiàng)目',
    // frame: false, //直接去除導(dǎo)航頭部
    show: true,
    webPreferences: {
      webSecurity: false,
      nodeIntegration: true,
      enableRemoteModule: true,
      contextIsolation: false,
      preload: renderProcessApi
    }
  })
  // win.loadFile(join(__dirname, "../dist/index.html"));
  const env = app.isPackaged ? 'production' : 'development'
  console.log('env ' + env)
  console.log('process.env.NODE_ENV ' + process.env.VITE_APP_ENV)
  const indexHtml = {
    development: 'http://localhost:5173', // 開發(fā)環(huán)境
    // development: join(__dirname, "../dist/index.html"), // 開發(fā)環(huán)境
    production: join(__dirname, '../dist/index.html') // 生產(chǎn)環(huán)境
  }
  if (app.isPackaged) {
    win.loadFile(indexHtml[env])
  } else {
    win.loadURL(indexHtml[env])
  }
  globalShortcut.register('Ctrl + Shift + i', function () {
    win.webContents.openDevTools()
  })
  globalShortcut.register('f11', function () {
    if (win.isFullScreen()) {
      win.setFullScreen(false)
    } else {
      win.setFullScreen(true)
    }
  })
}
app.whenReady().then(async () => {
  // if (!app.isPackaged) {
  //   await session.defaultSession.loadExtension(
  //     join(__dirname, "../plugins/vuetools6.6.1_0")
  //   );
  // }
  createWindow()
  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') app.quit()
})

preload.js代碼

// 所有的 Node.js API接口 都可以在 preload 進(jìn)程中被調(diào)用.
// 它擁有與Chrome擴(kuò)展一樣的沙盒。
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])
  }
})

這里簡單解釋下main.js和preload.js。

main.js

  • 任何 Electron 應(yīng)用程序的入口都是 main 文件。 這個(gè)文件控制了主進(jìn)程,它運(yùn)行在一個(gè)完整的Node.js環(huán)境中,負(fù)責(zé)控制應(yīng)用的生命周期。
  • 在此腳本中,使用 Electron 的 app 和 BrowserWindow 模塊來創(chuàng)建一個(gè)瀏覽器窗口,在一個(gè)單獨(dú)的進(jìn)程(渲染器)中顯示網(wǎng)頁內(nèi)容。

preload.js

  • 預(yù)加載腳本,在electron網(wǎng)頁頁面加載前執(zhí)行,可以做一些初始化工作。
  • 暴露 Node.js 功能給渲染進(jìn)程。通過在 preload.js 中使用 exposeInMainWorld 方法,開發(fā)者可以將 Node.js 的模塊或 Electron 的功能安全地暴露給渲染進(jìn)程的頁面。這樣,渲染進(jìn)程就可以像使用前端庫一樣使用這些功能,而不需要直接操作 Electron 的遠(yuǎn)程對象。
  • 提供安全的上下文環(huán)境:preload.js 運(yùn)行在一個(gè)特殊的上下文中,它與頁面的普通 JavaScript 環(huán)境是隔離的。這樣可以防止頁面腳本直接訪問 Node.js 的某些敏感功能,增強(qiáng)了應(yīng)用的安全性。
  • 模塊化管理:preload.js 可以作為模塊化管理的入口,將一些通用的邏輯或工具函數(shù)預(yù)先加載到渲染進(jìn)程中,以便在不同的頁面或組件中復(fù)用。

main.js主要用來創(chuàng)建一個(gè)window窗口,調(diào)用api設(shè)置窗口大小、樣式等。并設(shè)置開發(fā)環(huán)境和生產(chǎn)環(huán)境下訪問地址。

而preload.js主要用來進(jìn)行一些初始化工作,比如讀取配置文件,全局初始化等。

添加完上面兩個(gè)js后,還有一個(gè)配置要修改。那就是package.json。將type改為commonjs,main改為electron/main.js。然后在scripts中新增一條語句:"start": "vite | electron ."

到此配置工作結(jié)束,運(yùn)行項(xiàng)目,看能否正常顯示。執(zhí)行

npm run start

頁面以window窗口形式運(yùn)行,里面頁面展示和瀏覽器展示效果一樣。至此,vue3開發(fā)環(huán)境集成electron就基本結(jié)束了。

electron打包構(gòu)建

項(xiàng)目最終還是要打包部署,這里使用electron-builder。執(zhí)行命令安裝

npm install electron-builder -D
 或 
npm install electron-builder@24.13.3 -D

修改package.json,添加打包信息。

在scripts標(biāo)簽中新增命令:"electron:build": "vite build && electron-builder"。后續(xù)執(zhí)行npm run electron:build 即可完成打包。

新增build字段,添加如下內(nèi)容:

"build": {
    "productName": "electronDemo",
    "appId": "electronDemo",
    "asar": true,
    "directories": {
      "output": "dist-electron/${version}"
    },
    "files": [
      "dist",
      "electron"
    ],
    "nsis": {
      "oneClick": false,
      "allowToChangeInstallationDirectory": true,
      "installerIcon": "./electron/icon.ico",
      "uninstallerIcon": "./electron/icon.ico",
      "installerHeaderIcon": "./electron/icon.ico",
      "createDesktopShortcut": true,
      "createStartMenuShortcut": true,
      "shortcutName": "electron系統(tǒng)"
    },
    "mac": {
      "category": "your.app.category.type"
    },
    "win": {
      "icon": "./electron/icon.ico",
      "target": [
        {
          "target": "nsis",
          "arch": [
            "ia32"
          ]
        }
      ]
    },
    "linux": {}
  }

其中:

  • productName:項(xiàng)目名,也是生成的安裝文件名
  • appId:軟件的ID,用來上架各平臺
  • nsis:軟件安裝包的交互行為,配置稍多
  • win.icon: 應(yīng)用圖標(biāo)
  • win.target.arch:建議設(shè)置ia32,適配windows大部分版本
  • "asar": false, 打包時(shí)不進(jìn)行加密

修改完后,執(zhí)行命令。開始打包

npm run electron:build

構(gòu)建過程中,會從github上下載三個(gè)包,分別是winCodeSign-2.6.0.7z、nsis-3.0.4.1.7z、nsis-resources-3.4.1.7z。前文已經(jīng)說過,github基本訪問不通,所以我這里下載肯定失敗。報(bào)錯(cuò)如下:

前文也說過,npm在線下載過程也是從遠(yuǎn)程服務(wù)器上把安裝包下載到本地。所以這里我就手動把這三個(gè)包都下載下來。然后放到對應(yīng)的electron緩存目錄下。至于electron緩存目錄及執(zhí)行過程詳細(xì)情況,大家仔細(xì)百度(基本就是首次將包下載到緩存中,以后直接從緩存中獲?。?。

electron緩存目錄路徑為:C:\Users\zjun\AppData\Local

可以看到有兩個(gè),electron開發(fā)環(huán)境時(shí)用到,也就是在我們執(zhí)行npm install electron@29.1.1 --save-dev時(shí),它會把包下載到electron/Cache下。同理,如果這個(gè)命令也下載不了,我們也可以先把包下載下來,然后放到這個(gè)緩存目錄下。包名就是electron-v29.1.1-win32-ia32.zip。

這是electron/Cache下內(nèi)容

這是electron-builder/Cache下內(nèi)容。只需將三個(gè)安裝包放到對應(yīng)目錄下,然后解壓即可。

三個(gè)包都添加完后,再次執(zhí)行打包命令:npm run electron:build。不出意外下,打包成功,如下圖:

target顯示的就是打包后的名稱及路徑。到這個(gè)目錄下,雙擊exe安裝。

安裝成功后,桌面會有exe的快捷方式。運(yùn)行看是否正常。

至此。electron的集成和打包基本結(jié)束。

至于某些博主提到的熱更新:npm install nodemon -D和命令行合并工具:npm install npm-run-all -D。我發(fā)現(xiàn)項(xiàng)目已經(jīng)有了這些功能,所以就不再安裝。需要測試的話,可自行安裝測試。

參考文檔:

https://blog.csdn.net/weixin_45687201/article/details/136424017

使用electron創(chuàng)建桌面應(yīng)用及常見打包錯(cuò)誤解決_wincodesign-2.6.0.7z-CSDN博客

vite+vue3+electron項(xiàng)目搭建教程_electron vue3 vite配置-CSDN博客

https://blog.csdn.net/qq_39124701/article/details/128299948

簡介 | Electron

全網(wǎng)詳解 .npmrc 配置文件:比如.npmrc的優(yōu)先級、命令行,如何配置.npmrc以及npm常用命令等-CSDN博客

到此這篇關(guān)于vue3集成electron的文章就介紹到這了,更多相關(guān)vue3集成electron內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue中ref()和reactive()區(qū)別小結(jié)

    vue中ref()和reactive()區(qū)別小結(jié)

    本文主要介紹了vue中ref()和reactive()區(qū)別小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • Vue使用van-search和監(jiān)聽@Watch實(shí)現(xiàn)搜索方式

    Vue使用van-search和監(jiān)聽@Watch實(shí)現(xiàn)搜索方式

    文章介紹了Vant UI的van-search組件在不同設(shè)備的搜索觸發(fā)方式:PC端按回車鍵,移動端點(diǎn)擊輸入法搜索按鈕;并提到使用@Watch監(jiān)聽輸入框數(shù)據(jù)變化,尤其關(guān)注取消或刪除操作后的狀態(tài)更新
    2025-09-09
  • vue.js根據(jù)圖片url進(jìn)行圖片下載

    vue.js根據(jù)圖片url進(jìn)行圖片下載

    最近在做一個(gè)前端vue.js對接的功能模塊時(shí),需要實(shí)現(xiàn)一個(gè)下載圖片的功能,本文就介紹了vue.js根據(jù)圖片url進(jìn)行圖片下載,感興趣的可以了解一下
    2021-06-06
  • Vue3中使用監(jiān)聽器的具體實(shí)踐

    Vue3中使用監(jiān)聽器的具體實(shí)踐

    監(jiān)聽器是Vue3中非常好用的一個(gè)特性,用于監(jiān)聽某個(gè)響應(yīng)式變量的變化,本文就來介紹一下Vue3中使用監(jiān)聽器的具體實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Vue之綁定class樣式與style樣式方式

    Vue之綁定class樣式與style樣式方式

    這篇文章主要介紹了Vue之綁定class樣式與style樣式方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • vue使用動態(tài)添加路由(router.addRoutes)加載權(quán)限側(cè)邊欄的方式

    vue使用動態(tài)添加路由(router.addRoutes)加載權(quán)限側(cè)邊欄的方式

    這篇文章主要介紹了vue使用動態(tài)添加路由(router.addRoutes)加載權(quán)限側(cè)邊欄的方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • vue init webpack 項(xiàng)目初始化失敗問題

    vue init webpack 項(xiàng)目初始化失敗問題

    在使用Vue-cli搭建項(xiàng)目時(shí),可能會遇到依賴無法顯示版本號的問題,首先檢查環(huán)境變量配置是否正確,確保vue-init的安裝目錄被正確添加到path中,若問題仍未解決,嘗試卸載并重新安裝webpack,確保在正確的項(xiàng)目路徑下執(zhí)行npm install和npm run dev命令
    2024-09-09
  • vue進(jìn)行圖片的預(yù)加載watch用法實(shí)例講解

    vue進(jìn)行圖片的預(yù)加載watch用法實(shí)例講解

    下面小編就為大家分享一篇vue進(jìn)行圖片的預(yù)加載watch用法實(shí)例講解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • vue-axios同時(shí)請求多個(gè)接口 等所有接口全部加載完成再處理操作

    vue-axios同時(shí)請求多個(gè)接口 等所有接口全部加載完成再處理操作

    這篇文章主要介紹了vue-axios同時(shí)請求多個(gè)接口 等所有接口全部加載完成再處理操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • vue 監(jiān)聽鍵盤回車事件詳解 @keyup.enter || @keyup.enter.native

    vue 監(jiān)聽鍵盤回車事件詳解 @keyup.enter || @keyup.enter.native

    今天小編就為大家分享一篇vue 監(jiān)聽鍵盤回車事件詳解 @keyup.enter || @keyup.enter.native,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08

最新評論

北票市| 太仆寺旗| 光泽县| 开江县| 龙口市| 安塞县| 宁波市| 芜湖县| 扶沟县| 浑源县| 琼海市| 兴城市| 镇赉县| 呼玛县| 安岳县| 彭山县| 鹿邑县| 灵寿县| 西宁市| 都匀市| 阳西县| 黔东| 镇安县| 菏泽市| 铁岭市| 英德市| 肃北| 久治县| 长顺县| 镇沅| 丽水市| 花莲市| 长海县| 绍兴市| 崇州市| 丰原市| 娄烦县| 天峨县| 安新县| 揭西县| 梓潼县|