如何使用Vue开发Electron桌面程序

目录

一、Electron介绍

二、项目搭建

1. 使用 vue cli 创建vue项目

2. 安装插件 vue-cli-plugin-electron-builder

​编辑

三、开发总结

1. 配置项目图标

2. 在Mac系统下的几个问题

3. 项目开发模式运行出现 Failed to fetch extension 警告

4. 项目使用本地的vue devtools


一、Electron介绍

Electron 是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目. 使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序

1. 特点

  • 跨平台 可以打包成Mac、Windows 和 Linux三个平台的应用程序

  • 简化桌面端开发 (1)Electron 基于 Chromium 和 Node.js,可以使用 HTML, CSS 和 JavaScript 构建应用 (2)提供Electron api 和 NodeJS api

  • 社区活跃

2. 兼容性

xp无缘了, 可能需要使用nwjs等方案

二、项目搭建

1. 使用 vue cli 创建vue项目

vue create electron-test

2. 安装插件 vue-cli-plugin-electron-builder

vue add electron-builder

这里我选择最新的版本^11.0.0

3. 安装完插件后, 项目中的一些变化

① package.json 新增了几个scripts

http://img4.sycdn.imooc.com/5ff3ce6d0001c8d504940177.jpg

 electron开发模式
npm run electron:serve
 electron打包复制代码

npm run electron:build
postinstall 和 postuninstall 是为了确保安装或者移除依赖时, 始终跟electron匹配

② 新增了background.js文件

主进程相关操作, 写在这个文件中

三、开发总结

1. 配置项目图标

使用electron-icon-builder, 生成符合Electron的图标

① 安装

npm install --save-dev electron-icon-builder

② package.json 中配置生成命令

"electron:generate-icons": "electron-icon-builder --input=./public/icon.png --output=build --flatten"

③ 生成图标

npm run electron:generate-icons

④ 使用

import path from 'path'const win = new BrowserWindow({
  icon: path.join(__static, 'icon.png')
})

2. 在Mac系统下的几个问题

在mac系统下修改electron默认图标

 

在根目录下放置一张名为icon的图片,即icon.png即可。

在Mac系统下,复制粘贴无效的问题:

可以在创建窗口的时候自定义快捷键:

具体代码:

async function createWindow() {
  createMenu();
  // Create the browser window.
  win = new BrowserWindow({
    width: 1300,
    height: 660,
    minWidth: 1300,
    useContentSize: true,
    resizable: true,
    //  frame: false,
    //  backgroundColor: '#DC143C',
    // titleBarStyle: 'hidden',
    webPreferences: {
      webSecurity: false, //Remove cross domain restrictions
      nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION,
      // eslint-disable-next-line no-undef
      preload: `${__static}/preload.js`
    },
    //${__ Static} corresponds to the public directory
    // eslint-disable-next-line no-undef
    icon: `${__static}/img/icons/logo-64.png`
    // icon: `${__static}/img/icons/favicon.ico`
  });
  if (process.platform === 'darwin') {
    // eslint-disable-next-line no-undef
    app.dock.setIcon(`${__static}/img/icons/logo-512.png`);
  }
  if (process.env.WEBPACK_DEV_SERVER_URL) {
    // Load the url of the dev server if in development mode
    await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL);
    /* if (!process.env.IS_TEST) win.webContents.openDevTools(); */
  } else {
    createProtocol('app');
    // Load the index.html when not in development
    win.loadURL('app://./index.html');
    //Detect version updates
    updateHandle(win, feedUrl);
  }
  win.on('closed', () => {
    win = null;
  });
  globalShortcut.register('CommandOrControl+Shift+i', function () {
    win.webContents.openDevTools();
  });
  // esc,
  globalShortcut.register('ESC', function () {
    win.unmaximize();
  });
  if (process.platform === 'darwin') {
    const template = [
      {
        label: 'Application',
        submenu: [
          {
            label: 'Quit',
            accelerator: 'Command+Q',
            click: function () {
              app.quit();
            }
          }
        ]
      },
      {
        label: 'Edit',
        submenu: [
          { label: 'Copy', accelerator: 'CmdOrCtrl+C', selector: 'copy:' },
          { label: 'Paste', accelerator: 'CmdOrCtrl+V', selector: 'paste:' }
        ]
      }
    ];
    Menu.setApplicationMenu(Menu.buildFromTemplate(template));
  }
}

因为只是在Mac系统下需要自定义快捷键,因此加了一个 if (process.platform === 'darwin') {}的判断,快捷键的官网查询:官网快捷键

3. 项目开发模式运行出现 Failed to fetch extension 警告

由于网络问题, 开发模式无法下载 vue devtool 导致的警告, 需要在 background.js 中注释掉下载代码http://img1.sycdn.imooc.com/5ff3ce6e0001842d06840277.jpg

4. 项目使用本地的vue devtools

① 首先可以将vue devtools的代码clone下来, 然后进行编译

git clone https://github.com/vuejs/vue-devtools.gitcd vue-devtools
npm install
npm run build复制代码

然后把vue-devtools/packages/shell-chrome文件夹复制到项目根目录

② 在background.js文件的app.on('ready',生命周期中进行加载

// 使用本地的vue开发者工具session.defaultSession.loadExtension(path.resolve('shell-chrome'))复制代码

③ 创建窗口的时候使用下面示例方法, 即可正常显示出vue开发者工具

// src/background.jsif (process.env.WEBPACK_DEV_SERVER_URL) {  await transferWin.loadURL(
    process.env.WEBPACK_DEV_SERVER_URL + '/#/test'
  )  if (!process.env.IS_TEST) transferWin.webContents.openDevTools()
} else {
  transferWin.loadURL('app://./index.html' + '/#/test')
}复制代码

参考文章:如何用Vue开发Electron桌面程序? 「干货分享

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任磊abc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值