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. vuejs怎样封装一个插件(以封装vue-toast为例扩展)

    插件介绍 插件通常会为 Vue 添加全局功能.插件的范围没有限制--一般有下面几种: 1.添加全局方法或者属性,如: vue-custom-element 2.添加全局资源:指令/过滤器/过渡等,如  ...

  2. 小tips:vue2中broadcast和dispatch的实现

    /* * broadcast 事件广播 * @param {componentName} 组件名称 * @param {eventName} 事件名 * @param {params} 参数 * 遍历 ...

  3. Transformer应用于时序任务:综述《Transformers in Time Series: A Survey》

    2022年9月13日 21:28 摸鱼了一天,看看综述. 论文:Transformers in Time Series: A Survey GitHub: 阿里达摩院 2022的论文. 摘要 从两个角 ...

  4. RxJS 系列 – Transformation Operators

    前言 前几篇介绍过了 Creation Operators Filter Operators Join Creation Operators Error Handling Operators 这篇继续 ...

  5. Google Ads – 大杂烩

    广告相互竞争, 自己打自己? About similar keywords in a Google Ads account 如果用户的搜索能匹配到广告 Campaign 中多个广告的话, 会怎么样? ...

  6. Spring —— 注解开发(管理第三方bean)

    第三方bean管理       第三方bean依赖注入       

  7. 【赵渝强老师】Docker Swarm实现服务的滚动更新

    一.什么是Docker Swarm? Docker Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机 ...

  8. war3辅助代码及运行方式

    打开VS2019 点这个 自动生成这么一堆代码,全删了,就剩这些就行 然后点这里 然后向CPP里粘贴以下代码 #include "tlhelp32.h" HANDLE hwnd = ...

  9. 【问题解决】remote: parse error: Invalid numeric literal at line 1, column 20,解决思路

    问题现象 某同事出现过同样的推送到git仓库报错的问题,报错信息详情如下: Delta compresion using up to 20 threads Compressing objects: 1 ...

  10. 搜广推算法校招面试:BOSS直聘 推荐搜索系统工程师

      本文介绍2024届秋招中,BOSS直聘的推荐/搜索系统工程师岗位一面的面试基本情况.提问问题等.   2023年12月,赶在秋招的末尾,投递了BOSS直聘的推荐/搜索系统工程师岗位,并不清楚所在的 ...