Electron(1) - 快速入门
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) - 快速入门的更多相关文章
- 初探Electron,从入门到实践
本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在开始之前,我想您一定会有这样的困惑:标题里的Electron ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(11)|Structs结构体]
[易学易懂系列|rustlang语言|零基础|快速入门|(11)] 有意思的基础知识 Structs 我们今天来看看数据结构:structs. 简单来说,structs,就是用来封装相关数据的一种数据 ...
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Mybatis框架 的快速入门
MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...
- grunt快速入门
快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
随机推荐
- CSS – rem, em, px
参考: 掘金 – 如何更愉快地使用em -- 别说你懂CSS相对单位 绝对值 vs 相对值 px, cm, mm 这些是绝对值. rem, em 是相对值. 绝对值就是最终的尺寸. 相对值的意思是它不 ...
- Nuxt Kit 自动导入功能:高效管理你的模块和组合式函数
title: Nuxt Kit 自动导入功能:高效管理你的模块和组合式函数 date: 2024/9/14 updated: 2024/9/14 author: cmdragon excerpt: 通 ...
- 新题速看!2021阿里、腾讯、字节都在问的SQL数据库笔试题及答案都给你整理好啦!
前 言 2021到了最后一个月份,年后肯定有蛮多小伙伴需要跳槽换工作,但对于年限稍短的软件测试工程师,难免会需要进行笔试,而在笔试中,基本都会碰到一道关于数据库的大题,今天这篇文章呢,就收 ...
- 没时间做获取天气的实验 三分钟! 给您看清如何通过HTTP GET请求 获取天气预报
1. 注册心知天气账号,获取私钥 下面这篇文章是图示讲解的,好东西,何不转载为快? http://www.taichi-maker.com/homepage/iot-development/iot-p ...
- 如何创建免费版本的ABP分离模块?
如何创建免费版本的ABP分离模块? 由于ABP最近官方大改革,我们打开ABP.IO 官方会发现通过Cli创建模板的时候不能创建Trered类型的了 就是创建一个分层的解决方案,其中Web和Http A ...
- springboot起步依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...
- uniapp中前端canvas合成图片使用详解
项目开发中用到了定位打卡,保存当前位置到上传图片的功能.刚开始想着后端人员合成,前端上传经纬度.位置信息和图片就OK,没想到后端人员以使用项目中现有的组件为借口,让前端合成图片,造成前端工作量大增,再 ...
- electron 菜单选项 - 隐藏,设置菜单
隐藏菜单 const { app, Menu, session } = require('electron'); /*隐藏electron的菜单栏*/ Menu.setApplicationMenu( ...
- C#中的原始字符串
// 原始字符串使用 三个引号(至少三对)包裹,ps: 引号单独占用一行 // 原始字符串使用变量需要加两个 $$"""{变量}""" st ...
- Vue中mixins(混入)的介绍和使用
为什么引进 mixins 随着项目的开发,组件越来越多 ,这就导致了在各个组件中需要编写功能相同的代码段,重复地定义这些相同的属性和方法,导致代码地冗余,还不利于后期代码的维护 混入mixins 的创 ...