(一)Electron入门,写一个看图客户端

Electron介绍

2014年7月,由新西兰政府和硅谷共同赞助的火箭实验室(Rocket Lab)宣布成功研制出名为“电子”(Electron)的小型卫星专用运载火箭。。。。
尴尬,,,百度百科是这样写的,然而我们接下来要入门的的不是这个,而是如何优雅的写一个客户端软件,就像GitHub 的 Atom ,微软的 Visual Studio Code都是使用Electron开发的。

步入正题 ,Electron提供了丰富的本地(操作系统)的API,使你能够使用纯JavaScript来创建桌面应用程序。与其它各种的Node.js运行时不同的是Electron专注于桌面应用程序而不是Web服务器。Electron 可以让你使用纯 JavaScript 调用丰富的原生 APIs 来创造桌面应用。你可以把它看作是专注于桌面应用而不是 web 服务器的,io.js 的一个变体。这不意味着 Electron 是绑定了 GUI 库的 JavaScript。相反,Electron 使用 web 页面作为它的 GUI,所以你能把它看作成一个被 JavaScript 控制的,精简版的 Chromium 浏览器。

环境准备

为了打造一个Electron桌面程序的开发环境,我们需要安装好Node.js、npm(建议搞成淘宝的镜像cnpm)、一个顺手的代码编辑器以及对你的操作系统命令行客户端有基本了解。
关于node和npm的安装,这里先不做介绍,可以自己去查询,建议安装新版本。

# 检查node版本
node -v

# 检查npm版本
npm -v

我的版本如下:


版本.png

npm设置淘宝镜像:


# 1.这样配置以后npm install都是用淘宝的镜像下载资源
npm config set registry https://registry.npm.taobao.org

# 2.使用cnpm 代替npm,以后用的时候还可以用npm,如果想使用淘宝镜像下载,就用cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org

坑点:设置的时候以及使用的时候建议使用管理员方式打开cmd,不然很多地方会出现权限不足报错,比较恶心


image.png

创建应用

创建一个空文件夹 my-app:


image.png

管理员方式运行CMD,打开这个目录:

image.png

从开发的角度来看, Electron application 本质上是一个 Node. js 应用程序。 与 Node.js 模块相同,应用的入口是 package.json 文件。 一个最基本的 Electron 应用一般来说会有如下的目录结构:

my-app/
├── package.json
├── index.js
└── index.html

然后从该文件夹运行npm init,生成package.json:

npm init

接下来就会出现这么多东西,并提示你写项目名,描述,作者什么的一大堆东西,为了省事直接回车默认就行了:

This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (my-app)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to D:\electron\my-app\package.json:

{
  "name": "my-app",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}
image.png

然后就会有一个这样的文件生成了:


image.png

image.png

然后再scripts中添加/修改start为"electron ."

"scripts": {
    "start": "electron ."
  }
image.png

接下来安装electron:

# 你要是不设置淘宝镜像的话下载贼慢
cnpm install --save-dev electron

然后就会这样:

D:\electron\my-app>cnpm install --save-dev electron
√ Installed 1 packages
√ Linked 82 latest versions
[1/2] scripts.postinstall electron@8.2.0 › @electron/get@1.9.0 › global-agent@2.1.8 › core-js@^3.6.4 run "node -e \"try{require('./postinstall')}catch(e){}\"", root: "D:\\electron\\my-app\\node_modules\\_core-js@3.6.4@core-js"
Thank you for using core-js ( https://github.com/zloirock/core-js ) for polyfilling JavaScript standard library!

The project needs your help! Please consider supporting of core-js on Open Collective or Patreon:
> https://opencollective.com/core-js
> https://www.patreon.com/zloirock

Also, the author of core-js ( https://github.com/zloirock ) is looking for a good job -)

[1/2] scripts.postinstall electron@8.2.0 › @electron/get@1.9.0 › global-agent@2.1.8 › core-js@^3.6.4 finished in 218ms
[2/2] scripts.postinstall electron@* run "node install.js", root: "D:\\electron\\my-app\\node_modules\\_electron@8.2.0@electron"
√ Run 2 scriptsstinstall electron@* finished in 6s
deprecate electron@8.2.0 › extract-zip@1.7.0 › mkdirp@^0.5.4 Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
Recently updated (since 2020-03-23): 4 packages (detail see file D:\electron\my-app\node_modules\.recently_updates.txt)
√ All packages installed (87 packages installed from npm registry, used 8s(network 2s), speed 125.68kB/s, json 83(216.68kB), tarball 0B)

看下my-app目录,就会多一个node_modules:


image.png

接下来创建index.js:

const { app, BrowserWindow } = require('electron')

function createWindow () {   
  // 创建浏览器窗口
  let win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true
    }
  })

  // 加载index.html文件
  win.loadFile('index.html')
}

app.whenReady().then(createWindow)

最后,创建你想展示的 index.html:

<html>
  <head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
    <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
  </head>
  <body>
    <h1>Hello World!</h1>
    <p>这是我的第一个app,哈哈</p>
  </body>
</html>
image.png

最最最后,执行命令启动 npm start:

npm start
image.png

完成啦,你会看到弹出来一个程序,这就是你的hello world:


image.png

打包生成exe程序

最最最最最后,当然是打包生成可以点击就执行的程序咯,找一个自己喜欢的ico当做app图标,放到根目录下:


image.png

然后执行:

electron-packager . app --platform=win32 --arch=x64 --icon=icon.ico --out=./out --asar --app-version=0.0.1
electron-packager <location of project> <name of project> <platform> <architecture> <electron version> <optional options>

参数说明: 
* location of project:项目所在路径 
* name of project:打包的项目名字 
* platform:确定了你要构建哪个平台的应用(Windows、Mac 还是 Linux) 
* architecture:决定了使用 x86 还是 x64 还是两个架构都用 
* electron version:electron 的版本 
* optional options:可选选项

执行这个的时候特别的慢,因为镜像的问题,因为下载源默认的还是是github,所以设置一下:

set ELECTRON_MIRROR=https://npm.taobao.org/mirrors/electron/
# 8.2.0是我的版本号
set ELECTRON_CUSTOM_DIR=8.2.0

然后再执行,这样就比较快了:

electron-packager . app --platform=win32 --arch=x64 --icon=icon.ico --out=./out --asar --app-version=0.0.1

打开my-app目录,你会发现多了一个out文件夹:


image.png

image.png

OK,您的hello world以及打包成功,请查收

下一步,我们一起来使用vue和饿了么来一下写界面
看下以及完成的作品吧:


image.png

我只是一个业余的前端,可能有地方写的不准确,只是写服务端写的太无聊了,不是看不完的日志就是处理不完的数据,偶尔写点这些东西还是挺有意思的。

有不懂的地方或者其他问题请联系我: http://litao1104.cn/

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

推荐阅读更多精彩内容