使用Electron创建桌面程序,从创建到打包

news2024/11/25 14:35:24

在桌面程序中,使用C#语言可以创建winform和WPF程序,他们2个在Windows中都非常的优秀,还有就是使用QT开发桌面,可以跨平台开发,这三种都是比较“正规”的,而Electron是使用框架开发桌面程序的,还有其他的框架也可以开发桌面程序等等。下面介绍一下Electron开发桌面程序,只要会使用vue,那么使用Electron也非常的简单。官网如下:

简介 | Electron

本案例环境win10,VisualStudioCode,node,npm

1.首先创建一个文件夹electronDemo

2.然后进入根目录中, 输入

npm init
  • entry point 应为 main.js.
  • author 与 description 可为任意值,但对于应用打包是必填项。

效果如图所示:

 

3.将electron包安装到应用的开发依赖中

这个安装需要等一会儿

npm install --save-dev electron

 

4.使用VisualStudioCode打开程序

其实上面的命令也可以在VisualStudioCode的终端中执行

第一个文件就是使用node包,第二和第三都是配置文件,这个和创建vue程序是一样的。

5.然后创建main.js文件

// main.js

// electron 模块可以用来控制应用的生命周期和创建原生浏览窗口
const { app, BrowserWindow } = require('electron')
const path = require('path')

const createWindow = () => {
  // 创建浏览窗口
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js')
    }
  })

  // 加载 index.html
  mainWindow.loadFile('index.html')

  // 打开开发工具
  // mainWindow.webContents.openDevTools()
}

// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {
  createWindow()

  app.on('activate', () => {
    // 在 macOS 系统内, 如果没有已开启的应用窗口
    // 点击托盘图标时通常会重新创建一个新窗口
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})

// 除了 macOS 外,当所有窗口都被关闭的时候退出程序。 因此, 通常
// 对应用程序和它们的菜单栏来说应该时刻保持激活状态, 
// 直到用户使用 Cmd + Q 明确退出
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') app.quit()
})

// 在当前文件中你可以引入所有的主进程代码
// 也可以拆分成几个文件,然后用 require 导入。

6.再创建index.html

<!--index.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'">
    <title>你好!</title>
  </head>
  <body>
    <h1>你好!故里2130</h1>
    我们正在使用 Node.js <span id="node-version"></span>,
    Chromium <span id="chrome-version"></span>,
    和 Electron <span id="electron-version"></span>.

    <!-- 您也可以此进程中运行其他文件 -->
    <script src="./renderer.js"></script>
  </body>
</html>

7.创建preload.js

// preload.js

// 所有的 Node.js API接口 都可以在 preload 进程中被调用.
// 它拥有与Chrome扩展一样的沙盒。
window.addEventListener('DOMContentLoaded', () => {
    const replaceText = (selector, text) => {
      const element = document.getElementById(selector)
      if (element) element.innerText = text
    }
  
    for (const dependency of ['chrome', 'node', 'electron']) {
      replaceText(`${dependency}-version`, process.versions[dependency])
    }
  })

8.最后的项目结构如下

并且在红色的部分增加命令,表示启动的时候访问electron

 "start": "electron .",

 

9.然后在终端输入

npm run start

 

10.效果

和正常的winform和wpf布局是一样的。

 

11.对开发的程序,进行打包成exe

先输入

npm install --save-dev @electron-forge/cli

再输入

npx electron-forge import

再输入

npm run make

 

12.虽然报错了,但是还是可以运行的

打包的方式不仅仅只有这一种,还有别的方式。

 

 

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

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

相关文章

JDBC核心技术_第9章:Apache-DBUtils实现CRUD操作

目录9.1 Apache-DBUtils简介9.2 主要API的使用9.2.1 DbUtils9.2.2 QueryRunner类9.2.3 ResultSetHandler接口及实现类9.1 Apache-DBUtils简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库&#xff0c;它是对JDBC的简单封装&#xff0c;学习成本极低&#xff0…

硬件设备上也能安全运行小程序

当前&#xff0c;在百度、支付宝、今日头条等各大巨头都把持小程序技术尚未开放的情况下&#xff0c;市面上可商用的小程序技术选择面非常狭窄。与此同时&#xff0c;企业仍希望实现 “一次开发&#xff0c;多端运行”&#xff0c;从而真正达到降本增效。今天为大家分享一下&am…

【c++复习梳理】--基础入门语法

目录 1.函数重载 1.1 函数重载概念 1.2C支持函数重载的原理--名字修饰(name Mangling) 2.引用 2.1 引用概念 2.2 引用特性 2.3 常引用 2.4 使用场景 2.4.1 做参数 2.4.2 做返回值 2.5 传值、传引用效率比较 2.5.1 传值、传引用效率比较--做参数返回 2.5.2 值和引用…

Linux--进程地址空间在线程方面的补充--页表的操作模式 0109

上一篇有关地址空间的博客 (入门自用)--Linux--程序地址空间--程序的创建--0907-0913_Gosolo&#xff01;的博客-CSDN博客 很久之前写的&#xff0c;最近会完善。 1. 进程地址空间在线程方面的补充 线程由于资源都是从主进程直接拿来的&#xff0c;所以他们的pcb结构体中的地址…

如何让 Shell 提示符更酷炫

使用远程终端时&#xff0c;默认的命令行提示符格式已经能满足大部分用户需求了&#xff0c;但有时我们希望提示符看起来更直观、优雅、酷炫、美观&#xff0c;可以从中直接得到我们想要的信息&#xff0c;而且清晰分明。本文就详细讲解一下如何让 Shell 提示符更酷炫&#xff…

13_9、Java的IO流之NIO.2中Path、Paths、Files类的使用

一、引入1、Java NIO (New IO&#xff0c;Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API&#xff0c;可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的&#xff0c;但是使用的方式完全不同&#xff0c;NIO支持面向缓冲区的(IO是面向流的)、基于通道的…

cinder对接nfs后端存储

1.部署配置流程 1.安装nfs服务端 可以新增一个节点&#xff0c;或直接使用计算节点&#xff0c;因为存储节点上已经有lvm了这里直接使用计算节点来安装 yum install nfs-utils -y2.修改配置 vi /etc/exports # 要共享的目录 允许的网络1(操做权限) 允许的网络2(操做权限) …

Mybatis源码分析(八)MapperMethod的Select分析

目录一 Select1.1 参数的对应解析convertArgsToSqlCommandParam1.2 ID获取对应的MappedStatement1.3 MappedStatement交给执行器执行1.4 根据参数获取BoundSql1.5 SqlNode节点的解析1.5.1 MixedSqlNode1.5.2 IfSqlNode1.5.3 StaticTextSqlNode1.5.4 TextSqlNode1.6 执行器执行查…

Delete `␍`eslint(prettier/prettier) 错误的解决方案

Delete ‘␍’ eslint(prettier/prettier) 错误的解决方案 问题背景 在Windows笔记本上新拉完代码&#xff0c;在执行pre-commit时&#xff0c;出现如下错误&#xff1a; Delete ␍eslint(prettier/prettier)下面是几种个人尝试过的解决方案&#xff1a; 解决方案 一、Crtl…

【自学Python】Python bytes转string

Python bytes转string Python string转bytes教程 在 Python 中&#xff0c;bytes 类型和 字符串 的所有操作、使用和内置方法也都基本一致。因此&#xff0c;我们也可以实现将 bytes 类型转换成 string 类型。 Python bytes转string方法 Python bytes 转 string 方法主要有…

effective c++读书笔记4

设计class犹如设计type新type的对象应该如何被创建和销毁&#xff1f;&#xff1a;这会影响到你的class的构造函数和析构函数以及内存分配函数和释放函数的设计。对象的初始化和对象的赋值有什么样的区别&#xff1f;这答案决定你的构造函数和赋值操作符的行为&#xff0c;以及…

分享一套Springboot个人博客系统源码带本地搭建教程

Springboot个人博客系统源码带本地搭建教程&#xff0c;需要源码学习可私信我获取。 技术架构 前端框架&#xff1a;JQuery SemanticUI Markdown prism animatecss Tocbot zplayer lightbox 后端框架&#xff1a;SpringBoot 2.2.5 Mybatis Thymeleaf PageHelper m…

基于JAVA SSM springboot实现的抗疫物质信息管理系统设计和实现

基于JAVA SSM springboot实现的抗疫物质信息管理系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 …

记录一次Spring事务线上异常

Spring事务管理配置方式&#xff1a; XML模糊匹配&#xff0c;绑定事务管理注解&#xff0c;可对每个需要进行事务处理的方法单独配置&#xff0c;只需 Transactional&#xff0c;然后添加属性配置 为简便&#xff0c;本文使用注解方式。Spring初始化时&#xff0c;会通过扫描…

C进阶:通讯录(动态版本 + 文件操作)附源码

本文主要讲解通讯录的代码&#xff1b; 需要拥有结构体&#xff0c;动态内存开辟&#xff0c;文件操作的知识&#xff1b; 目录 &#x1f432;一.通讯录思路 &#x1f54a;️二.三个文件的建立 &#x1f63c;三.所需要使用的变量的创建&#xff08;包含在头文件contact.h中&…

从0到1完成一个Vue后台管理项目(十三、信息列表页面实现:对话框新增、DateTimePicker 日期时间选择器)

往期 从0到1完成一个Vue后台管理项目&#xff08;一、创建项目&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;二、使用element-ui&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;三、使用SCSS/LESS&#xff0c;安装图标库&#xff09; 从0到1完成一个Vu…

JavaScript 事件流

文章目录JavaScript 事件流概述事件冒泡简介onclick() 事件冒泡addEventListener() 事件冒泡stopPropagation() 阻止事件冒泡事件捕获简介addEventListener() 事件捕获W3C标准事件流取消事件默认行为取消使用对象属性绑定的事件的默认行为取消使用addEventListener()绑定的事件…

社科院与杜兰大学金融管理硕士项目你有了解吗?每年招生一期错过申请太可惜了

社科院与杜兰大学金融管理硕士是个什么项目&#xff1f;社科院是所学校吗&#xff0c;怎么都没听说过。杜兰大学又是哪里的学校&#xff1f;前几天有位咨询的同学抛出这些疑问&#xff0c;着实让我不知如何给予回答。像社科院这么低调的院校太少了。社科院全称是中国社会科学院…

错题 5jxn 8253,neg指令,知CPU频率求经典总线周期,如何取一个字,字扩展指令CBW扩展要求,知道相对位移量求转移后指令偏移地址

1&#xff1a;8253工作于方式1时&#xff0c;输出负脉冲的宽度等于() A:计数初值N-1个CLK脉冲宽度 B:计数初值N1个CLK脉冲宽度C:计数初值N个CLK脉冲宽度 D:计数初值(2N-1)/2个CLK脉冲宽度 方式0和方式1 波形相同&#xff08;计数过程中低&#xff0c;计数完高&#xff09;&…

Pytorch 暂退法(Dropout)

在2014年&#xff0c;斯里瓦斯塔瓦等人 (Srivastava et al., 2014) 就如何将毕晓普的想法应用于网络的内部层提出了一个想法&#xff1a; 在训练过程中&#xff0c;他们建议在计算后续层之前向网络的每一层注入噪声。 因为当训练一个有多层的深层网络时&#xff0c;注入噪声只会…