使用 electron 将已完成的 Vue 项目转换为桌面端应用程序

803 阅读1分钟

一、拉取 electron 官网 demo,安装依赖,跑起来

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

二、安装打包依赖 electron-packager

  npm install electron-packager --save-dev

三、打包 Vue 项目,复制 dist 文件夹到 electron-quick-start 文件夹,和 node_modules 同级

  npm run build

四、进入 electron-quick-start 项目,删除项目根目录下的 index.html 文件

五、在 electron-quick-start 项目中找到入口文件 main.js ,修改打包的文件路径为我们的 index.html

 - mainWindow.loadFile('index.html')
 + mainWindow.loadFile('./dist/index.html')

六、在 electron-quick-start 项目中,进入 package.json ,在 scripts 中添加 packager 指令

  "scripts": {
  "start": "electron .",
  "packager": "electron-packager ./ App --platform=win32 --arch=x64 --overwrite"
  }

七、运行命令打包,项目中出现 App-win32-x64 文件夹,这个文件就是打包好的桌面应用,文件夹里有一个 App.exe 文件,App.exe就是这个项目的启动文件

  npm run packager

八(可选)、美化 exe

  • 去掉默认边框、默认菜单,添加自定义
// main.js
const { app, BrowserWindow, ipcMain } = require('electron');
var mainWindow;
function createWindow() {
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    frame: false,
    webPreferences: {
      nodeIntegration: true,
      enableRemoteModule: true,
      contextIsolation: false,
    },
  });
  mainWindow.loadFile('./dist/index.html');
}

app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit();
});

//登录窗口最小化
ipcMain.on('window-min', function () {
  mainWindow.minimize();
});
//登录窗口最大化
ipcMain.on('window-max', function () {
  if (mainWindow.isMaximized()) {
    mainWindow.restore();
  } else {
    mainWindow.maximize();
  }
});
//关闭窗口
ipcMain.on('window-close', function () {
  mainWindow.close();
});

app.on('ready', createWindow);

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit();
  }
});

// dist/index.html
---  <style></style> 
---  <body></body> 
+++  <style>
      .toubu {
        background-color: #f7f9ff;
        -webkit-app-region: drag;
        -webkit-user-select: none;
        text-align: right;
      }

      .toubu img {
        -webkit-app-region: no-drag;
        padding: 5px 10px 0 0;
        height: 15px;
        cursor: pointer;
      }
    </style> 
+++ <body>
    <div class="toubu">
      <!-- 三个操作按钮 -->
      <img id="min" src="../最小化.png" alt="" />
      <img id="max" src="../缩放.png" alt="" />
      <img id="close" src="../关闭.png" alt="" />
    </div>
    <div id="app"></div>
    <script>
      var ipc = require('electron').ipcRenderer;
      document.getElementById('max').addEventListener('click', () => {
        ipc.send('window-max');
      });
      document.getElementById('min').addEventListener('click', () => {
        ipc.send('window-min');
      });
      document.getElementById('close').addEventListener('click', () => {
        ipc.send('window-close');
      });
    </script>
    </body>
  • 根目录下放入三张图片

image.png

  • 修改应用图标(待调研)
// package.json
 "scripts": {
    "start": "electron .",
--- "packager": "electron-packager ./ App --platform=win32 --arch=x64 --overwrite"
+++ "packager": "electron-packager ./ App --platform=win32 --arch=x64 --overwrite --icon=./dist/favicon.ico"
  },

注意事项

如果遇到白屏的情况,大概率是项目配置的地方缺失了一个路径配置

image.png