2024年了,如何从 0 搭建一个 Electron 应用

本文介绍了Electron框架,一种使用Web技术开发跨平台桌面应用的方法。作者分享了从准备开发环境到使用ElectronForge模板快速创建项目的步骤,包括遇到的问题和解决方案。
摘要由CSDN通过智能技术生成

一、简介

Electron 是一个开源的跨平台桌面应用程序开发框架,它允许开发者使用 Web 技术(如 JavaScript、HTML 和 CSS)来构建桌面应用程序。Electron 嵌入了 Chromium(一个开源的 Web 浏览器引擎)和 Node.js(一个运行在服务器端的 JavaScript 运行时环境),使得开发者能够创建既具有现代 Web 应用的丰富交互性,又具备传统桌面应用的功能和性能的应用程序。

程序员每天离不开的 Visual Studio Code,以及团队协作软件 Slack,聊天社区 Discord 的客户端,都是用 Electron 开发的,虽然因为其原理,需要同时打包 node.jsChromium 在最后的软件包里,使得分发包比较大,但是 Electron 框架周边成熟度兼容性开发体验真的很棒。仍然是现在桌面端跨平台开发的首选技术之一。最近,我就利用 Electron 技术开发了一个博客客户端软件 HexoPress,开源在 GitHub。从 0 开始学习并完整体验了 Electron 开发的各个方面。

本文给大家分享,2024 年,如何从 0 开始创建一个 Electron 项目。

二、准备工作

首先你需要一个开发环境,我会使用 Mac 作为例子,如果你使用的是 Windows,我建议通过虚拟机安装 Linux,会跟在 Mac 下差不多的体验,但是在 Windows 上,相对来说不像前两者那么方便。

开始之前,你首先需要安装 Node.js 的开发环境,在 Mac 就是:

brew install node

或者,你可以使用 nvm 来管理电脑上安装的 node 环境的多个版本。本文就不介绍了。npm 也是一个必须的工具,不过安装好 node,会自动就安装了 npm

你可以登录 Electron 的官网,在文档页面,会看到一些指引。官方文档的“快速开始”,可以仔细阅读一下,这个文档重点介绍了 Electron 项目启动的最小规模,需要四个重要文件,main.jspreload.jsrenderer.jsindex.html,官方文档会介绍这四个文件的作用,以及引导开发者,从 0 手动创建一个项目脚手架。此外提供了一个示范项目,在 GitHub 搜索 electron/electron-quick-start 可以找到。

官方还提供一个类似 Playground 的地方,供每个开发者实验自己的想法,叫 Electron Fiddle,是一个客户端软件,会把刚才的那四个文件组装成一个临时的 Electron App,供开尝试。也是不错的上手方式。

三、快速开始

如果,你去阅读文档,然后搞清楚所有原理,并手动创建了项目,那么就不能称为是“快速开始”了。真正比较快速的方式是,通过项目的模板来快速构建一个项目脚手架。而官方实际上也提供了这样的项目模板,但是我不明白,为什么官方文档把这个放在那么深的入口,非常不易找到。

这个项目的模板,其实是官方的打包工具 Electron Forge 提供的,下面介绍怎么使用这个模板。

npm init electron-app@latest my-first-electron-app -- --template=vite-typescript

这个命令是用来创建一个新的 Electron 应用的。这里是它的各个部分的详细解释:

  • npm init: 这是一个 npm 命令,用于初始化一个新的 Node.js 项目。它会创建一个新的 package.json 文件,这个文件包含了项目的元数据和依赖信息。
  • electron-app@latest: 这是一个 npm 包的名称和版本。electron-app 是一个用于创建 Electron 应用的模板,@latest 表示我们想要使用的是这个包的最新版本。
  • my-first-electron-app: 这是新项目的名称。这个命令会在当前目录下创建一个名为 my-first-electron-app 的新目录,并在这个目录中初始化新的 Electron 项目。
  • --: 这个符号是用来分隔命令和选项的。在这个符号之后的所有内容都会被视为选项,而不是命令的一部分。
  • --template=vite-typescript: 这是一个选项,用于指定我们想要使用的项目模板。在这个例子中,我们选择的是 vite-typescript 模板,这是一个使用 Vite 和 TypeScript 的 Electron 项目模板。这里还有一些选项,比如 webpack,比如 vite,区别是没有 typescript。不过既然大家都选择看本文来学习的话,我推荐学学 typescript,因为是适合构建大型项目的技术,如果怕麻烦,可以不选 ts,因为真的有一点点麻烦,在前期容易造成学习的障碍。

所以,整个命令的意思是:使用 electron-app 包的最新版本,初始化一个名为 my-first-electron-app 的新 Electron 项目,并使用 vite-typescript 模板。

顺利的话,现在你已经初始化了一个项目的脚手架。如果不顺利的话,比如我,就碰到了一些问题。比如,这个工程中调用了 yarn,就出现了报错。(虽然我是用 npm 执行的命令,但是里面有用 yarn 调用的脚本。)

  ✖ Failed to install modules: ["@electron-forge/plugin-vite@^7.2.0","@typescript-eslint/eslint-plugin@^5.0.0","@typescript-eslint/parser@^5.0.0","eslint@^8.0.1","…
    With output: Command failed with a non-zero return code (1):
    yarn add @electron-forge/plugin-vite@^7.2.0 @typescript-eslint/eslint-plugin@^5.0.0 @typescript-eslint/parser@^5.0.0 eslint@^8.0.1 eslint-plugin-import@^2.25.0…
    yarn add v1.22.21
    info No lockfile found.
    [1/4] Resolving packages...
    info Visit https://yarnpkg.com/en/docs/cli/add for documentation about this command.
    (node:89705) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
    (Use `node --trace-deprecation ...` to show where the warning was created)
    error Error: certificate has expired
    at TLSSocket.onConnectSecure (node:_tls_wrap:1674:34)
    at TLSSocket.emit (node:events:515:28)
    at TLSSocket._finishInit (node:_tls_wrap:1085:8)
    at ssl.onhandshakedone (node:_tls_wrap:871:12)
    (node:89705) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
    (Use `node --trace-deprecation ...` to show where the warning was created)
    error Error: certificate has expired
    at TLSSocket.onConnectSecure (node:_tls_wrap:1674:34)
    at TLSSocket.emit (node:events:515:28)
    at TLSSocket._finishInit (node:_tls_wrap:1085:8)
    at ssl.onhandshakedone (node:_tls_wrap:871:12)
  ⚠ Finalizing dependencies

真是糟糕的体验,具体错误是中间的一行 error Error: certificate has expired。解决办法是,可以把对 SSL 的校验给关闭。

yarn config set "strict-ssl" false -g  #关闭检查
yarn config list                       #显示所有配置,检查确认

UPDATE:这里给大家认个错,上面的解决方法是错误的。虽然也能绕开问题往下走,但是,是一种很坏的习惯。 请看这篇文章,详细解释了原因。正确解决方法是,检查自己是否使用了过期的 registry 镜像,更换为有效的镜像(https://registry.npmmirror.com)或者官方镜像(https://registry.npmjs.org/)。或者检查系统的代理配置,根证书配置等。

再次执行刚才的 init 试试。这次我们看到项目初始化成功了。

在这里插入图片描述
上面就是用 electron-forge 提供的模板创建的项目脚手架目录。使用 Vite + TypeScript 创建出来的脚手架项目,真的非常有意思。因为如果你开发过 Electron 就会知道,官方文档只有使用 js 的范例代码,完全没说如果想用 TypeScript 的话,应该怎么写代码。所以这个脚手架可谓是极其具有参考价值

在命令行中,进入到项目目录,执行:

yarn install
yarn start

你的第一个 Electron App 启动了!!

在这里插入图片描述

四、后续(完)

现在你可以仔细看看你的目录结构了,这个 vite-typescript 的模版,特点是全部使用 ts,如果用 js 的话,文件组织形式会有不同,不过我个人很喜欢 ts,会让目录看起来更简洁一点,后续我会介绍更多的细节的点,比如我要用 Vue 3 + TypeScript 来开发 App,如果 Electron 的部分是 js 的,而 Vue 3 是 ts,就很不符合我的审美。

比如大家可以看看我现在的那个项目 HexoPress,前面有链接,就是这种混搭,让我极其不爽。

既然您已经看到这里了,不如帮我点个免费的👍和⭐️吧,这是对我最大的鼓励,🙏谢谢!

  • 46
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
A:要搭建一个用Vue3框架的Electron项目,可以按照以下步骤进行: 1. 安装Electron和Vue CLI 需要全局安装Electron和Vue CLI,可以使用以下命令进行安装: ``` npm install -g electron npm install -g @vue/cli ``` 2. 创建Vue3项目 使用Vue CLI创建一个新的项目,可以通过以下命令创建: ``` vue create my-electron-project ``` 在创建时选择默认的配置和Babel编译器。 3. 集成Electron 在项目根目录下新建一个`main.js`文件,并在其中引入Electron: ``` const { app, BrowserWindow } = require('electron') function createWindow () { // 创建窗口 const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true, contextIsolation: false, } }) // 加载Vue应用 win.loadURL('http://localhost:8080/') } app.whenReady().then(() => { createWindow() app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow() } }) }) app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit() } }) ``` 这个文件主要用于创建一个Electron窗口,同时在窗口中加载Vue应用。 4. 修改Vue配置 在Vue项目中,需要安装一些插件来支持Electron,同时需要进行一些配置。在`package.json`文件中添加以下内容: ``` { "main": "main.js", "scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build && electron .", "electron:serve": "vue-cli-service build && electron . --serve", "electron:build": "vue-cli-service build && electron-builder" }, "dependencies": { "electron": "^13.1.2" }, "devDependencies": { "electron-builder": "^22.11.7", "vue-cli-plugin-electron-builder": "^2.0.0-rc.3" }, "electronBuilder": { "builderOptions": { "appId": "com.example.myapp", "productName": "My App", "win": { "target": "nsis" } } } } ``` 其中`dependencies`添加了`electron`,`devDependencies`添加了`electron-builder`和`vue-cli-plugin-electron-builder`,`electronBuilder`中的配置是为了在打包时使用。 还需要在`src`目录下新建一个`background.js`文件: ``` const { app, BrowserWindow } = require('electron') let mainWindow = null app.on('ready', () => { mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { webSecurity: false, nodeIntegration: true, contextIsolation: false } }) mainWindow.loadURL('http://localhost:8080') }) ``` 这个文件用于创建Electron窗口,同时在窗口中加载Vue应用。 5. 运行程序 现在可以运行程序了,在终端中运行以下命令: ``` npm run electron:serve ``` 这个命令会同时启动Vue开发服务器和Electron程序,用于测试程序。 6. 打包程序 如果需要打包程序,可以运行以下命令: ``` npm run electron:build ``` 这个命令会生成打包文件,可以在`dist_electron`目录下找到打包结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Charles@TechBlog

您的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值