如何搭建 Electron 项目

前言

前段时间帮一个不是程序员的朋友搭建了属于自己的博客,但是他不会 Github 和 VS Code,这就让更新博客成为一件麻烦事。

又因为朋友的特殊使用习惯,单纯使用网页更新的话,安全性得不到保障,而且不能初始化和自定义设置。因为我没服务器,无法搭建 http 服务和数据库。

思考了一段时间,突然想起我是个前端啊,那用 Electron 直接写个桌面应用不就行了。敏感数据直接保存到本地,也不用担心安全问题,还省了服务器的费用(这是重点)。

Electron 官方文档

create-vue 文档

环境

node: 18.16.0

npm: 9.5.1

electron: 24.2.0

vite: 4.3.2

vue: 3.2.47

实现

初上手 Electron,目录结构犯了难,是把 Vue 项目直接放在 Electron 项目内好呢,还是分开好一些。

在网上搜了一下最佳实践,好像都有。

偶然间在知乎看见一个大佬解释 Electron 项目,“其实把 Electron 想象成在本地部署运行的 node 服务和 Vue 项目就行了,不要过多思考 Electron 的定位”。

这一下茅塞顿开,决定将 Vue 和 Electron 分别存放开发。

这样以后将页面单独剥离,作为 web 项目开发,也不会有什么阻碍。

初始化 Electron 项目和 Vue 项目

Electron 项目推荐跟着 Electron 快速入门 来搭建,简单易上手。

Vue 项目推荐使用 create-vue 脚手架来搭建,也是简单易上手,毕竟我们的目标是快速开发应用。

整合 Electron 和 Vue

当两个项目初始化成功,那接下来的最大问题就是,如何同步开发与打包。

同步开发

练习了 Electron 快速入门 的人,自然会记得创建窗口的 createWindow 方法内,win 对象调用的 loadFile 方法,它的入参是一个地址。

而我们本地运行的 Vue 项目也提供了一个本地地址,http://localhost:5173/。

没错,我们可以直接把这个地址作为入参传入 loadFile 方法,实现同步开发,不用在每次 Vue 更新代码后重新打包。

1const createWindow = () => { 2 const win = new BrowserWindow({ 3 width: 800, 4 height: 600, 5 }); 6 7 win.loadFile("http://localhost:5173/"); 8};

同步打包

开发的时候,可以使用本地地址,那打包的时候就不行了呀。Electron 项目是需要使用入口文件 index.html 的,如果 Vue 项目在项目文件夹内打包,Electron 项目肯定是引用不到的,那该如何解决这个问题呢?

也很简单,直接修改 Vite 的配置文件,将输出路径改为 Electron 的根目录。之所以是根目录,是因为放在别的路径下,Electron 并不能很好的识别到依赖文件并进行打包,当然也可能是因为我还没有完全了解 Electron 的配置。

网上有推荐 electron-builder 插件包,来实现打包操作,但根据我的使用体验,electron-forge,这个官方的打包插件已经能满足我的需要了。

vue-app/vite.config.ts

1import vue from "@vitejs/plugin-vue"; 2import { defineConfig } from "vite"; 3 4// https://vitejs.dev/config/ 5export default defineConfig({ 6 base: "./", 7 build: { 8 outDir: "../electron-app", 9 emptyOutDir: false, // 这个很重要,别把Electron项目文件夹给清空了 10 }, 11 plugins: [vue()], 12});
1const NODE_ENV = process.env.NODE_ENV 2 3const config = { 4 production: { 5 loadFile: path.join(__dirname, `./index.html`), 6 }, 7 development: { 8 loadFile: 'http://localhost:5173/' 9 }, 10} 11 12const createWindow = () => { 13 const win = new BrowserWindow({ 14 width: 800, 15 height: 600, 16 }); 17 18 win.loadURL(config[NODE_ENV]?.loadFile || path.join(__dirname, `./index.html`)); 19};

编写 package.json 文件

这个 package.json 文件并不是 Electron 项目或者 Vue 项目的,而是属于包裹着这两个项目的 npm 项目的配置文件。

我们需要编写安装,运行,打包三个命令。

大致目录结构如下:

1─electron-template 2 ├─electron-app 3 ├─vue-app 4 └─package.json

安装

没什么好说的,&& 串行执行。

1{ 2 "scripts": { 3 "electron:install": "cd ./electron-app && yarn install", 4 "vue:install": "cd ./vue-app && yarn install", 5 "all:install": "yarn vue:install && yarn electron:install" 6 } 7}

运行

cross-env 是运行跨平台设置和使用环境变量的脚本,创造一个全局环境变量,主要用来区分开发与生产环境

concurrently 是前端工程化并行解决方案,就是并行运行多条命令

wait-on 是跨平台异步方式调用同步方法插件包,简单理解就是 async 和 await

1{ 2 "scripts": { 3 "electron:start": "wait-on tcp:5173 && cd ./electron-app && yarn start", 4 "vue:start": "cd ./vue-app && yarn dev", 5 "all:start": "cross-env NODE_ENV=development concurrently -k \"yarn vue:start\" \"yarn electron:start\"" 6 } 7}

打包

看前面的解释 =_=

1{ 2 "scripts": { 3 "electron:build": "cd ./electron-app && yarn make", 4 "vue:build": "cd ./vue-app && yarn build", 5 "all:build": "cross-env NODE_ENV=production yarn vue:build && yarn electron:build" 6 } 7}

执行打包命令

在根目录执行all:build打包命令,如果在 Electron 项目根目录下出现 out 文件夹,就代表你打包成功。

1yarn all:build

打开里面的 exe 文件,如果你能看见以下截图画面,就代表你成功运行了 Electron 项目。

具体的代码可以到 我的仓库 查看。

图片

点赞
收藏

评论区

加载中...

相关推荐

VuePress 博客优化之 last updated 最后更新时间如何设置

前言在中,我们使用VuePress搭建了一个博客,但是浏览最终搭建的站点:,我们会发现,在每篇文章的底部,并没有像VuePress官方文档那样,出现最后更新的时间:这篇我们来探究下如何实现最后更新时间。官方自带查阅VuePress的,我们可以知道,VuePress自带显示最后更新时间的插件,在默认主题下,无需安装本插件,因为VuePre

VuePress 博客优化之增加 Valine 评论功能

前言在中,我们使用VuePress搭建了一个博客,最终的效果查看:。本篇讲讲如何使用Valine快速的实现评论功能。主题内置因为我用的是vuepressthemereco主题,主题内置评论插件@vuepressreco/vuepressplugincomments,可以根据自己的喜好选择Valine或者Vssue。本篇讲讲使用Val

VuePress 博客优化之增加 Vssue 评论功能

前言在中,我们使用VuePress搭建了一个博客,最终的效果查看:。本篇讲讲如何使用Vssue快速的实现评论功能。主题内置因为我用的是vuepressthemereco主题,主题内置评论插件@vuepressreco/vuepressplugincomments,可以根据自己的喜好选择Valine或者Vssue。那我们来介绍下Vss

一篇从购买服务器到部署博客代码的详细教程

前言我们在实现了VuePress搭建个人博客,在和实现了代码自动同步和部署Github和Gitee,但我最终还是决定自己建站,说干就干,那我们开始吧。买服务器因为个人的工作经历,选择了阿里云服务器,我们直接买个云服务器ECS,所谓ECS服务器,直接引用官方的介绍:云服务器ECS(ElasticComputeService)是一种

Hexo+Kaze+Gitee Pages 搭建静态博客网站

前言建网站本身是一个很大的工程,涉及前端页面的搭建,网站数据的存储,还要购置服务器资源,甚至是后期的维护,过程相当繁琐。不过如果仅仅是想搭建个人的网站,写写博客,想要美观,又不想操心太多和写博客无关的事情。那么,HexoKazeGiteePages的方式就很适合你。本文就讲下如何借助这三样免费的技术或服务,来搭建一个可访问的

GitHub终于可以免费创建私有代码库了

!(https://oscimg.oschina.net/oscnet/0b6f0c9a1faec953273b1be6a8dd96203b6.jpg)相信应该很多朋友都在使用GitHub。但是有一些自己的文件不想被别人看到,于是想建一个私有库吧,以前可那要收费的所以有些朋友就自己搞一台虚机,搭建一个Git服务器(带宽还不受