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

vue 項(xiàng)目集成 electron 和 electron 打包及環(huán)境配置方法

 更新時(shí)間:2025年01月08日 10:17:05   作者:mr_cmx  
文章介紹了如何使用Vue和Electron開發(fā)桌面端應(yīng)用,包括安裝Electron、配置package.json、創(chuàng)建main.js文件、運(yùn)行和打包應(yīng)用等步驟,并分享了一些常見的打包錯(cuò)誤及其解決方法,感興趣的朋友一起看看吧

vue + electron 開發(fā)桌面端應(yīng)用

安裝 electron

npm i electron -D

記得加上-D,electron 需添加到devDependencies,如果添加到dependencies后面運(yùn)行可能會(huì)報(bào)錯(cuò)

根目錄創(chuàng)建electron文件夾,在electron文件夾創(chuàng)建main.js(或者background.js)

在文件中添加如下代碼:

// 控制應(yīng)用生命周期和創(chuàng)建原生瀏覽器窗口的模組
const { app, BrowserWindow, Menu } = require('electron')
const path = require('path')
function createWindow() {
  // 創(chuàng)建瀏覽器窗口
  const mainWindow = new BrowserWindow({
    width: 1200,
    height: 800,
    webPreferences: {
      // 書寫渲染進(jìn)程中的配置
      nodeIntegration: true, //開啟true這一步很重要,目的是為了vue文件中可以引入node和electron相關(guān)的API
      contextIsolation: false, // 可以使用require方法
      enableRemoteModule: true, // 可以使用remote方法
    },
  })
    // 加載 index.html
    mainWindow.loadFile(path.resolve(__dirname, '../dist/index.html')) // 新增
}
// 這段程序?qū)?huì)在 Electron 結(jié)束初始化
// 和創(chuàng)建瀏覽器窗口的時(shí)候調(diào)用
// 部分 API 在 ready 事件觸發(fā)后才能使用。
app.whenReady().then(() => {
  createWindow()
  app.on('activate', function () {
    // 通常在 macOS 上,當(dāng)點(diǎn)擊 dock 中的應(yīng)用程序圖標(biāo)時(shí),如果沒有其他
    // 打開的窗口,那么程序會(huì)重新創(chuàng)建一個(gè)窗口。
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})
// 除了 macOS 外,當(dāng)所有窗口都被關(guān)閉的時(shí)候退出程序。 因此,通常對(duì)程序和它們?cè)?
// 任務(wù)欄上的圖標(biāo)來(lái)說(shuō),應(yīng)當(dāng)保持活躍狀態(tài),直到用戶使用 Cmd + Q 退出。
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit()
})

修改package.json

1、在scripts同級(jí)下添加

"main": "electron/main.js",

根據(jù)實(shí)際的文件路徑配置

2、查看是否存在"type": "module"配置
如果有,則刪除"type"配置,因?yàn)閙ain中用的不是es6的模塊引入

3、"scripts"中添加"electron:dev": "electron .",用于啟用electron

現(xiàn)在就可以通過npm run electron:dev運(yùn)行electron了

因?yàn)樯厦鎚ain.css運(yùn)行的是 dist文件夾 中的 index.html ,所以如果沒有該文件的得先npm run build

多環(huán)境配置并在本地開發(fā)時(shí)使用熱更新

安裝 electron-reload

npm i electron-reload

修改”scripts“ 指令

"electron:dev": "set ELECTRON_ENV=development& electron .",

在本地運(yùn)行時(shí)添加值為 ‘development’ 的 ELECTRON_ENV 環(huán)境變量

修改main.js內(nèi)容

完整代碼如下

// 控制應(yīng)用生命周期和創(chuàng)建原生瀏覽器窗口的模組
const { app, BrowserWindow, Menu } = require('electron')
const path = require('path')
function createWindow() {
  // 創(chuàng)建瀏覽器窗口
  const mainWindow = new BrowserWindow({
    width: 1200,
    height: 800,
    webPreferences: {
      // 書寫渲染進(jìn)程中的配置
      nodeIntegration: true, //開啟true這一步很重要,目的是為了vue文件中可以引入node和electron相關(guān)的API
      contextIsolation: false, // 可以使用require方法
      enableRemoteModule: true, // 可以使用remote方法
    },
  })
  console.log("process.env.ELECTRON_ENV", process.env.ELECTRON_ENV)
  // let env = 'pro'
  let env = process.env.ELECTRON_ENV
  // 環(huán)境變量 ELECTRON_ENV 值為 development 則使用熱更新
  // 配置熱更新
  if (env == 'development') {
    const elePath = path.join(__dirname, '../node_modules/electron')
    require('electron-reload')('../', {
      electron: require(elePath),
    })
    // 熱更新監(jiān)聽窗口
    mainWindow.loadURL('http://localhost:3100')
    // 打開開發(fā)工具
    mainWindow.webContents.openDevTools()
  } else {
    // 生產(chǎn)環(huán)境中要加載文件,打包的版本
    Menu.setApplicationMenu(null)
    // 加載 index.html
    mainWindow.loadFile(path.resolve(__dirname, '../dist/index.html')) // 新增
  }
}
// 這段程序?qū)?huì)在 Electron 結(jié)束初始化
// 和創(chuàng)建瀏覽器窗口的時(shí)候調(diào)用
// 部分 API 在 ready 事件觸發(fā)后才能使用。
app.whenReady().then(() => {
  createWindow()
  app.on('activate', function () {
    // 通常在 macOS 上,當(dāng)點(diǎn)擊 dock 中的應(yīng)用程序圖標(biāo)時(shí),如果沒有其他
    // 打開的窗口,那么程序會(huì)重新創(chuàng)建一個(gè)窗口。
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})
// 除了 macOS 外,當(dāng)所有窗口都被關(guān)閉的時(shí)候退出程序。 因此,通常對(duì)程序和它們?cè)?
// 任務(wù)欄上的圖標(biāo)來(lái)說(shuō),應(yīng)當(dāng)保持活躍狀態(tài),直到用戶使用 Cmd + Q 退出。
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit()
})

這里 http://localhost:3100 為我本地開發(fā)時(shí)項(xiàng)目運(yùn)行的url

運(yùn)行
本地啟動(dòng)web項(xiàng)目
一般是:npm run dev
然后再:npm run electron:dev啟動(dòng)electron。這樣electron就可以實(shí)時(shí)監(jiān)聽窗口了。

打包應(yīng)用

安裝 electron-builder

npm i electron-builder -D

package.json中新增scripts

"electron:build": "vite build --mode application & electron-builder build --config electron-builder.json",

創(chuàng)建 electron-builder.json 進(jìn)行打包配置

{
  "appId": "com.example.myapp",
  "productName": "app名字",
  "files": ["./electron/main.js", "./dist"],
  "extraFiles": ["./videos", "./cvideo"], 
  "directories": {
    "output": "./buileder"
  },
  "nsis": {
    "oneClick": false,
    "perMachine": true,
    "allowToChangeInstallationDirectory": true
  },
  "win": {
    "icon": "public/icon.png",
    "target": ["nsis", "zip"]
  },
  "mac": {
    "icon": "public/icon.png",
    "target": "dmg"
  },
  "linux": {
    "icon": "public/icon.png",
    "target": "AppImage"
  },
  "dmg": {
    "contents": [
      {
        "x": 110,
        "y": 150
      },
      {
        "x": 240,
        "y": 150,
        "type": "link",
        "path": "/Applications"
      }
    ]
  },
  "appx": {
    "publisher": "CN=app名字"
  }
}

public/icon.png 為應(yīng)用的icon圖標(biāo),沒有的話可以刪除

運(yùn)行打包命令

npm run electron:build 

打包成功后,在根目錄會(huì)出現(xiàn)一個(gè)buileder文件夾,打包后的應(yīng)用就在里面

打包過程中常見的一些坑

一、打包后沒有報(bào)錯(cuò),但打開后一片空白
打開調(diào)試工具發(fā)現(xiàn)文件引入失敗,且引入路徑也不對(duì)。這種一般是根路徑配置問題
解決方法:
1、配置base,以vite為例
在vite.config.ts中添加base配置

export default defineConfig({
  base: './',
})

2、在 index.html 中查看head中是否有這段標(biāo)簽

<base href="/" rel="external nofollow" >

注意!注意!注意!(這個(gè)bug我之前找了好一會(huì)兒才發(fā)現(xiàn))

有的話刪除掉

二、如果報(bào):Package "electron" is only allowed in "devDependencies". Please remove it from the "dependencies"

這個(gè)錯(cuò)誤表示package.json文件中依賴electron應(yīng)該在 devDependencies而不是dependencies中

解決方法:
將electron移到devDependencies,并重裝依賴

三、如果報(bào)類似 http://github.com/xxxx/xxxx 的錯(cuò)誤一般是網(wǎng)絡(luò)問題

解決方法:
過一會(huì)兒再嘗試,或者科學(xué)上網(wǎng)

四、如果報(bào)類似 zip: not a valid zip file github.com/develar/app-builder/pkg/archive/zipx.(*Extractor).extractAndWriteFile的錯(cuò)誤

解決方法:
重裝依賴

到此這篇關(guān)于vue 項(xiàng)目集成 electron 和 electron 打包及環(huán)境配置的文章就介紹到這了,更多相關(guān)vue 集成 electron 和 electron 打包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue實(shí)現(xiàn)進(jìn)度條變化效果

    Vue實(shí)現(xiàn)進(jìn)度條變化效果

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)進(jìn)度條變化效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 解決vue props 拿不到值的問題

    解決vue props 拿不到值的問題

    今天小編就為大家分享一篇解決vue props 拿不到值的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-09-09
  • Vue如何引入全局過濾器

    Vue如何引入全局過濾器

    這篇文章主要介紹了Vue如何引入全局過濾器問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 完美解決vue中報(bào)錯(cuò)?“TypeError:?Cannot?read?properties?of?null?(reading'forEach')“

    完美解決vue中報(bào)錯(cuò)?“TypeError:?Cannot?read?properties?of?null?

    這篇文章主要介紹了完美解決vue中報(bào)錯(cuò)?“TypeError:?Cannot?read?properties?of?null?(reading?‘forEach‘)“,本文給大家分享詳細(xì)解決方案,需要的朋友可以參考下
    2023-02-02
  • Vue中iframe?結(jié)合?window.postMessage?實(shí)現(xiàn)跨域通信

    Vue中iframe?結(jié)合?window.postMessage?實(shí)現(xiàn)跨域通信

    window.postMessage()?方法可以安全地實(shí)現(xiàn)跨源通信,在一個(gè)項(xiàng)目的頁(yè)面中嵌入另一個(gè)項(xiàng)目的頁(yè)面,需要實(shí)現(xiàn)父子,子父頁(yè)面的通信,對(duì)Vue中iframe?結(jié)合?window.postMessage?實(shí)現(xiàn)跨域通信相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • Vue實(shí)現(xiàn)實(shí)時(shí)刷新時(shí)間的功能

    Vue實(shí)現(xiàn)實(shí)時(shí)刷新時(shí)間的功能

    這篇文章主要為大家詳細(xì)介紹了如何Vue利用實(shí)現(xiàn)實(shí)時(shí)刷新時(shí)間的功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解下
    2023-12-12
  • 前端使用print.js實(shí)現(xiàn)打印功能(基于vue)

    前端使用print.js實(shí)現(xiàn)打印功能(基于vue)

    最近新接了一個(gè)需求,想要在前端實(shí)現(xiàn)打印功能,下面這篇文章主要給大家介紹了關(guān)于前端使用print.js實(shí)現(xiàn)打印功能(基于vue)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • vue3+springboot部署到Windows服務(wù)器的詳細(xì)步驟

    vue3+springboot部署到Windows服務(wù)器的詳細(xì)步驟

    這篇文章主要介紹了vue3+springboot部署到Windows服務(wù)器,配置Nginx時(shí),因?yàn)楝F(xiàn)在是把vue前端交給了Nginx代理,所以這里的端口號(hào)不一定是我們?cè)趘ue項(xiàng)目中設(shè)置的端口號(hào),本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-10-10
  • vue3中vuex與pinia的踩坑筆記記錄

    vue3中vuex與pinia的踩坑筆記記錄

    Vuex是一個(gè)專為Vue.js應(yīng)用程序開發(fā)的狀態(tài)管理模式,它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化,這篇文章主要給大家介紹了關(guān)于vue3中vuex與pinia踩坑的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • Element?el-tag標(biāo)簽圖文實(shí)例詳解

    Element?el-tag標(biāo)簽圖文實(shí)例詳解

    現(xiàn)在好多應(yīng)用場(chǎng)景里會(huì)有一些需要給文章打標(biāo)簽等類似的操作,下面這篇文章主要給大家介紹了關(guān)于Element?el-tag標(biāo)簽的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04

最新評(píng)論

扶风县| 克什克腾旗| 五莲县| 辛集市| 温宿县| 淮阳县| 昔阳县| 南阳市| 聂荣县| 孙吴县| 娱乐| 永嘉县| 米脂县| 大余县| 商水县| 竹北市| 苏州市| 通辽市| 睢宁县| 昌宁县| 治县。| 湖州市| 桦甸市| 黄梅县| 汉阴县| 措美县| 天长市| 霍林郭勒市| 仙桃市| 溧阳市| 宾川县| 南丰县| 宝丰县| 长子县| 桃园市| 潼南县| 大悟县| 贵州省| 临泉县| 华坪县| 卓资县|