zoukankan      html  css  js  c++  java
  • 使用electron-packager electron-builder electron-updater 打包vue项目,支持在线更新

    1.如何用electron-packager electron-builder打包vue项目,打包成桌面程序。

    步骤一、

       执行npm run build 打包你的vue项目。

        打包成功后,生成dist打包后的文件。

        在dist打开命令行, 安装electron-packager electron-builder 

        安装命令  npm install electron-packager    npm install electron-builder 

        在dist中新增main.js文件,其中内容包括

        

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    const {app, BrowserWindow,globalShortcut,ipcMain} =require('electron')
    let win;
    let windowConfig = {
      fullscreen:true,
      800,
      height:600
    };
    const  {autoUpdater}=require('electron-updater');
    function createWindow(){
      win = new BrowserWindow(windowConfig);
      win.loadURL(`file://${__dirname}/index.html`);
      app.setApplicationMenu(null);//关闭菜单栏
      // 注册一个 'CommandOrControl+X' 的全局快捷键
      globalShortcut.register('CommandOrControl+Alt+K', () => {
        win.webContents.openDevTools();  //开启调试工具
      });
      win.on('close',() => {
        //回收BrowserWindow对象
        win = null;
      });
      win.on('resize',() => {
        win.reload();
      })
    }
    app.on('ready',createWindow);
    app.on('window-all-closed',() => {
      app.quit();
    });
    app.on('activate',() => {
      if(win == null){
        createWindow();
      }
    });
     
    // 检测更新,在你想要检查更新的时候执行,renderer事件触发后的操作自行编写
    !function updateHandle() {
      let message = {
        error: '检查更新出错',
        checking: '正在检查更新……',
        updateAva: '检测到新版本,正在下载……',
        updateNotAva: '现在使用的就是最新版本,不用更新',
      };
      const uploadUrl = "更新包所在的服务器地址"// 下载地址,不加后面的**.exe
      autoUpdater.setFeedURL(uploadUrl);
      autoUpdater.on('error'function (error) {
        console.log(autoUpdater.error);
        sendUpdateMessage(message.error)
      });
      autoUpdater.on('checking-for-update'function () {
        sendUpdateMessage(message.checking)
      });
      autoUpdater.on('update-available'function (info) {
        sendUpdateMessage(message.updateAva)
      });
      autoUpdater.on('update-not-available'function (info) {
        sendUpdateMessage(message.updateNotAva)
      });
     
      // 更新下载进度事件
      autoUpdater.on('download-progress'function (progressObj) {
        win.webContents.send('downloadProgress', progressObj)
      });
      autoUpdater.on('update-downloaded'function (event, releaseNotes, releaseName, releaseDate, updateUrl, quitAndUpdate) {
     
        ipcMain.on('isUpdateNow', (e, arg) => {
          //some code here to handle event
          autoUpdater.quitAndInstall();
        });
     
        win.webContents.send('isUpdateNow')
      });
     
      ipcMain.on("checkForUpdate",()=>{
        //执行自动更新检查
        autoUpdater.checkForUpdates();
      })
    }();
     
    // 通过main进程发送事件给renderer进程,提示更新信息
    function sendUpdateMessage(text) {
      win.webContents.send('message', text)
    }

      在dist文件夹下新增package.json文件,其中包括内容为

           

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    {
      "name""名称",
      "productName""项目名称",
      "author""作者",
      "version""1.1.1",//版本
      "main""main.js",
      "description""项目描述",
      "scripts": {
        "pack""electron-builder --dir",
        "dist""electron-builder",
        "postinstall""electron-builder install-app-deps"
      },
      "build": {
        "electronVersion""1.8.4",
        "win": {
          "requestedExecutionLevel""highestAvailable",
          "target": [
            {
              "target""nsis",
              "arch": [
                "x64"
              ]
            }
          ]
        },
        "appId""项目的id,唯一id",
        "artifactName""名称-${version}-${arch}.${ext}",
        "nsis": {
          "artifactName""名称-${version}-${arch}.${ext}"
        },
        "publish": [
          {
            "provider""generic",
            "url""服务器最新安装包的位置"
          }
        ]
      },
      "dependencies": {
        "core-js""^2.4.1",
        "electron-updater""^2.22.1",
        "fs-extra""^4.0.1",
        "install.js""^1.0.1",
        "moment""^2.18.1",
        "moment-es6""^1.0.0"
      }
    }

      在你的vue项目里面App.vue生命周期里面新增如下代码:这是自动检测更新

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    mounted: function () {
          if (window.require) {
            let ipc = window.require('electron').ipcRenderer;
            ipc.send("checkForUpdate");
            ipc.on("message", (event, text) => {
              this.tips = text;
              console.log('message1',this.tips)
            });
            ipc.on("downloadProgress", (event, progressObj)=> {
              this.downloadPercent = progressObj.percent || 0;
              console.log('message2',this.downloadPercent)
            });
            ipc.on("isUpdateNow", () => {
              ipc.send("isUpdateNow");
            });
          }
        },

     一切准备就绪之后在终端里面执行命令: electron-builder 

      成功之后会生成一个安装包及版本文件

         双击exe程序安装之后就在桌面有快捷图标就可以使用了,

    如果你的程序有更新,一点要把你的安装包及latest.yml放到你刚刚在package.json里面更新文件在服务器的位置。

    1
    2
    3
    4
    5
    6
    "publish": [
          {
            "provider""generic",
            "url""http:/xxxx.com/download/"
          }
        ]
    1
    download的文件下面,<br>注意有个坑:
    1
    http:/xxxx.com/download/latest.yml一定要能访问到并且在浏览器里面可以输出里面的内容,否则更新程序会失败。<br>文件目录如下:

    如果真的不知道将来要做什么,索性就先做好眼前的事情。只要今天比昨天过得好,就是进步。长此以往,时间自然会还你一个意想不到的未来。
    生活像一个杯子。一开始,里面是空的,之后,要看你怎么对待它。如果你只往不如意的方面想,那么你最终辉得到一杯苦水。如果你往好的方面想,那么你最终会得到一杯清泉。
    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
  • 相关阅读:
    测试数据不会造?Fake Data!
    Go面试题汇总
    数据存储的 timestamp 时间正确 但是 Laravel 取出来的时间慢的 8 小时(Lumen timezone 时区设置方法(慢了8个小时))
    nginx php和html伪静态
    laravel DB操作
    深度学习_tensorflow-gpu安装:Win10-64bit+ NVIDIA GeForce MX150
    clickhouse SQL查询语句 【译自Github 英文文档】
    ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台
    elasticsearch max virtual memory areas vm.max_map_count [65530] is too low, increase to at le
    Pycharm 一键加引号
  • 原文地址:https://www.cnblogs.com/lipengze/p/14898240.html
Copyright © 2011-2022 走看看