Electron:Win环境下-Vue项目打包

准备工作

  • 已有的一个正常的Vue项目(Vue3 + Vite + Ts)
  • Node版本14.18.2

注意:Electron不能跨架构跨平台打包,windows下只能打包windows包,如需要打包,MacOS、Linux等需要去对应平台

建议先设置国内镜像

npm config edit

执行后会弹出npm的配置文档,将以下类容复制到文件末尾(格式跟文档中保持一致)

electron_mirror=https://npm.taobao.org/mirrors/electron/
    
electron-builder-binaries_mirror=https://npm.taobao.org/mirrors/electron-builder-binaries/

一、安装依赖

项目根目录下安装如下依赖包

npm install electron -g  // 全局安装Electron,加g是全局安装,自动添加到环境变量中
vue add electron-builder  // 安装Electron-builder打包工具  
  • vite中支持Electron的插件也改为vite-electron-plugin
  • Electron-packager同样可以打包,官方更推荐使用Electron-builder

可使用输入electron命令验证

如果出现安装出错?

  • 检查下Node版本是否与Electron版本匹配,如果不匹配需要降级/升级
  • 检查vue-cli是否匹配,如果不匹配卸载重装
  • 检查网络情况国内镜像是否配置成功

二、electron配置文件

2.1 新建electron文件夹

在项目根目录下新建一个electron文件夹,与package.json平级

2.2 新建main.js文件

electron文件夹下新建一个main.js文件,并复制以下内容

// Modules to control application life and create native browser window
const { app, BrowserWindow, Menu } = require('electron');
const path = require('path');
const mode = process.env.NODE_ENV;

// 隐藏electron创听的菜单栏
Menu.setApplicationMenu(null);

function createWindow() {
  // Create the browser window.
  const mainWindow = new BrowserWindow({
    width: 800, // 窗口打开的宽度
    height: 600,  // 窗口打开的高度
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      //  渲染进程 开启node模块,使得JS中可以使用node的model
      nodeIntegration: true,
    }
  });

  // and load the index.html of the app.
  mainWindow.loadURL(
    mode === 'development' ? 'http://localhost:2103' : `file://${path.join(__dirname, '../dist/index.html')}`
  );

  // Open the DevTools.
  if (mode === 'development') {
    mainWindow.webContents.openDevTools();
  }
}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(() => {
  createWindow();

  app.on('activate', function () {
    // On macOS it's common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
});

// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit()
  BrowserWindow.addDevToolsExtension('node_modules/vue-devtools/vender')
});

// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.

2.3 新建preload.js文件

electron文件夹下新建一个preload.js文件,并复制以下内容

// All of the Node.js APIs are available in the preload process.
// It has the same sandbox as a Chrome extension.
window.addEventListener('DOMContentLoaded', () => {
  const replaceText = (selector, text) => {
    const element = document.getElementById(selector)
    if (element) element.innerText = text
  }

  for (const type of ['chrome', 'node', 'electron']) {
    replaceText(`${type}-version`, process.versions[type])
  }
})

备注

mainpreload文件来自Electron快速启动示例代码,可以直接将项目拉取下来查看

git clone https://github.com/electron/electron-quick-start

三、package.json配置

在package.json文件中添加一下内容

"main": "electron/main.js",
"scripts": {
  "electron:build": "npm run build && electron-builder"
},

注意:如果package.json中有"type": "module",字段则需要去掉,避免报错

  • windows系统中打包,只需在项目根目录输入electron-builder即可,不需要加任何参数,就可以打包出一个与当前系统相匹配的安装包。
  • electron-builder --win --x64,其中,--win可简写为-w--64表示64位系统软件;如果要打包一个32位系统的软件,可以添加参数--ia32

四、打包完成

npm run electron:build 
// 构建打包客户端-会在根目录生成dist_electron文件夹,其中的XXX Setup XXX.exe就是安装包

五、其他配置

package.json文件中,有一个build属性,可以配置打包软件的参数

"build": {
  "appId": "xxxxxxxx",
  "copyright": "xxx",
  "productName": "xxx",
  "win": {
    "files":{
      "filter": ["!doc/*"]
    },
  "icon": "res/icon.ico"
  },
  "mac": {
    "files":{
      "filter": ["!doc/*"]
    },
  "icon": "res/icon.icns"
  }
},
  • windows打包时,icon其格式必须是.icowindows图标。如果这么写:"icon": "res/icon",将自动补全为"icon": "res/icon.ico"
  • windows平台的ico文件大小可设置为256×256
  • MacOS平台的ico文件大小可设置为128×128
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容