Electron项目实战:用npm和cnpm快速搭建跨平台桌面应用(附完整代码)

Vue+electron-vue跨平台桌面应用开发实战教程(一) Vue+electron-vue跨平台桌面应用开发实战教程(一)前言创建项目1.快速安装Vue项目2.集成electron3.运行程序 前言 本文将带领大家使用Vue + electron-builder 搭建桌面应用。 使用到的工具:IDEA 2021、node 创建项目 1.快速安装Vue项目 通过Ctrl/Command+alt+S快捷键打开idea的 Settings(设置)页面,在左侧目录 Plugins(插件)中搜索 Vue。博主这边已经安装过,未安装的小伙伴可以点击Install ,为以后创 阅读详情

Electron项目实战:从零构建跨平台桌面应用的全流程指南

如果你已经熟悉Node.js的基础开发,却对如何快速构建一个功能完整的桌面应用感到困惑,Electron可能是最值得尝试的技术方案。这个由GitHub开发的开源框架,让开发者能够使用熟悉的JavaScript、HTML和CSS来创建跨平台的桌面应用程序。从Slack、Visual Studio Code到Figma,许多知名应用都基于Electron构建,证明了它在性能和功能上的可靠性。

1. 环境准备与项目初始化

在开始Electron之旅前,确保你的开发环境已经准备就绪。与普通的Web开发不同,Electron项目需要特定的工具链支持。

首先确认Node.js的安装情况。虽然Electron支持多个Node.js版本,但建议使用最新的LTS版本以获得最佳兼容性。打开终端运行以下命令检查版本:

node -v
npm -v

如果尚未安装,可以从Node.js官网获取对应操作系统的安装包。安装完成后,我们可以开始创建项目目录结构:

mkdir electron-demo && cd electron-demo
npm init -y

这个初始化命令会生成一个基本的package.json文件,它是Node.js项目的核心配置文件。对于Electron项目,我们需要对这个文件做一些特殊调整:

{
  "name": "electron-demo",
  "version": "1.0.0",
  "main": "main.js",
  "scripts": {
    "start": "electron .",
    "watch": "nodemon --exec electron ."
  },
  "devDependencies": {
    "electron": "^latest"
  }
}

提示:添加watch脚本可以让我们在开发过程中实现热重载,nodemon会监视文件变化并自动重启应用。

2. 核心架构与进程通信

Electron应用的核心架构基于多进程模型,理解这一点对开发复杂应用至关重要。主进程负责创建和管理应用窗口,而渲染进程则负责展示Web内容。

主进程(main.js)基础结构:

const { app, BrowserWindow, ipcMain } = require('electron')
const path = require('path')

let mainWindow

function createWindow() {
  mainWindow = new BrowserWindow({
    width: 1200,
    height: 800,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      contextIsolation: true,
      enableRemoteModule: false
    }
  })
  
  mainWindow.loadFile('src/index.html')
  
  // 开发环境下自动打开开发者工具
  if (process.env.NODE_ENV === 'development') {
    mainWindow.webContents.openDevTools()
  }
  
  mainWindow.on('closed', () => {
    mainWindow = null
  })
}

app.whenReady().then(() => {
  createWindow()
  
  app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) {
      createWindow()
    }
  })
})

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

渲染进程与主进程的安全通信需要通过预加载脚本(preload.js)来实现:

const { contextBridge, ipcRenderer } = require('electron')

contextBridge.exposeInMainWorld('electronAPI', {
  sendMessage: (message) => ipcRenderer.send('message', message),
  onReply: (callback) => ipcRenderer.on('reply', callback)
})

在渲染进程中,可以通过暴露的API安全地与主进程交互:

window.electronAPI.sendMessage('Hello from renderer')
window.electronAPI.onReply((event, arg) => {
  console.log('Reply from main:', arg)
})

3. 应用打包与分发

开发完成后,我们需要将应用打包成可执行文件以便分发。Electron提供了多种打包方案,其中最流行的是electron-builder。

首先安装必要的依赖:

npm install electron-builder --save-dev

然后在package.json中添加打包配置:

{
  "build": {
    "appId": "com.example.electrondemo",
    "productName": "Electron Demo",
    "directories": {
      "output": "dist"
    },
    "files": [
      "src/**/*",
      "main.js",
      "preload.js"
    ],
    "win": {
      "target": "nsis",
      "icon": "build/icon.ico"
    },
    "mac": {
      "target": "dmg",
      "icon": "build/icon.icns"
    },
    "linux": {
      "target": "AppImage",
      "icon": "build/icon.png"
    }
  }
}

添加打包脚本:

"scripts": {
  "pack": "electron-builder --dir",
  "dist": "electron-builder"
}

运行打包命令:

npm run dist

打包完成后,你会在dist目录下找到对应平台的可执行文件。electron-builder支持为Windows、macOS和Linux生成安装包,真正实现一次开发,多平台部署。

4. 性能优化与调试技巧

随着应用功能增加,性能优化变得尤为重要。以下是几个关键的优化方向:

1. 内存管理

Electron应用的内存使用需要特别关注,尤其是当应用需要处理大量数据或长时间运行时。

// 在窗口关闭时释放资源
win.on('closed', () => {
  win = null
})

// 定期检查内存使用情况
setInterval(() => {
  console.log(process.memoryUsage())
}, 30000)

2. 进程隔离

将计算密集型任务放在独立进程或Worker线程中执行,避免阻塞UI线程:

// 在主进程中
const { Worker } = require('worker_threads')

function runWorkerTask(data) {
  return new Promise((resolve, reject) => {
    const worker = new Worker('./worker.js', { workerData: data })
    worker.on('message', resolve)
    worker.on('error', reject)
    worker.on('exit', (code) => {
      if (code !== 0) reject(new Error(`Worker stopped with exit code ${code}`))
    })
  })
}

3. 调试工具

除了Chrome开发者工具,Electron还提供了一些特有的调试能力:

// 获取所有窗口的内存占用
console.log(BrowserWindow.getAllWindows().map(w => w.webContents.getProcessMemoryInfo()))

// 监控GPU内存使用
app.getGPUInfo('complete').then(info => {
  console.log('GPU Info:', info)
})

4. 打包优化

通过配置electron-builder减少最终包体积:

{
  "build": {
    "asar": true,
    "compression": "maximum",
    "removePackageScripts": true,
    "nodeGypRebuild": false,
    "npmRebuild": false
  }
}

5. 实战案例:构建Markdown编辑器

让我们将这些知识应用到一个实际项目中——开发一个功能完整的Markdown编辑器。

项目结构:

markdown-editor/
├── src/
│   ├── index.html
│   ├── renderer.js
│   ├── styles.css
├── main.js
├── preload.js
└── package.json

主进程增强功能:

// 添加文件操作功能
const { dialog } = require('electron')
const fs = require('fs')

ipcMain.handle('open-file', async () => {
  const { filePaths } = await dialog.showOpenDialog({
    properties: ['openFile'],
    filters: [{ name: 'Markdown', extensions: ['md', 'markdown'] }]
  })
  
  if (filePaths.length > 0) {
    return fs.readFileSync(filePaths[0], 'utf-8')
  }
  return null
})

ipcMain.handle('save-file', async (event, content) => {
  const { filePath } = await dialog.showSaveDialog({
    defaultPath: 'untitled.md',
    filters: [{ name: 'Markdown', extensions: ['md'] }]
  })
  
  if (filePath) {
    fs.writeFileSync(filePath, content)
    return true
  }
  return false
})

渲染进程实现编辑器界面:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Markdown Editor</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <div class="container">
    <div class="toolbar">
      <button id="open">Open</button>
      <button id="save">Save</button>
    </div>
    <div class="editor">
      <textarea id="input"></textarea>
      <div id="preview"></div>
    </div>
  </div>
  <script src="renderer.js"></script>
</body>
</html>

实现实时预览功能:

// 使用marked.js转换Markdown
const marked = require('marked')

document.getElementById('input').addEventListener('input', (e) => {
  document.getElementById('preview').innerHTML = marked.parse(e.target.value)
})

document.getElementById('open').addEventListener('click', async () => {
  const content = await window.electronAPI.openFile()
  if (content) {
    document.getElementById('input').value = content
    document.getElementById('preview').innerHTML = marked.parse(content)
  }
})

document.getElementById('save').addEventListener('click', async () => {
  const content = document.getElementById('input').value
  await window.electronAPI.saveFile(content)
})

这个案例展示了如何将Electron的核心功能整合到一个实用应用中。通过主进程处理文件系统操作,渲染进程负责UI交互,两者通过预加载脚本安全通信,既保证了功能完整性,又确保了应用的安全性。

Electron + vue构建跨平台应用--环境搭建及项目创建 VScode + Electron + vue构建跨平台应用 引用文本 知识点补充 VScode :一个前端开发工具; Electron:使用HTML,CSS和JavaScript来构建跨平台桌面应用程序; Vue :一套构建用户界面的渐进式javascript框架; 功能快捷键 撤销:Ctrl/Command + Z 重做:Ctrl/Command + Y 加粗:Ctrl/Command... 阅读详情

相关推荐

Vue项目使用electron打包桌面应用

本文介绍了如何在Vue3项目中使用Electron打包生成桌面应用程序,包含所有配置及所需的安装包

zyhui994的博客 1008

名词解释:npm,cnpm,yarn,vite,vue,electron

Vite 是一个新型的前端构建工具,由 Evan You(尤雨溪)开发,主要特点是利用原生 ES Module 加速开发环境的启动时间。由于网络条件的原因,在中国大陆访问 npm 官方源可能会遇到速度慢的问题,因此 cnpm 提供了一个完整的 npm 镜像站点 npmmirror.com,同步频率为每十分钟一次。Yarn 是由 Facebook 推出的一款快速、可靠、安全的依赖管理工具,旨在解决 npm 在某些场景下的不足之处。每个工具都有其独特的优势和适用场景,选择合适的工具对于项目的成功至关重要。

xiezhipu的博客 1529

保姆级教程:用YOLOv8/9/10搞定仪表盘指针识别,附完整数据集和Python环境配置

本文提供了一份基于YOLOv8/v9/v10的仪表盘指针检测全流程指南,涵盖环境配置、数据集构建、模型选型、训练调优和部署落地等关键步骤。通过详细的代码示例和实战经验,帮助开发者高效解决工业视觉中的仪表盘检测难题,特别适合电力巡检、智能监控等应用场景。

weixin_29031057的博客 1334

Vue3 + Electron 快速构建桌面应用:从环境配置到项目运行

本文详细介绍如何在国内环境下快速搭建Vue3+Electron项目。重点解决版本兼容性问题(需严格匹配Electron与Node.js版本)和网络下载问题。

2301_79843130的博客 2453

【Pico手势开发实战】基于SteamVR串流与MRTK3的跨平台交互方案

本文详细介绍了在Pico设备上,结合SteamVR串流与微软MRTK3框架,实现高效跨平台手势交互开发的完整方案。该方案通过在PC端运行Unity项目并串流至头显,利用MRTK3封装的手势识别与交互组件,大幅提升了开发调试效率与性能上限,并确保了未来向其他OpenXR设备的良好兼容性。

weixin_29001683的博客 216

fpga进阶--时序约束

1、基础概念 1.1 建立(setup)/保持(hold)时间 上述的锁存沿会将数据保存下来,但是必须要满足一定的条件: 建立时间Tsu:在时钟有效沿之前,数据必须保持稳定的最小时间; 保持时间Th:在时钟有效沿之后,数据必须保持稳定的最小时间; 1.2 亚稳态(Metastability) 亚稳态是由于违背了触发器的建立和保持时间而产生的,设计中任何一个触发器都有特定的建立和保持时间,在时钟上升沿前后的这段时间窗口内,数据输入信号必须保持稳定。如果信号在这段时间内发生了变化,那么输...

HHH的博客 2443

Electron 初体验,用 js 搭建桌面应用程序

Electron 简介 Electron 可以构建跨平台桌面程序(Mac、Windows、Linux),是一个使用 JavaScript, HTML 和 CSS 等 Web 技术创建原生程序的框架,它负责比较难搞的部分,你只需把精力放在你的应用的核心上即可。 相当于你会js、html 你就可以开发一个桌面程序,又给前端工程师扩展另外一条选择。 开源例子 vs code 微软家的编译器、也是大批开发者用的 编译器也是用它开发的。 github 的 Atom 编译器 音乐播放器 不止编译器,到用

terrybg 1万+

物流系统集成实战:从零开始用Java对接国际快递(DHL/FedEx/UPS)

本文详细介绍了如何使用Java技术栈对接DHL、FedEx和UPS三大国际快递巨头的API,构建高效、稳定的物流集成解决方案。内容涵盖认证机制、报文标准、多语言支持等关键点,并提供实战代码示例和最佳实践,帮助开发者快速实现国际快递系统集成。

efc1234567的博客 693

Electron 项目(一):使用 npm 创建项目

安装淘宝镜像: npm install -g cnpm --registry=https://registry.npm.taobao.org 全局安装 electron、electron-forge、electron-prebuilt-compile: cnpm install -g electron cnpm install -g electron-forge cnpm install -g electron-prebuilt-compile 使用 cmd 新建并进入 electron

2418

告别复杂配置!5分钟在Vue/React项目中集成讯飞语音听写WebSocket API

本文详细介绍了如何在Vue/React项目中快速集成讯飞语音听写WebSocket API,实现高效语音识别功能。通过对比不同通信方案,突出WebSocket在实时语音交互中的优势,并提供框架适配、音频处理及性能优化等关键技术点,帮助开发者5分钟内完成专业级语音听写功能集成。

weixin_28730353的博客 274

深度学习论文: Cultivated Land Extraction from High-Resolution Remote Sensing Image

深度学习论文: Cultivated Land Extraction from High-Resolution Remote Sensing Image The Winning Solution to the iFLYTEK Challenge 2021 Cultivated Land Extraction from High-Resolution Remote Sensing Image PDF: https://arxiv.org/pdf/2202.10974.pdf PyTorch代码: https:

mingo_敏 3479

使用 cnpm 安装 Electron,才是正确快速的方法

当然,下面是总结的几种安装 Electron 的方法,包括使用 npm 和 cnpm,以及一些常见的问题解决技巧。### 1. 使用 npm 安装 Electron#### 步骤 1: 初始化项目 在你的项目目录中初始化一个新的 Node.js 项目: ```bash npm init -y ```#### 步骤 2: 安装 Electron 将 Electron 安装为开发依赖项: ```bash npm install electron --save-dev ```#### 步骤 3: 验证安装 检查已

sinat_38424109的博客 1346

L2正则化与Ridge回归的关系

非常感谢您提供的详细任务描述和要求。我会尽力按照您的指引来撰写这篇技术博客文章。 L2正则化与Ridge回归的关系 1. 背景介绍 机器学习模型在训练过程中容易出现过拟合的问题,这会导致模型在训练集上表现很好但在测试集上泛化性能较差。为了解决这一问题,正则化技术应运而生。其中

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 656

关于Electron的环境搭建(附带npm,git的初步接触体验)

新人一个,刚刚接触js,html,css,并幸运的找到了一个能够包容我的公司。 目前只是能够简单的制作一些前端界面,还没有参与过svn这种大型团队项目当中,所以虽然听说过这个东西,但是却没有实际接触过。 这周公司领导让我接触Electron,我上网搜索了一下,并成功的把这个玩意弄到了电脑当中,在翻了很多的博客和各位前辈们的文后,总算是艰难的跑出了第一个例子。 在这里附上我在搭配Electro...

rengar7961的专栏 2141

芒果YOLOv12改进90:检测头篇之ShareSepHead:即插即用|原创新颖共享Sep检测头,更省参数量,更高效,打造新型YOLOv8检测器,精度高效涨点

芒果YOLOv12改进90:检测头篇之ShareSepHead:即插即用|原创新颖共享Sep检测头,更省参数量,更高效,打造新型YOLOv8检测器,精度高效涨点

包括YOLOv5、YOLOv7、YOLOv8等模型改进 343

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

electron-vue + element-ui构建桌面应用

转自:https://www.cnblogs.com/adorkable/p/11069923.html 最近需要用Node.js做一个桌面的应用,了解到electron可以用来做跨平台的桌面应用,而vue可以用来作为界面的解决方案,研究了一会儿如何把他们两个整合到一起使用,遇到了各种问题而放弃,毕竟作为一个非前端开发人员我的目的就是看这个东西能不能满足我的需求,而不想浪费太多的时间在...

又是再见? 3389

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

使用vue和electron进行桌面应用开发

使用vue和electron进行桌面应用开发, electron官网 , 面对需求,研究学习了两者的联合使用 vue,在前端领域比较火,轻量级的单页面应用框架,上手较angular,react会容易一些,而且vue-cli可以快速的新建一个工程。 Electron相当于一个浏览器的外壳,可以把网页程序嵌入到壳里面,可以运行在桌面上的一个程序,可以把网页打包成一个在桌面运行的程序,类似于我们电脑中的...

zoepriselife316的博客 1132

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

国内使用cnpm解决无法安装electron的问题

cnpm是什么? 一些国外的包用npm无法安装或者是非常慢,因为npmjs.org服务器在国外。为解决这个问题,阿里巴巴推出了cnpm工具,其服务器将npmjs.org镜像到国内,同步频率目前为 10分钟一次,以尽量与官方服务保持同步,你可以用此代替官方版本。 Election是什么? Election是一个用来开发跨平台桌面应用的框架,使用了Chromium来显示页面,这样 Chromium 的多进程结构也被充分利用。Chromium是现下最流行浏览器Chrome的内核,国内很多的浏览器都采用了此内核,包

爱玩的安哥 1224

vue项目使用Electron开发桌面应用

或者在项目根目录创建 .npmrc 文件,项目下 .npmrc 文件的优先级最高,可以给每个项目配置不同的镜像,项目之间的配置互不影响。在 vue.config.js 中 pluginOptions 配置。在 vue.config.js 中 pluginOptions 配置。安装完成运行electron -V,查看是否安装成功。cmd运行: npm config edit。请确保您的 node 版本大于等于 16。注释掉安装vue devtools的代码。然后保存并关闭该窗口。

孤傲的博客 2981

Electron安装及打包exe

一、安装node.js 二、安装淘宝镜像的包命令行管理工具cnpm 三、全局安装electron 四、安装git 五、快速上手electron 六、打包成exe 1. 全局安装打包神器electron-packager 2. 开始打包 (1) 在package.json文件中配置(推荐) (2) 直接在打包命令中设置参数

WWF_HelloWorld 5万+

Electron安装及项目创建

介绍了nodejs安装配置,Electron安装及项目创建

Clairesean的博客 1948

介绍 cnpm exec electron-packager

Electron应用开发完成后,需打包为各平台(Windows/macOS/Linux)的可执行文件(如exe/dmg/deb)。原生打包流程复杂,需处理依赖管理、平台适配、资源嵌入等问题。引用Electron官方示例:传统打包需手动配置Webpack脚本,而electron-packager直接调用系统级API实现高效封装。适合快速迭代的中小型项目。可防止用户直接篡改应用代码,提升安全性(但需注意仍有解包可能)。企业级项目强烈避免全局安装,防止多项目环境冲突。,尤其适合团队协作与CI/CD流水线。

xiezhipu的博客 612

2025最新Electron环境搭建,第一个Electron应用【详细教程】

cnpm是个中国版的npm,是淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm。安装好electron后,目录下自动生成node_modules目录,里面存放到electron所用到模块。由于国内网速问题,直接安装一般会失败。淘宝镜像是淘宝团队为国内用户提供的npm镜像源,它与官方镜像源保持同步,并提供了更快的下载速度。在使用npm初始化项目前,强烈建议将npm源更改到国内镜像源。

Zy100Papa的博客 5280

Electron环境搭建&打包桌面应用exe

目录 一、安装node.js 二、安装淘宝镜像的包命令行管理工具cnpm 三、安装electron 四、安装打包工具electron-packager 五、使用electron-packager打包成exe 一、安装node.js 到http://nodejs.cn/download/下载安装最新版本的node.js。默认安装即可。 (npm是node的模块管理工具,由node附带安装) 安装完成后,使用node -v检查nodejs是否安装成功: 二、安装淘宝镜像的包命令行管理.

dong123ohyes的专栏 609

Electron + VUE 快速构建桌面应用

Electron + VUE 快速构建桌面应用第一步 安装Nodejs第二步 搭建VUE开发环境第三步 安装Electron第四步 使用vue-cli脚手架工具来创建项目第五步 使用yarn安装依赖第六步 启动项目第七步 打包注:如遇到一下问题,解决方案 第一步 安装Nodejs 安装成功之后在cmd 输入node -v 可以查看到版本号 即代表安装成功 第二步 搭建VUE开发环境 安装脚手架工具vue-cli (可自行百度安装) npm install -g vue-cli 或者 cnpm instal

baidu_25948741的博客 648

pythonelectron桌面开发案例_使用Electron开发基于Node.js的桌面应用

最近小编在查看分享资料时,发现一个可以开发跨平台桌面应用的框架——NW.js(原名:node-webkit)。正当小编兴致勃勃的研究NW.js的时候,最基础的安装环节出了问题。无论用npm还是cnpm都无法完整下载所依赖的包(具体原因待考察)。鉴于此,我只能转向研究另一个同类型的框架——Electron(原名:Atom Shell)。首先,进入Electron的github官网,上边有详细的文档说...

weixin_39771987的博客 760
上一篇: Windows桌面运维必备的10个命令,解决90%的日常问题(附详细使用场景)
下一篇: 从双绞线到Wi-Fi 7:图解网络设备30年进化史,交换机如何干掉集线器
echo99
博客等级 码龄18年 40粉丝 1171原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值