1.前言

本节主要讲述Electron的环境搭建以及如何快速创建一个应用

官方文档

2.环境搭建

(1)安装node.js

(2)创建项目目录,初始化配置文件

//进入项目目录 并在此目录打开cmd窗口 执行以下代码
npm init //按照后续的提示 填写项目名称,作者等信息

(3)定义npm脚本命令和入口js文件

  • 在scripts节点中配置start属性,将来可使用 npm start/npm run start 命令启动项目
  • 在main节点中配置程序的入口js文件名称
{
"name": "my-electron-app",
"version": "1.0.0",
"description": "demo",
"main": "main.js",
"scripts": {
"start": "electron ."
},
"author": "",
"license": "MIT",
"devDependencies": {
"electron": "^13.1.7"
}
}

(4)下载安装Electron

npm下载electron的过程中会从github中下载一个包,由于github访问速度慢,可以先切换其镜像地址

快速安装:由于连接npm服务器比较慢,可以使用https://npm.taobao.org/mirrors/electron/1.4.3/electron-v1.4.3-win32-x64.zip 进行下载,下载后将其放到C:\Users\当前用户名.electron目录下,再执行npm install -g electron命令即可

npm config set electron_mirror https://npm.taobao.org/mirrors/electron/
npm install --save-dev electron

3.HTML文件编写

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<meta http-equiv="X-Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<title>Hello World!</title>
<!-- 引入页面js -->
<script src="./index.js"></script>
</head>
<body>
<h1 id="title">Hello World!</h1>
<!-- 以下的元素都定义id 方便js操作dom -->
<h3>
preload run time = <span id="preload-time"></span>
</h3>
<h3>
prenderer.js run time = <span id="renderer-time"></span>
</h3>
<h3>
We are using Node.js <span id="node-version"></span>
</h3>
<h3>
Chromium <span id="chrome-version"></span>
</h3>
<h3>
and Electron <span id="electron-version"></span>
</h3> </body>
</html>

4.入口文件编写

//main.js
//引入 app和BrowserWindow 模块
const { app, BrowserWindow } = require('electron')
//引入 path 模块
const path = require('path') //程序入口
app.whenReady().then(() => {
//程序就绪后 调用方法
createWindow()
}) //事件监听 关闭所有窗口时退出应用 (Windows & Linux)
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit()
}) //封装创建窗口的函数
function createWindow () {
//创建新窗口
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js'), //引入预加载的js
}
}) //事件监听 如果没有窗口打开则打开一个窗口 (macOS)
app.on('activate', function () {
if (BrowserWindow.getAllWindows().length === 0) createWindow()
}) //加载页面
win.loadFile('index.html') //打开控制台 快捷键ctrl + shfit + i
//win.webContents.openDevTools()
}

5.预加载js文件

预加载脚本与渲染器共享同一个全局 Window,因此在预加载脚本中既可以访问页面,操作Dom,还能访问原生的接口,此外,他还可以通过给window对象挂载原生的接口,使得渲染器(页面)就中就能直接调用原生接口

,但是为了安全考虑,需要使用contextBridge 模块来安全地实现交互,不得直接对window进行赋值

//引入contextBridge模块
const { contextBridge } = require('electron') //挂载数据到window中
contextBridge.exposeInMainWorld('title', '我是preload设定的标题')

在页面js中接收此字段进行渲染

<body>
<div id="app">
<div class="inner-box">
<h2>{{title}}</h2>
</div>
</div>
</body>
</html>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.13/vue.min.js"></script>
<script>
var title = window.title
new Vue({
el:"#app",
data:{
title:title
}
})
</script>

6.主进程与渲染进程进行交互

  • 主进程基于node.js运行,可以调用浏览器之外的接口
  • 渲染进程基于浏览器运行,可控制页面的渲染

6.启动项目

在项目目录中打开cmd命令,执行以下命令

npm start

执行结果:

7.自动刷新

electron-reloader这个插件的功能就像他的名字"reloader",当代码发生变动时自动刷新程序,在开发阶段十分有必要

  • 安装插件
npm i electron-reloader -S
  • 在主进程中引入插件
//main.js
const reloader = require('electron-reloader')
reloader(module)

8.打包

这里使用electron-packager进行打包

(1)下载安装最新版本的electron-packager,并添加到项目中

npm install --save-dev electron-packager

(2)查看打包命令:推荐进npm官网查看最新文档(其他论坛的帖子教程针对的可能是老版electron-packager,不适用最新的版本)当前版本的打包命令为:

electron-packager <sourcedir> <appname> --platform=<platform> --arch=<arch> [optional flags...]
命令 含义 例子
sourcedir 输出目录 建议使用 "." 代表在当前目录输出
appname 应该名称 随意设置,例如 myapp
platform 平台 window设置为"win32"
arch 32位?64位? 设置为"x86"

完整命令

electron-packager . myapp --platform=win32 --arch=x64

(3)设置脚本命令:定义npm脚本命令,方便直接调用这一段长命令 (packager字段),app版本和electron视实际情况填写

{
"name": "my-electron-app",
"version": "1.0.0",
"description": "",
"main": "main.js",
"scripts": {
"start": "electron .",
"packager": "electron-packager . myapp --platform=win32 --arch=x64 --app-version=1.0.0 --electron-version=13.1.7 --icon=ponyiiot.ico"
},
"author": "",
"license": "MIT",
"devDependencies": {
"@electron-forge/cli": "^6.0.0-beta.59",
"electron": "^13.1.7",
"electron-packager": "^15.3.0"
}
}

(4)进行打包

npm run packager

执行成功后,会在当前目录生成一个myapp-win32-x64文件夹

Electron(1) - 快速入门的更多相关文章

  1. 初探Electron,从入门到实践

    本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者.   在开始之前,我想您一定会有这样的困惑:标题里的Electron ...

  2. [易学易懂系列|rustlang语言|零基础|快速入门|(11)|Structs结构体]

    [易学易懂系列|rustlang语言|零基础|快速入门|(11)] 有意思的基础知识 Structs 我们今天来看看数据结构:structs. 简单来说,structs,就是用来封装相关数据的一种数据 ...

  3. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  4. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  5. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  6. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  7. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  8. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  9. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  10. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

随机推荐

  1. 合合信息推出国央企智能文档处理解决方案,AI赋能信创国产化

    信息时代,数字化转型已成为推动经济高质量发展的关键力量.国央企是国民经济的重要支柱,其数字化转型进程关乎着自身与产业链上下游企业的共同发展.文档的智能化处理可有效提升信息流转的效率.促进知识的沉淀与传 ...

  2. Go runtime 调度器精讲(五):调度策略

    原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 在 第四讲 我们介绍了 main goroutine 是如何运行的.其中针对 main goroutine 介绍了调度函数 schedule 是 ...

  3. Go runtime 调度器精讲(十一):总览全局

    原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 前面用了十讲介绍了 Go runtime 调度器,这一讲结合一些图在总览下 Go runtime 调度器. 1. 状态转换图 首先是 Gorou ...

  4. HTTP——请求数据格式

    请求数据格式   

  5. QT原理与源码分析之QT反射机制原理

    QT反射机制原理 本文将介绍QT反射机制创建QT对象实例的原理和流程以及源代码. 文章目录 QT反射机制创建QT对象实例 原理 流程 源码 QT反射机制创建QT对象实例 QT框架提供的基于元对象的反射 ...

  6. uniapp电子签名盖章实现详解

    项目开发中用到了电子签名.签好名的图片需要手动实现横竖屏旋转.并将绘制的签名图片放到pdf转换后的base64的图片上,可以手动拖动签名到合适的位置,最后合成签名和合同图片并导出.和以往一样,先发一下 ...

  7. Promise.all、race和any方法都是什么意思?

    // // 执行多个并行任务 const promiseAll = [ thenFs.readFile('./files/1.txt','utf8'), thenFs.readFile('./file ...

  8. kubernetes中pod的隔离策略

    配置容器级别的安全控制 使用宿主机的网络模式 可以通过设置pod的spec的hostNetwork参数为true开启容器的"host"network模式 spec: hostNet ...

  9. 云原生周刊:Kubernetes v1.27 发布 | 2023.4.17

    开源项目推荐 Palaemon Palaemon 是一个开源开发工具,用于监控 Kubernetes 集群的健康状况和资源指标并分析内存不足 (OOMKill) 错误. Gitkube Gitkube ...

  10. 云原生爱好者周刊:使用 GitOps 来动态管理 Grafana 的数据源

    文章推荐 使用 GitOps 来动态管理 Grafana 的数据源 通过 Grafana 的 Provisioning 特性,可以在 provisioning/datasources 目录下添加多个 ...