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

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

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

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

安裝 electron

npm i electron -D

記得加上-D,electron 需添加到devDependencies,如果添加到dependencies后面運行可能會報錯

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

在文件中添加如下代碼:

// 控制應用生命周期和創(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: {
      // 書寫渲染進程中的配置
      nodeIntegration: true, //開啟true這一步很重要,目的是為了vue文件中可以引入node和electron相關的API
      contextIsolation: false, // 可以使用require方法
      enableRemoteModule: true, // 可以使用remote方法
    },
  })
    // 加載 index.html
    mainWindow.loadFile(path.resolve(__dirname, '../dist/index.html')) // 新增
}
// 這段程序將會在 Electron 結束初始化
// 和創(chuàng)建瀏覽器窗口的時候調用
// 部分 API 在 ready 事件觸發(fā)后才能使用。
app.whenReady().then(() => {
  createWindow()
  app.on('activate', function () {
    // 通常在 macOS 上,當點擊 dock 中的應用程序圖標時,如果沒有其他
    // 打開的窗口,那么程序會重新創(chuàng)建一個窗口。
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})
// 除了 macOS 外,當所有窗口都被關閉的時候退出程序。 因此,通常對程序和它們在
// 任務欄上的圖標來說,應當保持活躍狀態(tài),直到用戶使用 Cmd + Q 退出。
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit()
})

修改package.json

1、在scripts同級下添加

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

根據實際的文件路徑配置

2、查看是否存在"type": "module"配置
如果有,則刪除"type"配置,因為main中用的不是es6的模塊引入

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

現在就可以通過npm run electron:dev運行electron了

因為上面main.css運行的是 dist文件夾 中的 index.html ,所以如果沒有該文件的得先npm run build

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

安裝 electron-reload

npm i electron-reload

修改”scripts“ 指令

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

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

修改main.js內容

完整代碼如下

// 控制應用生命周期和創(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: {
      // 書寫渲染進程中的配置
      nodeIntegration: true, //開啟true這一步很重要,目的是為了vue文件中可以引入node和electron相關的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 {
    // 生產環(huán)境中要加載文件,打包的版本
    Menu.setApplicationMenu(null)
    // 加載 index.html
    mainWindow.loadFile(path.resolve(__dirname, '../dist/index.html')) // 新增
  }
}
// 這段程序將會在 Electron 結束初始化
// 和創(chuàng)建瀏覽器窗口的時候調用
// 部分 API 在 ready 事件觸發(fā)后才能使用。
app.whenReady().then(() => {
  createWindow()
  app.on('activate', function () {
    // 通常在 macOS 上,當點擊 dock 中的應用程序圖標時,如果沒有其他
    // 打開的窗口,那么程序會重新創(chuàng)建一個窗口。
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})
// 除了 macOS 外,當所有窗口都被關閉的時候退出程序。 因此,通常對程序和它們在
// 任務欄上的圖標來說,應當保持活躍狀態(tài),直到用戶使用 Cmd + Q 退出。
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit()
})

這里 http://localhost:3100 為我本地開發(fā)時項目運行的url

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

打包應用

安裝 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 進行打包配置

{
  "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 為應用的icon圖標,沒有的話可以刪除

運行打包命令

npm run electron:build 

打包成功后,在根目錄會出現一個buileder文件夾,打包后的應用就在里面

打包過程中常見的一些坑

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

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

2、在 index.html 中查看head中是否有這段標簽

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

注意!注意!注意?。ㄟ@個bug我之前找了好一會兒才發(fā)現)

有的話刪除掉

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

這個錯誤表示package.json文件中依賴electron應該在 devDependencies而不是dependencies中

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

三、如果報類似 http://github.com/xxxx/xxxx 的錯誤一般是網絡問題

解決方法:
過一會兒再嘗試,或者科學上網

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

解決方法:
重裝依賴

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

相關文章

  • Vue實現進度條變化效果

    Vue實現進度條變化效果

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

    解決vue props 拿不到值的問題

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

    Vue如何引入全局過濾器

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

    完美解決vue中報錯?“TypeError:?Cannot?read?properties?of?null?

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

    Vue中iframe?結合?window.postMessage?實現跨域通信

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

    Vue實現實時刷新時間的功能

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

    前端使用print.js實現打印功能(基于vue)

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

    vue3+springboot部署到Windows服務器的詳細步驟

    這篇文章主要介紹了vue3+springboot部署到Windows服務器,配置Nginx時,因為現在是把vue前端交給了Nginx代理,所以這里的端口號不一定是我們在vue項目中設置的端口號,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2022-10-10
  • vue3中vuex與pinia的踩坑筆記記錄

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

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

    Element?el-tag標簽圖文實例詳解

    現在好多應用場景里會有一些需要給文章打標簽等類似的操作,下面這篇文章主要給大家介紹了關于Element?el-tag標簽的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04

最新評論

修文县| 叙永县| 武强县| 汉沽区| 青龙| 宜都市| 德钦县| 改则县| 二连浩特市| 巴彦淖尔市| 顺义区| 盱眙县| 博湖县| 汨罗市| 漾濞| 页游| 页游| 苍南县| 宁夏| 平塘县| 淮阳县| 保德县| 涞水县| 南溪县| 泸西县| 丹凤县| 龙南县| 榆树市| 东海县| 轮台县| 伽师县| 肥城市| 博罗县| 威远县| 东明县| 于都县| 贡嘎县| 八宿县| 海林市| 丽江市| 南安市|