vue项目通过Electron生成桌面应用


本文主要使用的方法是将自己的Vue项目打包,放到electron官方的demo文件中,修改相应的配置后,生成exe文件。

一、安装

1. 把electron的官方demo下载下来

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

2. 安装cnpm

非必要,这个下载快一些

npm install -g cnpm -registry=https://registry.npm.taobao.org

使用 cnpm -v 查看是否安装成功
使用 cnpm i 安装依赖

3. npm start 启动electron

检查一下是否正常启动

4. 修改vue项目

修改公共路径为相对路径(不修改 npm run build 后会出现白屏情况)
修改vue.config.js中配置为 publicPath:’./'

5. 打包vue项目,将打包出来的dist文件夹复制到electron项目的根目录下

npm run build

6. electron文件夹中,删除根目录下index.html文件

7. electron文件夹中,修改main.js,修改打包文件路径为vue项目的index.html

// main.js 原始内容  mainWindow.loadFile('index.html')  
// 修改后的内容  mainWindow.loadFile('./dist/index.html') 

8. electron中,安装打包需要的依赖electron-packager

cnpm install electron-packager --save-dev

9. 修改package.json,在 scripts 中添加 packager 指令,如下所示:

自己修改一下exe的名字和icon路径,更多配置内容请查阅文档

"packager": "electron-packager ./ YOUR_APP_NAME --platform=win32 --arch=x64 --icon=./dist/favicon.ico --overwrite" 

10. 运行命令打包,然后项目中会出现一个的文件夹,这个文件就是打包好的桌面应用,文件夹里有一个 xxx.exe 文件,xxx.exe就是这个项目的启动文件

npm run packager

二、打包慢问题

上面的打包方式太慢,使用electron-builder打包

1. 安装 electron-builder

cnpm install electron-builder --save-dev

2. 更改npm的源和版本设置

这个设置可以在你执行安装依赖之前就设置好
//你可以使用终端输入命令

npm set ELECTRON\_MIRROR\=https://npm.taobao.org/mirrors/electron/ 
npm set ELECTRON\_CUSTOM\_DIR\=16.0.5

或者直接在C:\user\xxx路径下 搜索**.npmrc**然后打开文件进行修改

registry=https://registry.npmjs.org/
ELECTRON\_MIRROR\=https://npm.taobao.org/mirrors/electron/
ELECTRON\_CUSTOM\_DIR\="==16.0.5"

注意:这个版本号需要和你package.json中的版本号相同

3. package.json配置

{
  "name": "electron-quick-start",
  "version": "1.0.0",
  "description": "A minimal Electron application",
  "main": "main.js",
  "build": {
    "productName": "myFirstElectron",
    "appId": "com.electron.electron-quick-start",
    "copyright": "xxxx",
    "directories": {
      "output": "build"
    },
    "mac": {
      "target": [
        "dmg",
        "zip"
      ]
    },
    "win": {
      "target": [
        "nsis",
        "zip"
      ],
      "icon": "./dist/favicon.ico"
    }
  },
  "scripts": {
    "start": "electron .",
    "packager": "electron-packager ./ myFirstElectron --platform=win32 --arch=x64 --icon=./dist/favicon.ico --overwrite",
    "dist": "electron-builder --win --x64"
  },
  "repository": "https://github.com/electron/electron-quick-start",
  "keywords": [
    "Electron",
    "quick",
    "start",
    "tutorial",
    "demo"
  ],
  "author": "GitHub",
  "license": "CC0-1.0",
  "devDependencies": {
    "electron": "^16.0.5",
    "electron-builder": "^22.14.5",
    "electron-packager": "^15.4.0"
  },
  "electronDownload": {
    "mirror": "https://npm.taobao.org/mirrors/electron/"
  }
}

这里默认是打windows 64位的包.
如果打其他平台的包,只需要更改dist对应的命令,大概怎么配置请百度builder的配置

4. 执行打包

npm run dist

打包需要依赖于三个包,分别是

  1. electron-v版本-打包的平台.zip的包(如我这里是 electron-v16.0.5-win32-x64.zip )
  2. winCodeSign
  3. nsis

远程下载这三个依赖时,可能会因为超时报错,根据错误提示的地址(如下图)手动安装相应的文件就行。
在这里插入图片描述

1.下载 electron-v版本-打包的平台.zip的包

在electron 淘宝镜像:https://npm.taobao.org/mirrors/electron/ 中选择自己需要的版本,如我这是是16.0.5,下载 electron-v16.0.5-win32-x64.zipSHASUMS256.txt ,下载完成后,将 SHASUMS256.txt 文件改成 SHASUMS256.txt-16.0.5 拷入如图位置: 在这里插入图片描述

2. 下载 winCodeSign

根据报错信息提示的下载地址,手动下载自己需要的版本,下载 Source code(zip),我这里是
https://github.com/electron-userland/electron-builder-binaries/releases/download/winCodeSign-2.6.0/winCodeSign-2.6.0.7z
下载后解压,拷贝解压后的文件夹中 winCodeSign 文件夹中的所有文件到如图位置:
在这里插入图片描述

3. 下载 nsis

根据报错信息提示的下载地址,手动下载自己需要的版本,我这里是
https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-3.0.4.2/nsis-3.0.4.2.7z
https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-resources-3.4.1/nsis-resources-3.4.1.7z
下载后解压,拷贝解压后的文件到如图位置:
在这里插入图片描述
下好后重新执行 npm run dist,会生成 exe 文件。

注意:打包要求ico文件最少是256*256

三、接口请求问题

electron-bulider 打包后,接口请求前缀变成file://的问题
对基于 electron-builder 插件创建的桌面应用,所有的页面访问都被影射到了文件上,所以配置中的proxy值如: /api 访问都会映射到文件上,对vue的网络代理将失效。解决这一问题可以使用electron的方式实现跨域请求,解决方案如下:

1. 修改axios模块的baseUrl属性为真实的url地址

Vue.prototype.axios.defaults.baseURL ="http://localhost:8088/server";

也可以通过修改 .env.produnction 中的配置来修改 axiosbaseURL 的值,如下:在这里插入图片描述
在这里插入图片描述

2. 在electron主启动类(我的是main.js文件)中关闭web权限检查

async function createWindow() {
  const win = new BrowserWindow({
    ...
    webPreferences: {
      ...
      //关闭web权限检查,允许跨域
      webSecurity: false
    }
  })
  //打包后开启控制台
  //win.webContents.openDevTools();
  ... 
}

四、静态资源丢失问题

vue项目中router/index.js mode:history 注释掉
在这里插入图片描述

五、路由不跳转问题

1. vue项目中router/index.js mode:history 注释掉

在这里插入图片描述

2. electron的cookie获取有问题,将token获取方式改成通过vuex store存储获取

request.js
在这里插入图片描述
permission.js
在这里插入图片描述

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 创建项目 首先,需要使用Vue CLI创建一个新的项目。在命令行中输入以下命令: ``` vue create desktop-social-app ``` 在下一步中选择“Manually select features”,然后选择以下功能: - Babel - Router - Vuex - CSS Pre-processors - Linter / Formatter 接下来,选择Sass/SCSS作为CSS预处理器,ESLint + Prettier作为代码检查工具。完成后,进入项目文件夹并启动开发服务器: ``` cd desktop-social-app npm run serve ``` 2. 添加Electron 接下来,需要将Electron添加到项目中。可以使用electron-builder来处理Electron应用程序的构建和打包。首先,安装electronelectron-builder: ``` npm install --save-dev electron electron-builder ``` 接下来,创建一个main.js文件,作为Electron的主进程文件。在该文件中,需要做以下事情: - 创建一个BrowserWindow实例 - 加载Vue应用程序 - 处理应用程序的生命周期事件 main.js代码示例: ```javascript const { app, BrowserWindow } = require('electron') const path = require('path') function createWindow () { const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true, contextIsolation: false, enableRemoteModule: true, } }) win.loadURL(process.env.NODE_ENV === 'development' ? 'http://localhost:8080' : `file://${path.join(__dirname, '../dist/index.html')}`) win.on('closed', () => { app.quit() }) } app.on('ready', createWindow) app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit() } }) app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow() } }) ``` 3. 集成VueElectron 接下来,需要将Vue应用程序集成到Electron中。在main.js中加载Vue应用程序,并使用ipcMain和ipcRenderer设置主进程和渲染进程之间的通信。 在Vue应用程序中,可以使用Vue CLI提供的插件vue-cli-plugin-electron-builder来处理Electron应用程序的构建和打包。安装该插件: ``` vue add electron-builder ``` 然后修改package.json文件,添加以下配置: ```json { "productName": "Desktop Social App", "appId": "com.example.desktop-social-app", "files": [ "dist/electron/**/*", "public/**/*", "src/main/**/*", "package.json" ], "directories": { "output": "dist" }, "electronBuilder": { "nodeIntegration": true, "builderOptions": { "appId": "com.example.desktop-social-app", "win": { "icon": "public/favicon.ico" } } } } ``` 其中,productName是应用程序的名称,appId是应用程序的唯一标识符。files是需要打包的文件列表,directories.output是打包文件的输出目录。electronBuilder是electron-builder的配置选项,nodeIntegration表示是否允许在渲染进程中使用Node.js模块。 最后,在Vue组件中使用ipcRenderer来发送消息到主进程,使用ipcMain在主进程中监听消息,并做出相应的处理。 4. 开发和打包 现在,可以使用以下命令启动开发服务器和Electron应用程序: ``` npm run electron:serve ``` 要构建和打包Electron应用程序,可以使用以下命令: ``` npm run electron:build ``` 这将在dist目录中生成Electron应用程序的安装文件。 总结 使用VueElectron创建桌面社交应用程序是一个有趣的项目,可以学习到如何使用两个流行的技术来创建跨平台的应用程序。在该项目中,需要学习如何集成VueElectron,并使用ipcMain和ipcRenderer来处理主进程和渲染进程之间的通信。最后,使用electron-builder来构建和打包Electron应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值