作者:xiangzhihong\
起源:segmentfault.com/a/1190000021376934
尽管 B/S 是目前开发的支流,然而 C/S 依然有很大的市场需求。受限于浏览器的沙盒限度,网页利用无奈满足某些场景下的应用需要,而桌面利用能够读写本地文件、调用更多系统资源,再加上 Web 开发的低成本、高效率的劣势,这种跨平台形式越来越受到开发者的青睐。
Electron 是一个基于 Chromium 和 Node.js,应用 HTML、CSS 和 JavaScript 来构建跨平台利用的跨平台开发框架,兼容 Mac、Windows 和 Linux。目前,Electron 曾经创立了包含 VScode 和 Atom 在内的大量利用。
环境搭建
创立 Electron 跨平台利用之前,须要先装置一些罕用的工具,如 Node、vue 和 Electron 等。
装置 Node
进入 Node 官网下载页 http://nodejs.cn/download/,而后下载对应的版本即可,下载时倡议下载稳固版本。如果装置 Node 应用 Homebrew 形式,倡议装置时将 npm 仓库镜像改为淘宝镜像,如下所示。
npm config set registry http://registry.npm.taobao.org/
或者
npm install -g cnpm --registry=https://registry.npm.taobao.org
装置 / 降级 vue-cli
先执行以下命令,确认下本地装置的 vue-cli 版本。
vue -V
如果没有装置或者不是最新版,能够执行以下命令装置 / 降级。
npm install @vue/cli -g
装置 Electron
应用如下命令装置 Electron 插件。
npm install -g electron
或者
cnpm install -g electron
为了验证是否装置胜利,能够应用如下的命令。
electron --version
创立运行我的项目
Electron 官网提供了一个简略的我的项目,能够执行以下命令将我的项目克隆到本地。
git clone https://github.com/electron/electron-quick-start
而后在我的项目中执行如下命令即可启动我的项目。
cd electron-quick-start
npm install
npm start
启动后我的项目的成果如下图。
除此之外,咱们能够应用 vue-cli 脚手架工具来创立我的项目。
vue init simulatedgreg/electron-vue
而后依据上面的提醒一步步选中选项即可创立我的项目,如下所示。
而后,应用 npm install 命令装置我的项目所须要的依赖包,装置实现之后,能够应用 npm run dev 或 npm run build 命令运行 electron-vue 模版应用程序,运行成果如下图所示。
Electron 源码目录
Electron 的源代码次要根据 Chromium 的拆分约定被拆成了许多局部。为了更好地了解源代码,您可能须要理解一下 Chromium 的多过程架构。
Electron 源码目录构造和含意具体如下:
Electron
├──atom - Electron 的源代码
| ├── app - 零碎入口代码
| ├── browser - 蕴含了主窗口、UI 和其余所有与主过程无关的货色,它会通知渲染过程如何治理页面
| | ├── lib - 主过程初始化代码中 JavaScript 局部的代码
| | ├── ui - 不同平台上 UI 局部的实现
| | | ├── cocoa - Cocoa 局部的源代码
| | | ├── gtk - GTK+ 局部的源代码
| | | └── win - Windows GUI 局部的源代码
| | ├── default_app - 在没有指定 app 的状况下 Electron 启动时默认显示的页面
| | ├── api - 主过程 API 的实现
| | | └── lib - API 实现中 Javascript 局部的代码
| | ├── net - 网络相干的代码
| | ├── mac - 与 Mac 无关的 Objective-C 代码
| | └── resources - 图标,平台相干的文件等
| ├── renderer - 运行在渲染过程中的代码
| | ├── lib - 渲染过程初始化代码中 JavaScript 局部的代码
| | └── api - 渲染过程 API 的实现
| | └── lib - API 实现中 Javascript 局部的代码
| └── common - 同时被主过程和渲染过程用到的代码,包含了一些用来将 node 的事件循环
| | 整合到 Chromium 的事件循环中时用到的工具函数和代码
| ├── lib - 同时被主过程和渲染过程应用到的 Javascript 初始化代码
| └── api - 同时被主过程和渲染过程应用到的 API 的实现以及 Electron 内置模块的基础设施
| └── lib - API 实现中 Javascript 局部的代码
├── chromium_src - 从 Chromium 我的项目中拷贝来的代码
├── docs - 英语版本的文档
├── docs-translations - 各种语言版本的文档翻译
├── spec - 自动化测试
├── atom.gyp - Electron 的构建规定
└── common.gypi - 为诸如 `node` 和 `breakpad` 等其余组件筹备的编译设置和构建规定
平时开发时,须要重点关注的就是 src、package.json 和 appveyor.yml 目录。除此之外,其余须要留神的目录如下:
- script – 用于诸如构建、打包、测试等开发用处的脚本
- tools – 在 gyp 文件中用到的工具脚本,但与 script 目录不同,该目录中的脚本不应该被用户间接调用
- vendor – 第三方依赖项的源代码,为了避免人们将它与 Chromium 源码中的同名目录相混同,在这里咱们不应用 third_party 作为目录名
- node_modules – 在构建中用到的第三方 node 模块
- out – ninja 的长期输入目录
- dist – 由脚本 script/create-dist.py 创立的长期公布目录
- external_binaries – 下载的不反对通过 gyp 构建的预编译第三方框架
利用工程目录
应用 electron-vue 模版创立的 Electron 工程构造如下图。
和前端工程的我的项目构造相似,Electron 我的项目的目录构造如下所示:
- electron-vue:Electron 模版配置。
- build:文件夹,用来寄存我的项目构建脚本。
- config:中寄存我的项目的一些根本配置信息,最罕用的就是端口转发。
- node_modules:这个目录寄存的是我的项目的所有依赖,即 npm install 命令下载下来的文件。
- src:这个目录下寄存我的项目的源码,即开发者写的代码放在这里。
- static:用来寄存动态资源。
- index.html:则是我的项目的首页、入口页,也是整个我的项目惟一的 HTML 页面。
- package.json:中定义了我的项目的所有依赖,包含开发时依赖和公布时依赖。
对于开发者来说,90% 的工作都是在 src 中实现,src 中的文件目录如下。
Electron 应用程序分成三个根底模块:主过程、过程间通信和渲染过程。
1、主过程
Electron 运行 package.json 的 main 脚本(background.js)的过程被称为主过程。在主过程中运行的脚本通过创立 web 页面来展现用户界面。一个 Electron 利用总是有且只有一个主过程。
2、渲染过程
因为 Electron 应用了 Chromium 来展现 Web 页面,所以 Chromium 的多过程架构也被应用到。每个 Electron 中的 Web 页面运行在它本人的渲染过程中。在一般的浏览器中,Web 页面通常在一个沙盒环境中运行,不被容许去接触原生的资源。然而 Electron 容许用户在 Node.js 的 API 反对下能够在页面中和操作系统进行一些底层交互。
3、主过程与渲染过程通信
主过程应用 BrowserWindow 实例创立页面。每个 BrowserWindow 实例都在本人的渲染过程里运行页面。当一个 BrowserWindow 实例被销毁后,相应的渲染过程也会被终止。主过程治理所有的 Web 页面和它们对应的渲染过程。每个渲染过程都是独立的,它只关怀它所运行的 Web 页面。
src 目录构造
在 Electron 目录中,src 会包蕴含 main 和 renderer 两个目录。
main 目录
main 目录会蕴含 index.js 和 index.dev.js 两个文件。
- index.js:应用程序的主文件,electron 也从这里启动的,它也被用作 webpack 产品构建的入口文件,所有的 main 过程工作都应该从这里开始。
- index.dev.js:此文件专门用于开发阶段,因为它会装置 electron-debug 和 vue-devtools。个别不须要批改此文件,但它能够扩大开发的需要。
渲染过程
renderer 是渲染过程目录,平时我的项目开发源码的寄存目录,蕴含 assets、components、router、store、App.vue 和 main.js。
assets:assets 下的文件如(js、css)都会在 dist 文件夹上面的我的项目目录别离合并到一个文件外面去。components:此文件用于寄存利用开发的组件,能够是自定义的组件。router:如果你理解 vue-router,那么 Electron 我的项目的路由的应用形式和 vue-router 的应用形式相似。modules:electron-vue 利用 vuex 的模块构造创立多个数据存储,并保留在 src/renderer/store/modules 中。
相干案例
https://github.com/xiaozhu188…
https://github.com/SmallRural…
近期热文举荐:
1.1,000+ 道 Java 面试题及答案整顿 (2021 最新版)
2. 别在再满屏的 if/ else 了,试试策略模式,真香!!
3. 卧槽!Java 中的 xx ≠ null 是什么新语法?
4.Spring Boot 2.5 重磅公布,光明模式太炸了!
5.《Java 开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞 + 转发哦!