Electron 开发应用程序

本文介绍了如何利用Electron(结合Chromium和NodeJS)开发桌面应用程序,如Visual Studio Code。在开发过程中,重点讨论了后端开发的挑战,包括加载dll、处理V8引擎接口和编写兼容的NodeJS扩展。提到了使用NAN或N-API来确保AddOn在不同版本间的兼容性,以及在Angular框架下与Electron集成时需要注意的细节,如修正HTML的<base>标签和调整tsconfig.json的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Electron结合了Chromium和NodeJS,使得用JS开发应用程序成为可能,比如微软的Visual Studio Code就是用Electron开发的。Electron利用了Chromium的前端显示功能(解析和显示HTML以及 javascript code)同时利用NodeJS 可以访问本地文件的功能来解决浏览器本身的一些限制。

我们在用Electron做一些开发的时候,前端基本没什么问题,比如你用的是Angular框架或者Vue框架等等,但是在进行后端开发的时候,由于有很多的业务逻辑需要利用其它语言写或者利用老的dll,那么就需要特别注意:

1. Electron用的是NodeJS的require功能来加载模块的,它支持的语言是c++,所以需要写单独的Addon(NodeJS 扩展)去加载(LoadLibrary)你要用的dll,简单的将之前的dll代码复制,重新编译,并不一定能用。

2. Electron前后端用来解析JavaScript的V8引擎是一个,通常情况下是用的Chromium带的V8 引擎,所以你在编写AddOn的时候要注意,利用的API不是要对应NodeJS的V8接口,V8接口通常情况下在各个版本是不同的。

3. 在编写AddOn的时候最好用NAN(NAPI)或者N-API,前者可以让你写的AddOn在不同的版本下安装(npm install module)的时候重新编译,不需要重写代码, 后者(N-API)可以让你写的程序编译后,不需要重新编译,只要你写程序时的NodeJS 对应的ABI版本和Electron里用的NodeJS的ABI版本是一个就行。

4. 如果是用NAN编写的AddOn在下载完后重新编译的时候,要用Electron-rebuild模块重新编译,

### 开始使用 Electron 开发桌面应用程序 #### 准备工作环境 为了开始使用 Electron 进行开发,首先需要准备合适的工作环境。这通常意味着安装 Node.js 和 npm (Node Package Manager),因为 Electron 是基于这些技术栈构建的工具。 对于具体的项目初始化,在 React 应用程序的根目录下,可以通过命令 `npm install electron --save-dev` 来安装 Electron 作为开发依赖[^2]。此操作会将 Electron 添加到项目的 devDependencies 中,确保它仅用于开发阶段而非生产环境中的一部分。 #### 创建基础结构 一旦设置了必要的依赖项之后,下一步就是搭建应用的基础架构。这意味着要创建一个基本的应用程序框架,包括主进程文件(main process file)——即启动整个应用的地方以及渲染器进程(renderer process files)——负责显示网页内容给用户的HTML/JSX 文件等。 脚手架应用程序的过程涉及设置 package.json 配置文件来定义启动参数和其他元数据信息,并编写 main.js 或类似的入口点代码以加载窗口并指定其行为方式[^1]。 #### 编写第一个 Electron 应用 当一切准备好以后就可以着手于实际编程了。下面是一个简单的例子展示如何利用 JavaScript 实现打开浏览器窗口的功能: ```javascript const { app, BrowserWindow } = require('electron') function createWindow () { const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true } }) win.loadFile('index.html') } app.whenReady().then(createWindow) app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit() } }) app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow() } }) ``` 这段代码展示了如何配置一个新的浏览器窗口实例(`BrowserWindow`)及其属性,比如宽度、高度和是否启用 Node.js 集成;同时也指定了该窗口应该加载哪个 HTML 页面 (`win.loadFile('index.html')`). 另外还处理了一些常见的生命周期事件如所有窗口关闭时退出应用程序的行为. #### 扩展功能 随着对核心概念的理解加深,开发者可以根据需求向应用程序中加入更多特性。例如,通过调用 Electron 提供的各种 API 接口实现与本地系统的交互,像创建自定义菜单条目、弹出消息框或是读取保存文件等等[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值