Electron 从零开始:构建你的第一个桌面应用

🖥️ Electron 从零开始:构建你的第一个桌面应用

Electron 是一个可以使用 HTML、CSS 和 JavaScript 构建跨平台桌面应用的框架。它将 Chromium 和 Node.js 融合到一个环境中,使 Web 开发者也能轻松开发原生桌面应用。


🚀 什么是 Electron?

Electron 是由 GitHub 开发的开源框架,底层基于:

  • Chromium:负责 UI 渲染
  • Node.js:处理文件系统、后端逻辑

广受欢迎的桌面应用如 VS Code、Slack、Postman 都是基于 Electron 构建的。


🧰 开发环境准备

  1. 安装 Node.js(建议版本 ≥ 16)
  2. 安装 npm(随 Node.js 自带)

🛠️ 创建你的第一个 Electron 应用

1. 初始化项目

mkdir my-electron-app
cd my-electron-app
npm init -y

2. 安装 Electron

npm install electron --save-dev

📁 项目结构

my-electron-app/
├── package.json
├── main.js          // 主进程入口
├── index.html       // 应用页面
└── preload.js       // 可选:渲染进程预加载脚本

🧠 主进程代码(main.js)

const { app, BrowserWindow } = require('electron');
const path = require('path');function createWindow() {const win = new BrowserWindow({width: 800,height: 600,webPreferences: {preload: path.join(__dirname, 'preload.js') // 可选}});win.loadFile('index.html');
}app.whenReady().then(() => {createWindow();app.on('activate', () => {if (BrowserWindow.getAllWindows().length === 0) createWindow();});
});app.on('window-all-closed', () => {if (process.platform !== 'darwin') app.quit();
});

🌐 页面内容(index.html)

<!DOCTYPE html>
<html><head><meta charset="UTF-8" /><title>Hello Electron</title></head><body><h1>Hello, Electron!</h1><p>这是你的第一个桌面应用。</p></body>
</html>

⚙️ 运行应用

package.json 中添加启动脚本:

"scripts": {"start": "electron ."
}

运行项目:

npm start

你将看到一个桌面窗口,显示着我们写的 HTML 页面。


✨ 进阶功能建议

功能简介
preload.js安全桥接 Node 与页面
ipcMain / ipcRenderer主进程与渲染进程通信
文件读写使用 Node.js API 操作文件系统
菜单栏自定义应用菜单栏
自动更新集成 Electron-updater
打包发布使用 Electron Forge 或 Electron Builder

✅ 示例:添加渲染进程与主进程通信

preload.js

const { contextBridge, ipcRenderer } = require('electron');contextBridge.exposeInMainWorld('myAPI', {sayHello: () => ipcRenderer.send('hello'),
});

index.html

<button onclick="window.myAPI.sayHello()">点击打招呼</button>

main.js 中监听

const { ipcMain } = require('electron');
ipcMain.on('hello', () => {console.log('收到来自渲染进程的问候!');
});

📦 打包发布

推荐使用 Electron Forge:

npx create-electron-app my-app --template=webpack

或使用 Electron Builder:

npm install electron-builder --save-dev

并在 package.json 中配置 build 字段。


🧾 总结

步骤操作
初始化项目npm init -y
安装 Electronnpm install electron --save-dev
创建主进程编写 main.js
创建页面编写 index.html
运行应用npm start

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

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

相关文章

相向双指针-16. 最接近的三数之和

16. 最接近的三数之和 题目描述思路讲解代码展示复杂度分析相关标签 题目描述 思路讲解 思路和 15. 三数之和 类似&#xff0c;排序后&#xff0c;枚举 nums[i] 作为第一个数&#xff0c;那么问题变成找到另外两个数&#xff0c;使得这三个数的和与 target 最接近&#xff0c;…

C 语 言 - - - 文 件 操 作

C 语 言 - - - 文 件 操 作 文 件文 件 名文 件 操 作fopenfclose 文 件 的 顺 序 读 写fputcfgetcfputsfgetsfprintffscanffwritefread 流文 件 的 随 机 读 写fseekftellrewind 总结 &#x1f4bb;作 者 简 介&#xff1a;曾 与 你 一 样 迷 茫&#xff0c;现 以 经 验 助 你…

Walrus 与 Pudgy Penguins 达成合作,为 Web3 头部 IP 引入去中心化存储

以将深受喜爱的数字藏品赋予生命而闻名的 IP 与品牌开发公司 Pudgy Penguins&#xff0c;现已集成 Walrus&#xff0c;用于存储和管理其日益增长的数字媒体资源库&#xff0c;包括在其产品和社区体验中使用的贴纸和 GIF。团队将率先通过 Tusky&#xff08;Walrus 的用户友好型文…

2019ICPC陕西省赛暨陕西邀请赛题解 BCDEF HIJKL

共111支队伍&#xff0c;获奖情况&#xff08;大概&#xff09; 铜牌66 —— 3 296 银牌33 —— 4 391 金牌 11 —— 6 808 题目难度&#xff08;过题&#xff09;L F E B C I J D K H Problem - L - Codeforces 思路&#xff1a;注意到答案是连乘&#xff0c;只要有0…

5块钱的无忧套餐卡可以变成流量卡吗

电信的 5 块钱无忧套餐卡理论上可以变成流量卡&#xff0c;但会受到一些条件限制&#xff0c;以下是具体介绍&#xff1a; 中国电信无忧卡简介 中国电信无忧卡是电信推出的低月租套餐&#xff0c;月租仅 5 元&#xff0c;包含 200M 国内流量、来电显示和 189 邮箱&#xff0c;全…

SpringBoot校园失物招领平台源码开发实现

概述 实用的​​SpringBoot校园失物招领平台​​完整项目源码&#xff0c;帮助开发者快速构建校园失物招领系统。该项目采用SpringBootVue前后端分离架构&#xff0c;包含完整的注册登录、信息发布、认领管理等模块&#xff0c;是学习企业级项目开发的优秀范例 主要内容 1. …

如何在纯C中实现类、继承和多态(小白友好版)

基本实现原理 /* 通过结构体函数指针模拟类 */ typedef struct {// 成员变量int x; // 成员方法&#xff08;函数指针&#xff09; void (*print)(void* self); } MyClass;/* 成员函数实现 */ void my_print(void* self) {MyClass* obj (MyClass*)self;p…

51单片机入门教程——每个音符对应的重装载值

前言 本教程基于B站江协科技课程进行个人学习整理&#xff0c;专为拥有C语言基础的零基础入门51单片机新手设计。既帮助解决因时间差导致的设备迭代调试难题&#xff0c;也助力新手快速掌握51单片机核心知识&#xff0c;实现从C语言理论到单片机实践应用的高效过渡 。

股票单因子的检验方法有哪些?

股票单因子的检验方法主要包括以下四类方法及相关指标&#xff1a; 一、统计指标检验 IC值分析法 定义&#xff1a;IC值&#xff08;信息系数&#xff09;衡量因子值与股票未来收益的相关性&#xff0c;包括两种计算方式&#xff1a; Normal IC&#xff1a;基于Pearson相关系数…

洛谷 P8606 [蓝桥杯 2013 国 B] 高僧斗法 博弈论

题目 传送门 P8606 [蓝桥杯 2013 国 B] 高僧斗法 - 洛谷 思路 这个题就比较考验博弈的基本题型和转换能力了&#xff1b; 这个题是nim博弈>阶梯博弈 再将小和尚的移动转化为阶梯上石子的移动&#xff1a;两个小和尚之间可以移动的距离&#xff0c;看做阶梯上的石子&…

《政治最后的日子》章节

政治与中世纪教会的类比性衰落 作者提出现代民族国家正重复中世纪教会的衰落轨迹&#xff1a; 两者均曾作为社会组织核心存在约5个世纪 晚期都成为生产力阻碍&#xff08;中世纪教会税收负担/现代国家官僚低效&#xff09; 末期均出现管理者普遍腐败与公众蔑视&#xff08;…

微软开源推理模型:Phi-4-reasoning-plus

Phi-4-reasoning-plus 技术解读 一、模型概述 Phi-4-reasoning-plus 是微软研究院开发的一种前沿开源推理模型&#xff0c;基于 Phi-4 通过监督微调和强化学习进一步训练而成。该模型专注于高质量和高级推理能力的培养&#xff0c;旨在为小型高效模型提供强大的推理性能。其训…

文学与社会学是否只是在做解释的工作?

目录 一、文学&#xff1a;从抒情到解释的转变 &#xff08;一&#xff09;文学从来不只是“虚构” &#xff08;二&#xff09;文学的解释&#xff0c;是“经验的再组织” 二、社会学&#xff1a;用理论语言重写社会现实 &#xff08;一&#xff09;社会学的“科学化”与…

Flink基础整理

文章目录 前言1.Flink系统架构2.编程模型(API层次结构)3.DataSet和DataStream区别4.Flink的批流统一5.Flink的状态后端6.Flink有哪些状态类型7.Flink并行度前言 提示:下面是根据网络或AI整理: 1.Flink系统架构 用户在客户端提交作业(Job)到服务端。服务端为分布式的主从…

mq消息可靠性传送

mq消息传送 开启消息发布确认模式 def publish(self, message):"""发布消息&#xff08;自动重连&#xff09;"""for i in range(3):try:message_ json.dumps(message, ensure_asciiFalse)self.ensure_connection()# 开启 confirm 模式&#x…

【quantity】10 面积单位模块(area.rs)

一、源码 我们可以实现面积单位文件&#xff0c;包含k&#xff08;千&#xff09;、d&#xff08;分&#xff09;、c&#xff08;厘&#xff09;、m&#xff08;毫&#xff09;前缀的面积量。面积的基本单位是平方米&#xff08;SquareMeter&#xff09;。 以下是area.rs的实…

运算放大器的主要技术指标

运放&#xff08;运算放大器&#xff09;是一种基础电子器件&#xff0c;具有输入阻抗高、开环放大倍数大、输入端电流小、同相端与反相端电压几乎相等等特点。在选型时&#xff0c;需要考虑技术指标如输入失调电压、输入失调电压漂移、输入失调电流、共模抑制比、压摆率、建立…

Docker 服务搭建

&#x1f4a2;欢迎来到张翊尘的开源技术站 &#x1f4a5;开源如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 Docker 服务搭建在 Ubuntu 上安装 Docker更新软件…

CRM系统接入DeepSeek大模型应用场景方案

1. 项目背景与目标 在当前数字化转型的浪潮中&#xff0c;客户关系管理&#xff08;CRM&#xff09;系统已成为企业提升客户服务效率、优化销售流程的核心工具。然而&#xff0c;传统CRM系统普遍面临数据处理能力有限、客户洞察深度不足、响应效率低下等问题。例如&#xff0c…

步进电机中断函数解释

STM32 motor111.c 中 HAL_TIM_PeriodElapsedCallback 函数逐行解释 下面我们对 STM32 项目中 motor111.c 文件里的 HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) 函数进行逐行解析&#xff0c;帮助初学者理解每一行代码的作用。此函数是在定时器产生更新中断时被调…