Electron常见问题

Electron是使用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库.应公司业务需求,开发一款window桌面端应用。第一次接触Electron遇到很多坑,特此记录分享。

使用的工具

  1. electron-vue作为整个应用的开发框架,结合了vue和Electron
  2. 常见打包工具有electron-builerelectron-packager, 本应用使用的是拥有更强大的功能的electron-builder,新上手的同学可以使用electron-packager生成简单的exe程序
  3. 本地数据库为了方便兼容其他语言,选择了sqlite,而非常见的lowdb,同时为了保证一定的加密效果,最终选择了@journeyapps/sqlcipher, 相比普通sqlite这个包使用了SQLCiphe加密
  4. 其他前端开发工具选择vue全家桶vue-routervuexaxioselement-ui

Electron 安装失败问题

参考官方文档 1
https://electronjs.org/docs/tutorial/installation#%E6%95%85%E9%9A%9C%E6%8E%92%E6%9F%A5

electron-vue 常见问题

参考文档:https://simulatedgreg.gitbooks.io/electron-vue/content/cn/faqs.html

electron-builder配置

{
  "build": {
    "productName": "wcdAssistor",
    "appId": "727438548@qq.com",
    "directories": {
      "output": "build"
    },
    "files": [
      "dist/electron/**/*"
    ],
    "extraResources": [
      "depend/**/*"
    ],
    // 核心打包时的配置
    "dmg": {
      "contents": [
        {
          "x": 410,
          "y": 150,
          "type": "link",
          "path": "/Applications"
        },
        {
          "x": 130,
          "y": 150,
          "type": "file"
        }
      ]
    },
    "mac": {
      "icon": "static/icons/256x256.png"
    },
    "win": {
      "icon": "static/icons/256x256.png", // window下应用的图标
      "legalTrademarks": "58Assistor"
    },
    "linux": {
      "icon": "static/icons"
    },
    "nsis": {
      "oneClick": false, // 是否一键安装,不可更改目录等选项,默认为true
      "perMachine": true,
      "allowElevation": true, // 是否允许权限提升
      "allowToChangeInstallationDirectory": true, // 是否允许更改安装路径
      "createDesktopShortcut": true, // 是否创建桌面图标
      "runAfterFinish": true,  // 安装完成请求运行
      "shortcutName": "wcd助手", // 桌面图标名称
      "installerIcon": "./static/icons/icon.ico", // 安装包图标
      "uninstallerIcon": "./static/icons/icon.ico" //卸载程序图标
    },
    "publish": [
      {
        "provider": "generic", // 自定义更新包路径
        "url": "http://wucd.top/xw_update/" // 更新包所在地址
      }
    ]
  }
}

其他文档:https://github.com/eyasliu/blog/issues/22

首次build失败的问题

找到报错位置为下载失败,需要手动下载文件到~/AppData/Local/electron-builder/cache下相应目录,比如最终我的目录结构为:

# 7z文件为手动下载的文件,然后解压到同级目录,解压后7z文件可以删除,但我没删除
+-- xxx/cache
    +-- nsis
        +-- nsis-3.0.31
            +-- 好多的文件
        +-- nsis-resources-3.3.0
            +-- 好多的解压后的文件
        +-- nsis-3.0.3.1.7z
        +-- nsis-resources-3.3.0.7z
    +-- winCodeSign
        +-- winCodeSign-2.1.0
            +-- 解压的文件
        +-- winCodeSign-2.1.0.7z

electron-builder 更新模块出错的问题

出现A complete solution to package and build a ready for distribution Electron app with "auto update" support out of the box...的问题
electron-vue 不适用于新版本的electron-builder中的autoUpdate模块,需要手动安装autoUpdate到3.0.0版本,注意要装在devDependices里,否则会出现要求最低版本为4.0.0的错误提示

sqlite使用失败的问题

sqlite安装过程有许多坑,这里使用的是带有一定加密性的@journeyapps/sqlcipher, 它的所需环境和sqlite类似,下面的步骤同样适用于sqlite的使用

  1. 配置window下编译环境
npm install windows-build-tools -g
  1. 检测当前使用的electron版本
electron --version

比如我的是2.0.4

  1. 安装sqlite
cnpm  install   sqlite3@latest   --build-from-source   --runtime=electron --target=2.0.4
--dist-url=https://atom.io/download/electron --save

!注意 这里一定使用cnpm, npm运行会失败,即使翻墙后也会失败,所以务必使用cnpm

electron-vue 使用vuex失效的问题

使用electron-vue创建项目并使用vuex, 有可能出现在开发web时正常使用的方法,在这里失效的问题,这可能是使用vuex-electron的缘故。vuex-electron主要用作在多个进程中共享数据,解决方法可任选其一

  1. 如果没有多个进程的场景,可以去掉vuex-electron的使用,单独使用vuex, 或者在store/index.js中去掉createSharedMutations的使用
import Vue from 'vue'
import Vuex from 'vuex'
 ​// 去掉createSharedMutations的引用
import {createPersistedState/**, createSharedMutations */  } from 'vuex-electron'
 ​
import modules from './modules'
 ​
Vue.use(Vuex)
 
export default new Vuex.Store({
   modules,
   plugins: [
     createPersistedState(),
     createSharedMutations()  // 注释掉这行行代码
   ],
   strict: process.env.NODE_ENV !== 'production'
})
  1. 如果确实有多进程的应用场景,需要用到vuex-electron可以使用以下方法
    源目录/src/main/index.js中开头加上store的引用即 import '../renderer/store'

总结

作为首次尝试Electron开发项目,在整个开发过程中遇到的坑远远不止这些,这里不再一一列举。如果大家在开发中遇到相关问题,欢迎一起讨论。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容