「Electron|快速开始」来写个Hello World吧

news2024/11/25 6:57:12

本文主要介绍如何快速使用Electron生成一个Hello World应用

文章目录

  • 主要步骤
  • 一、准备工作
    • 创建项目
    • 安装electron
  • 二、编写electron应用所需的基本内容
    • 首先,我们需要给electron应用一个入口
    • 创建窗口
    • 往窗口里面放一个HTML界面,写上"Hello World!"

主要步骤

  • 创建项目目录
  • 初始化项目信息
  • 安装electron
  • 创建electron应用最小所需文件
  • 运行并验证

一、准备工作

创建项目

我们需要创建一个目录作为electron项目的根目录,以下命令创建一个名为hello-electron-app的目录并进入该目录中:

  • mkdir hello-electron-app && cd hello-electron-app

然后我们运行下面的命令并且一路回车完成初始化项目环境的工作:

  • npm init

完成之后我们可以看到目录下生成的package.json内容大致如下:

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

安装electron

运行以下命令安装electron:
npm install --save-dev electron
如果安装过程遇到报错,可以参考这篇文章

二、编写electron应用所需的基本内容

如果我们这时就运行electron启动命令npm start,则会出现找不到start指令(npm ERR! Missing script: "start")的错误。这是因为在存储项目信息的package.json里面没有编写start对应的命令,需要在package.json中增加如下信息:

{
  ......
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "electron ."
  },
  ......
}

这时我们再执行npm start就会提示新的错误了(●ˇ∀ˇ●)
在这里插入图片描述
这是因为我们项目目录空空如也,还没有electron的入口文件可以运行。

首先,我们需要给electron应用一个入口

  • 创建一个作为入口的js文件,文件名称可以自取,这里直接叫做main.js
  • main.js文件中可以暂时不填写任何代码内容

由于项目初始化生成package.json时,默认的入口文件名称叫做index.js,所以我们要将package.json中的main字段内容修改如下:

{
  ......
  "main": "main.js",
  ......
}

这时候再运行就不会报错了。虽然没有任何应用窗口出现,但是命令行输出如下:

> hello-electron-app@1.0.0 start
> electron .

创建窗口

我们在main.js先引入electron控制应用的模块appBrowserWindow,其中:

  • app模块用来控制应用
  • BrowserWindow模块用来控制应用中的浏览器窗口

加入以下代码,表示在应用启动完毕时运行一段代码:

// main.js

app.whenReady().then(() => {
    // do something
  })

然后我们编写一段创建宽800高600的窗口的代码并进行调用,如下:

const { app, BrowserWindow } = require('electron')
const createWindow = () => {
    const win = new BrowserWindow({
      width: 800,
      height: 600
    })
}
  

app.whenReady().then(() => {
    createWindow()
  })

再次运行npm start就可以看到有应用窗口出现:
在这里插入图片描述

往窗口里面放一个HTML界面,写上"Hello World!"

我们创建一个HTML文件index.html(名称任意)
然后放入VSCode生成的HTML基础模板(打一个感叹号!就会弹出代码片段提示):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>

body部分加上 <h1>Hello World!</h1>

然后我们需要在窗口加载这个HTML文件,在main.jscreateWindow添加加载页面的逻辑,修改后完整代码如下:

const { app, BrowserWindow } = require('electron')
const createWindow = () => {
    const win = new BrowserWindow({
      width: 800,
      height: 600
    })

    win.loadFile("index.html")
}
  

app.whenReady().then(() => {
    createWindow()
  })

现在我们再次运行npm start,就可以看到hello world了!
在这里插入图片描述

你学会了吗?(●ˇ∀ˇ●)

如果对你有帮助,就点个赞吧~👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/90677.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

修改ik分词器源码实现直连数据库动态增量更新词汇

谈到es的中文分词器,肯定少不了ik分词器.现ik分词器有两种获取主词汇和停用词的方法: 一是通过ik\config目录下的main.dic和stopword.dic获取,但是每次修改后要重启才能生效 二是通过提供接口返回所有词汇的接口,接口路径配置在.但是该方式每次都需要将所有词汇返回,效率不高.…

大数据课设

----------------------------------------------------------------------------------------------------------------------------- 由于本人主修嵌入式方向最多使用的就是C语言&#xff0c;由于物联网这个专业的特殊性&#xff0c;javaweb没少 写&#xff0c;所以java也用…

Nginx动静分离

&#x1f341;博客主页&#xff1a;&#x1f449;不会压弯的小飞侠 ✨欢迎关注&#xff1a;&#x1f449;点赞&#x1f44d;收藏⭐留言✒ ✨系列专栏&#xff1a;&#x1f449;Linux专栏 &#x1f525;欢迎大佬指正&#xff0c;一起学习&#xff01;一起加油&#xff01; 目录&…

[附源码]Python计算机毕业设计SSM基于Java的租房系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

论文笔记:CycleMorph: Cycle Consistent UnsupervisedDeformable Image Registration

CycleMorph: Cycle Consistent Unsupervised Deformable Image Registration 针对本篇论文个人总结&#xff1a; 文章最重要的点在于施加循环一致性&#xff0c;模型有两个网络&#xff0c;移动图像与固定图像互相配准过程中施加约束优化网络提高配准精度&#xff0c;仔细看图…

如何求解欧拉路径?

求解欧拉路径前言一、案例二、回溯三、源码四、复杂度分析五、欧拉科普总结参考文献前言 欧拉路径 从图的一个节点出发&#xff0c;每条边只访问一次&#xff0c;遍历完了所有图节点&#xff0c;这条路径为欧拉路径。 一、案例 二、回溯 按照上面的例子&#xff0c;很容易理…

【LeetCode】1945. 字符串转化后的各位数字之和

题目描述 给你一个由小写字母组成的字符串 s &#xff0c;以及一个整数 k 。 首先&#xff0c;用字母在字母表中的位置替换该字母&#xff0c;将 s 转化 为一个整数&#xff08;也就是&#xff0c;‘a’ 用 1 替换&#xff0c;‘b’ 用 2 替换&#xff0c;… ‘z’ 用 26 替换&…

计算机网络原理第1章 概述

1.1 计算机网络在信息时代中的作用 1.2 互联网概述 1.2.1 网络的网络 互联网 特指Internet&#xff0c;起源于美国&#xff0c;现已发展成为世界上最大的、覆盖全球的计算机网络。 计算机网络 (简称为网络) 由若干结点(node)和连接这些结点的链路(link)组…

玩转MySQL:一站式解决分库分表后患问题方案

引言 上篇有关分分库分表一文中已经将分库分表的方法论全面阐述清楚了&#xff0c;总体看下来用一个字形容&#xff0c;那就是爽&#xff01;&#xff08;手动狗头&#xff09;尤其是分库分表技术能够让数据存储层真正成为三高架构&#xff0c;但前面爽是爽了&#xff0c;接着…

面试官:你觉得HTTPS能防止重放攻击吗?

引言 先来一段面试情景再现~~ ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 最后的结局自然就是 ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; OK&#xff0c;带着上面的疑问&#xf…

【SpringCloud负载均衡】【源码+图解】【四】负载均衡的实现

【SpringCloud负载均衡】【源码图解】【三】LoadBalancer的工作原理 目录4. 负载均衡4.1 提供者DiscoveryClient4.1.1 CompositeDiscoveryClient4.1.2 EurekaDiscoveryClient4.1.3 SimpleDiscoveryClient4.1.4 自定义DiscoveryClient4.2 过滤器Supplier4.2.1 CachingServiceIns…

Linux文本三剑客之grep命令

Linux文本三剑客之grep命令 1. grep 命令 介绍 grep 命令的基本语法格式和参数列表&#xff01; 文本搜索工具&#xff0c;根据用户指定的”模式”对目标文本逐行进行匹配检查&#xff0c;打印匹配到的行。 模式&#xff1a;由正则表达式字符及文本字符所编写的过滤条件&am…

MySQL 中截取字符串的方法

LEFT(str, len) 从左边开始截取&#xff0c;如果字符串为 null 则返回null。 str&#xff1a;被截取字符串&#xff1b;len&#xff1a;截取长度 SELECT LEFT(ABCDEFT, 2) FROM sub_str;RIGHT(str, len) 从右边开始截取&#xff0c;如果字符串为 null 则返回null。 str&…

0125 搜索与回溯算法 Day14

剑指 Offer 12. 矩阵中的路径 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻…

GLAD:带有反射壁的空心波导

概述 离散傅里叶变换的混叠效应为带有反射壁的空心波导的建模提供了一个便捷的方法。反射壁可以将光返回到光路中而混叠效应将使溢出光场从反方向折回到采样光场中。如果光场分布是一个偶函数&#xff0c;那么折回的作用就如同反射效果。我们可以将任意形状的光场分布转化成…

推荐一款免费的AI绘图软件,可生成二次元画作和3D模型

随着AI绘画的火热&#xff0c;市面上关于AI绘画的话题居高不小&#xff0c;各种教程、软件、小程序也是满天飞&#xff0c;在这些眼花缭乱的推荐中&#xff0c;究竟哪一款ai绘图软件才是真正适合自己的&#xff0c;不但免费&#xff0c;生成出来的二次元画作还很精美&#xff1…

早教资源网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 网站前台&#xff1a;关于我们、联系我们、公告信息、二手物品、资源信息 管理员功能&#xff1a; 1、管理关于我们、联…

Django 第三天学习笔记

1.模板层-变量和标签 能够传递到Django模板中的数据类型&#xff1a; 1.str 字符串 2.Int 整形 3.List 数组 4.Tuple 元组 5.Dict 字典 6.Func 方法 7.Obj 类的实例化对象。 在模板中使用的变量的语法&#xff1a; {{变量名}}{{变量名.index}} #索引{{变量名.key}} #获取字典对…

数据结构顺序栈

栈 这是大话数据结构种对于栈的描述 可以看到 栈是一种特殊的线性表 它只能在尾部进行元素的插入和删除 但是在栈种 这叫做 入栈 和 出栈 而且它遵循 先进入的元素后出 后进入的元素先出 即就是我们常听说的 先进后出 和后进先出 这里就有一个简单的例子 先进后出 后进先出…

【Node.js】实现微信小程序在线支付功能

实战项目名称&#xff1a;微信小程序实现在线支付功能 - 文章结尾附上微信小程序码&#xff0c;扫码登录后即可体验&#xff01;&#xff01; 文章目录一、实战步骤1. 前期准备2. 添加wechatpay-node-v3和fs插件3. 预设微信下单的数据4. 将上一步骤的下单信息返回给前端5. 小程…