【Electron】从零构建你的第一个桌面应用

参考文档:Electron官网 | electron-builder

前提:请先安装到node环境。

介绍

Electron 是一个使用 Web 技术(HTML、CSS、JavaScript)构建跨平台桌面应用的框架。本文将带你从零开始,一步步创建一个简单的 Electron 应用,并完成打包。

一、环境准备与项目初始化

1、创建目录

bash 复制代码
# 创建目录
mkdir my-electron-app

# 切换到对应目录
cd my-electron-app

# 初始化项目(生成 package.json)
npm init

2、配置 npm 镜像

由于 Electron 体积较大,建议配置国内镜像加速下载。在项目根目录创建 .npmrc 文件:

js 复制代码
# 在项目根目录创建 .npmrc 文件 .npmrc 文件是 npm 的配置文件
# .npmrc 文件内容
electron_mirror=https://npmmirror.com/mirrors/electron/
strict-ssl=false
registry=https://registry.npmmirror.com/

3、安装 Electron

bash 复制代码
npm install electron --save-dev

二、核心文件编写

1、package.json(项目配置)

关键字段说明:

  • main: 指定应用入口文件为 main.js
  • scripts.start: 定义启动命令 npm run start
json 复制代码
{
  "name": "my-electron-app",
  "version": "1.0.0",
  "description": "Hello Electron!",
  "main": "main.js",
  "scripts": {
	"start": "electron .",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "J",
  "license": "MIT",
  "devDependencies": {
    "electron": "^41.1.0"
  }
}

2、main.js(主进程)

js 复制代码
const { app, BrowserWindow } = require('electron/main')
// 创建窗口
const createWindow = () => {
  const win = new BrowserWindow({
    width: 800,
    height: 600
  })
  // 窗口对应的文件地址,也可以是web页面地址
  win.loadFile('index.html')
}

app.whenReady().then(() => {
  createWindow()
  // macOS: 点击 dock 图标时重新创建窗口
  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) {
      createWindow()
    }
  })
})
// 所有窗口关闭时退出应用(Windows/Linux)
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

3、index.html(渲染进程)

html 复制代码
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <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 from Electron renderer!</title>
  </head>
  <body>
    <h1>Hello from Electron renderer!</h1>
    <p>👋</p>
    <p id="info"></p>
  </body>
</html>

三、运行效果

执行启动命令:

bash 复制代码
npm run start

运行后,你将看到一个 800x600 的桌面窗口,显示 "Hello from Electron renderer!" 的欢迎页面。

四、应用打包

1、安装打包工具

bash 复制代码
npm install -d electron-builder

2、更新 package.json 配置

为了提示构建速度,在测试阶段,可以参考以下配置。

1、构建命令添加--dir参数,表示不需要打包安装包程序;

2、关闭执行程序签名校验功能。

添加打包脚本和构建配置:

json 复制代码
{
  "name": "my-electron-app",
  "version": "1.0.0",
  "description": "Hello Electron!",
  "main": "main.js",
  "scripts": {
    "start": "electron .",
    "dist": "electron-builder --dir",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "J",
  "license": "MIT",
  "devDependencies": {
    "electron": "^41.1.0",
	"electron-builder": "^26.8.1"
  },
  "build": {
    "win": {
      "signAndEditExecutable": false,
      "verifyUpdateCodeSignature": false,
      "forceCodeSigning": false
    }
  }
}

优化说明:

  • --dir 参数:仅生成解压目录,不打包成安装包(加快测试构建速度)
  • signAndEditExecutable: false:跳过可执行文件签名
  • verifyUpdateCodeSignature: false:关闭签名校验
  • forceCodeSigning: false:禁用强制代码签名

3、执行构建

bash 复制代码
npm run dist

构建完成后,可在 dist/win-unpacked 目录找到可执行文件。

五、性能与体积分析

1、目录结构

目录:dist\win-unpacked

plain 复制代码
dist/
└── win-unpacked/
    ├── my-electron-app.exe    # 主程序
    ├── resources/
    │   └── app/
    │       ├── main.js
    │       ├── index.html
    │       └── package.json
    └── ...(依赖库文件)

2、内存占用情况

运行状态 内存占用
后台运行 约 50-80 MB
窗口激活 约 100-150 MB
开启 DevTools 约 200-300 MB

后台运行下内存占用

窗口激活的情况下内存占用

打开页面调试工具的情况下

3、文件体积

  • 解压后目录:约 200-250 MB(包含 Chromium 内核和 Node.js 运行时)
  • 生成安装包:约 50-80 MB(经压缩)
相关推荐
一次旅行2 小时前
飞书接入龙虾后失联解决方法
前端·人工智能·chrome·飞书
斌味代码2 小时前
Vue3源码解读(一):响应式系统 reactive/ref 核心原理图解(2026最新版)
前端·javascript·vue.js
C澒2 小时前
PC 桌面富应用:Electron 相机画面渲染性能优化
性能优化·electron·相机·web app
yhole2 小时前
Nginx解决前端跨域问题
运维·前端·nginx
我爱学习好爱好爱2 小时前
Ansible 常用模块详解:hostname、selinux 、file实战
前端·chrome·ansible
爱丽_2 小时前
AQS 的 `state`:volatile + CAS 如何撑起原子性与可见性
java·前端·算法
Zik----2 小时前
Windows安装cuda
前端·ui·xhtml
王杨游戏养站系统2 小时前
3分钟搭建1个游戏下载站网站教程!SEO站长养站系统!
开发语言·前端·游戏·游戏下载站养站系统·游戏养站系统
是上好佳佳佳呀2 小时前
【前端(三)】CSS 属性梳理:从字体文本到背景表格
前端·css