前言

前端开发桌面程序这个概念已经出现有一段时间了,这项技术也已经走向成熟,Github上nw和光electron的star就差不多有10w颗星了,github也衍生出了很多开源的桌面项目俨然成了一个热门项目。既然这么热,那就一个字:学。

本文主要帮助js基础比较薄弱,又没有接触过electron的同学更好的学习electron,文中有什么不足之处或者错误,欢迎指出。

electron 安装

npm命令安装electron库

npm install electron --save-dev --save-exact

传送门:electron官方Github

如何快速上手electron

刚接触一个新东西,难免一头雾水,如果多看一点相关的文章势必会有一个方向感,去更好的上手新东西。上手electron,官方提供了一个非常好的快速上手实例。

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

这个仓库给我们初始化了一个electron项目,结构非常纯净,克隆下来你就可以直接改造成自己的项目。

electron API

官方api(英文) 官方docs

翻译API(版本有偏差)翻译版docs

国内也有翻译版的API文档,但是不能保证是最新的,使用时一定要看好自己的版本和翻译版。使用翻译版API。同时可以看看官方的更新日志,看看有什么新功能。官方社区有很多有用的工具,开始学习欠务必了解,涉及到项目开发调试和项目构建。这里推荐一个仓库,这个仓库收录了一些比较常用的API,克隆后跑起来你就可以快速查看这些常用API

git clone https://github.com/fuchao2012/zh-cn-Electron-API-Demoscd zh-cn-Electron-API-Demosnpm installnpm start

electron项目和web项目的区别

electron核心我们可以分成2个部分,主进程和渲染进程。主进程连接着操作系统和渲染进程,可以把她看做页面和计算机沟通的桥梁。渲染进程就是我们所熟悉前端环境了。只是载体改变了,从浏览器变成了window。传统的web环境我们是不能对用户的系统就行操作的。而electron相当于node环境,我们可以在项目里使用所有的node api 。

简单理解:
给web项目套上一个node环境的壳。

相比web项目,桌面项目多了一个进程

项目迁移

如果要迁移项目到web端,就需要把项目中的electron提供的API和node的API完全剥离出来,只能遗留web的代码,比如 node fs模块,electron提供ipc 模块,都需要剥离。

如果你一开始就打算双端程序,在开始写代码时应该对web代码和elecctron的代码进行分离,以便后期的迁移。

项目开发打包工具

这里推荐devtron 和 electron-builder 2个开发工具,配置简单,功能强大。这里不详细介绍工具的使用。官方都有非常好的文档。

传送门: devtron

传送门: electron-builder

社区还有很多好用的工具,可以自行查阅,选择使用。

传送门:community

ps: electron打包的时候需要下载一个版本库,速度会非常慢,可以通过淘宝镜像源解决

>就是在你的命令前加ELECTRON_MIRROR=https://npm.taobao.org/mirrors/electron/及空格$ ELECTRON_MIRROR=https://npm.taobao.org/mirrors/electron/ npm run build

Electron介绍差不多就到这里,框架有了。然而一大堆配置头都晕了,从0-1非常困难,我们不妨从1到0,可以先找个模版做个小demo感受一下electron的魅力,在做项目中学习electron。

传送门: react模版

传送门: vue模版

electron-vue经验分享

官方文档中作者提供了很多对开发有用的东西,我推荐学习的同学都通读一遍

传送门: electron-vue文档

electron-vue,作者为我们封装好了一个基于vue框架的脚手架,包括electron所有基本的开发构建工具 和vue配套的请求,路由以及vuex等插件。
通过脚手架我们可以直接进入开发阶段,开发的同时,去了解electron的工作机制,之后再开始深入去理解她更深层次的代码逻辑。 先走形,再走心。

不迁移项目就可以打包双版本的可行方案

作者并未提供web开发的支持,但是提供了非常好的web打包支持。
只要写好逻辑我们可以不用迁移项目就可以打包桌面项目和web项目。

process.env.IS_WEB是暴露的一个全局变量,我们可以在渲染进程中获取,项目在electron环境下,返回false。否则为true。于此,我们可以通过设置她的值来达到web dev的效果,也可以处理不同环境的不同逻辑,一些示例:

打开新窗口的“最佳”做法

因为是webpack配置,入口只有index.html ,所以打开新窗口,一般会再配置一个入口。其实还有一种更佳的做法。

>>> 主进程 定义好监听事件
ipc.on('newPage', function(e) {const modalPath = process.env.NODE_ENV === 'development'? 'http://localhost:9080/#/newPage': `file://${__dirname}/index.html#newPage`let win = new BrowserWindow({width: 1024,height: 724,webPreferences: {webSecurity: false}})win.on('close', function() {win = null})win.loadURL(modalPath)})>>> router/index.js   定义路由
// import 你的新页面  .vue 文件{path: '/newPage',name: 'newPage',component: newPage,  }》》》配置完成 任意进程调用ipc.send('newPage')   完美解决

页面之间的数据共享问题

electron项目可以通过本地数据库去做一个数据存储,这样你就可以在任何需要的地方调用这份数据。我的做法:

1.首先选择一个 本地数据库插件 ,我用的 nedb

>>> 新建db.js
import Datastore from 'nedb'
import path from 'path'
import { remote } from 'electron'const db = {tableData: new Datastore({filename: path.join(remote.app.getPath('userData'), '/tableData.db')}),chartData: new Datastore({filename: path.join(remote.app.getPath('userData'), '/chartData.db')}),cfgData: new Datastore({filename: path.join(remote.app.getPath('userData'), '/cfgData.db')}),
}export default {db
}>>>>  引入数据库
/***  本地数据库导入*  web模式注释该代码*/
import db from '../db'
Vue.prototype.$db = db.db>>>> 任意页面调用数据库this.$db.chartData.loadDatabase();this.$db.chartData.find({},  (err, docs)=> {
//                            console.log(docs);if(docs && docs.length > 0){this.totalOptionList = docs;}});

Electron前端开发桌面程序--入门篇相关推荐

  1. 自学Web前端开发学习讲解 – 入门篇

    很多人都对web前端感兴趣,这一期主要聊关于如何入门学习Web前端开发的过程分享,此篇适合想入门初学者,大佬就不用看了.主要内容是以本人这一路自学web前端的一些经验和建议,学习哪些知识,以及如何正确 ...

  2. electron 前端开发桌面应用

    electron是由Github开发,是一个用Html.css.JavaScript来构建桌面应用程序的开源库,可以打包为Mac.Windows.Linux系统下的应用. 快速开始 接下来,让代码来发 ...

  3. 前端微信小程序实战篇

    电商底部导航栏的制作 我想大家对电商一定不陌生,一般电商的底部导航栏有以下几个首页.分类.购物车.个人中心. app.json是用来配置page路径以及导航栏属性的,那我们要做首页.分类.购物车.个人 ...

  4. 前端开发桌面终极工具(FastStone Capture)推荐(转)

    前端开发桌面终极工具(FastStone Capture)推荐 Posted on : 26-03-2009 | By : 愚人码头 | In : 前端工具 2 FastStone Capture是一 ...

  5. [转载] flutter开发桌面程序_在开始使用Flutter开发应用程序之前要了解的5条提示

    参考链接: Python中的桌面通知程序 flutter开发桌面程序 1.始终取消您的流订阅: (1. Always cancel your stream subscription:) When I ...

  6. 要web开发精品教程吗?免费一百期连讲的那种-逐浪CMS前端开发100期入门教程全面开放

    要web开发精品教程吗?免费无广告一百期连讲的那种-逐浪CMS前端开发100期入门教程全面开放 大师主讲 经验难得 由逐浪CMS首席架构师发哥老师,亲自主理讲解. 历时一年精心打造, 汇聚了互联网诞生 ...

  7. 你也可以玩转Skype -- 基于Skype API开发外壳程序入门

    原文:你也可以玩转Skype -- 基于Skype API开发外壳程序入门 Skype是目前这个星球上最厉害的IM+VOIP软件,Skype现在已经改变了全球2.8亿人的生活方式.你,值得拥有! :) ...

  8. 【Qt】Qt 开发桌面程序 ( Qt 版本 5.14.2 | 编辑 Qt 桌面按钮控件 | 修改按钮文本 | 为按钮添加点击事件 | 系统调用 | 去掉系统调用命令窗口 )

    文章目录 一.添加按钮控件 二.修改按钮文本 三.为按钮添加点击事件 ( 弹出对话框 ) 四.为按钮添加点击事件 ( 打开记事本 ) 五.为按钮添加点击事件 ( 打开计算器 ) 六.去掉系统调用时弹出 ...

  9. 云小课|DGC数据开发之基础入门篇

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:欢迎来到DGC数据 ...

最新文章

  1. 15篇论文全面概览BERT压缩方法
  2. Endnote在latex中的应用的两种方法
  3. oracle的数据库由,Oracle数据库系统主要由Oracle______组成。
  4. 在linux vi中激活鼠标中键,实现滚动换行
  5. JQueryEasyUI datagrid框架的基本使用
  6. java基础----对象的创建过程(初始化、析构、清理)
  7. SystemV 共享内存
  8. 什么是html阅读,HTML 介绍
  9. 互联网日报 | 微信聊天上线“超链接”功能;B站月付费用户达1500万;优客工场正式登陆纳斯达克...
  10. 使用毫秒单位来进行计算程序执行时间
  11. winxp升级win7教程_PR CC 2015下载和安装教程
  12. Fibonacci法与黄金分割法
  13. 有50 家人家,每家一条狗。有一天警察通知
  14. DFS,BFS和迭代加深的联系与区别
  15. Steam教育对教培机构的重要影响力
  16. Chrome游戏《Boxel Rebound》可自制赛道的弹跳小方块
  17. 移动开发——问卷调查
  18. SAP FICO顾问心得
  19. Baidu某系统后台存在sql注入漏洞
  20. OpenSees 源码编译过程

热门文章

  1. socket关闭close和shutdown
  2. 【520专属程序员的浪漫】--女神都无法拒绝的表白代码
  3. linux运维之磁盘利用率100%教你做人
  4. 统计学 - 数理统计与应用统计的区别
  5. 墨西哥认可的认证机构有哪些
  6. 中鸣循迹机器人_基于智能i5的寻迹机器人的设计
  7. 爱奇艺qsv视频怎样转换成MP4
  8. 2018网易游戏笔试题
  9. 我要转行Linux驱动开发了,驱动开发的工作是什么样的情况,希望大神给点建议,也希望大家给我一点鼓励
  10. 文字翻译软件有哪些?这三款软件好用又方便