记electron-vue采坑

1,610 阅读2分钟

包版本

"electron-updater": "^4.2.4"

"electron": "^4.2.12"

"vue-electron": "^1.0.6"

使用vue init simulatedgreg/electron-vue my-project脚手架初始化项目时,electron版本为2+,window打包后生成的应用在window7上会有兼容性问题,打不开应用,升级4+版本

windows和mac打包

  • windows电脑仅可打包windows版本应用、mac电脑仅可打包mac版本应用
  • 第一次打包时可能会遇到资源下载失败的情况,此时手动下载对应资源,然后拷贝到各平台对应的目录:
Linux: $XDG_CACHE_HOME or ~/.cache/electron/
MacOS: ~/Library/Caches/electron/
Windows: %LOCALAPPDATA%/electron/Cache or ~/AppData/Local/electron/Cache/
  • windows打包出exe安装包,在package.json中的build字段中配置nsis,优化安装体验
"nsis": {
  "allowToChangeInstallationDirectory": true, // 是否可以自定义安装目录
  "oneClick": false, // 是否一键安装
  "perMachine": false // 询问为哪个用户安装
}
  • 打包测试环境安装包,新增一个环境变量process.env.NODE_ENV_PRO,并在webpack中通过webpack.DefinePlugin将脚本中的环境变量设置到模块中
// 通过cross-env设置环境变量
"build:win": "cross-env NODE_ENV_PRO=pro node .electron-vue/build.js && electron-builder --win --ia32",
     // webpack.renderer.config.js及webpack.renderer.config.js中增加修改代码
     new webpack.DefinePlugin({
-      'process.env.NODE_ENV': '"production"'
+      'process.env.NODE_ENV': '"production"',
+      'process.env.NODE_ENV_PRO': JSON.stringify(process.env.NODE_ENV_PRO)
     }),

自动更新

  • 使用electron-updater
  • 在package.json中的build字段中配置publish,用来在打包时生成.yml文件
"publish": [
  {
    "provider": "generic", // 服务器提供商 也可以是GitHub等等
    "url": "http://127.0.0.1:8080/zip/" // 静态服务器地址
  }
]
  • 将打包生成的.dmg、latest-mac.yml(mac)或者.exe、latest.yml(windows)放在服务器的zip目录
  • main.js中添加如下代码
import { autoUpdater } from 'electron-updater'
autoUpdater.autoDownload = false
autoUpdater.setFeedURL('http://127.0.0.1:8080/zip/') // 静态服务地址
autoUpdater.checkForUpdates()
<!--对应事件-->
autoUpdater.on('error', function () {
    // 检查更新出错
})
autoUpdater.on('checking-for-update', function () {
    // 正在检查更新
})
autoUpdater.on('update-available', function (info) {
    // 有新版本
})
autoUpdater.on('update-not-available', function (info) {
    // 没有新版本
})
autoUpdater.on('download-progress', function (progressObj) {
   // 新版本下载进度
})
autoUpdater.on('update-downloaded', function (event, releaseNotes, releaseName, releaseDate, updateUrl, quitAndUpdate) {
  autoUpdater.quitAndInstall() // 下载完成后立即退出并更新
})