手把手教你在Linux上构建Electron
开发electron最大的特点就是可以使用web技术来开发跨平台应用,大部分开发都是在windows/mac上开发的electron应用,我使用的是
electorn-builder
来构建应用,官网提供支持在windows上使用docker来实现Linux版本的构建。可以直接在Linux服务器上完成构建:
构建Linux环境的electron主要的步骤:
- 安装依赖:node、python(如需要)
- 将源代码上传到Linux环境
- 构建应用
安装步骤:
一、安装node
在Linux上安装nodejs,可以在windows上先下载把Linux版本的nodejs包下载到本地后,再拷贝到Linux上
1、查看Linux系统架构
uname -m | arch
2、下载nodejs
,Linux安装包下载:nodejs
3、下载到本地之后,将nodejs
压缩包上传到Linux服务器上,可以使用终端工具或者ssh传输MobaXTerm终端工具下载地址
将压缩包上传到服务器目录,一般是用户目录(/home/username)
~代表用户目录
4、将文件解压到指定nodejs的安装目录,这里安装到了/opt
目录下
在/opt下创建nodejs目录
cd /opt
mkdir nodejs
将压缩包拷贝到/opt/nodejs目录下
mv ~/node-v16.20.2-linux-x64.tar.xz /opt/nodejs
切换到/opt/nodejs目录下,解压压缩包
cd /opt/nodejs/
tar -xvf node-v16.20.2-linux-x64.tar.xz
记住解压的bin目录,后续设置环境变量
目录:
/opt/nodejs/node-v16.20.2-linux-x64/bin
5、使用vi或者vim命令编辑 /etc/profile
文件,将nodejs的bin目录添加到环境变量中
export PATH=“/opt/nodejs/node-v16.20.2-linux-x64/bin:$PATH”
vim /etc/profile
按下键盘的
i
即可编辑文件,在文件末尾添加环境变量,如下:
设置完毕后,按下
esc
键退出编辑模式,输入:wq!
保存编辑并退出修改了环境变量文件之后,需要重新加载配置文件以生效,使用命令
source /etc/profile
输入
node -v
测试是否安装成功
二、安装python
我的程序用到
grpc
,涉及到了node与c++的调用,为了包之间的适配,需要借用python环境来重新构建依赖以完成grpc与electron的适配
1、将python3.11.5在windows上下载后,上传到Linux
安装步骤:
cd python-3.11.5
./configure --preofx=/opt/python3
make j 10
:同时运行十个作业,若失败的话,可以使用make
su
make install
2、将 python3
目录下的 bin
目录设置环境变量
- vim /etc/profile
- export PATH=$PATH:/opt/python3/bin
- 设置完成保存后,重新运行配置文件:source /etc/profile
三、构建electron
将windows下开发的electron源代码拷贝到Linux上,保证将windows版本的node_modules删除,在Linux上进行编译
1、在Linux上的electron源代码目录下,确保没有windows版本的node_modules,然后进行构建:
设置npm和electron的镜像,可以使用国内淘宝镜像顺利的下载资源,执行 npm config edit
执行 npm config edit之后,会进入到 npm 的配置文件,设置镜像
ELECTRON_BUILDER_BINARIES_MIRROR=https://npmmirror.com/mirrors/electron-builder-binaries/ ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ registry=https://registry.npmmirror.com/
设置完镜像后退出
确保electron代码中对Linux下build进行了配置
linux: {icon,target: 'AppImage',maintainer: "zj" }
在electron的根目录下执行 npm install
我的代码中使用到了 grpc,可能会报错grpc与electron版本不兼容的问题,此时需要使用
electron-rebuild
来重新构建完成包之间的兼容安装了
electron-rebuild
之后,在 package.json 中的 scripts 中设置"rebuild": “electron-rebuild -f -w yourmodule”
执行
npm run rebuild
,开始重新构建。在我测试的时候发现:使用node16.20.2版本搭配python3.11.5版本可以完成rebuild
重新构建打包构建程序:
npm run electron:build
2、修改Linux下chrome-sandbox沙盒的权限
由于electron嵌入了Chromium和Node.js,
在Linux系统上,进程和文件的权限管理比其他操作系统更加严格和细粒度。
chrome-sandbox
是一个提升了特权的进程,它需要特定的权限来运行。
在构建代码后,运行.AppImage
程序,可能会报错:
The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that /tmp/.mount_xxxxx/chrome-sandbox is owned by root and has mode 4755.
3、设置chrome-sandbox权限
需要将
node_modules/electron/dist/chrome-sandbox
设置权限为4755,并且设置root用户权限执行命令:
sudo chown root:root chrome-sandbox && sudo chmod 4755 chrome-sandbox
重新构建build
4、禁用沙盒
若设置chrome-sandbox权限后,重新构建仍然报错,可以禁用沙盒运行程序
在启动程序后面加参数
--no-sandbox
执行:
./electron-app --no-sandbox
。此时可以成功运行程序
环境变量配置
Linux上设置环境变量的两种方式:1. 全局设置,设置后所有用户生效 2. 设置属于指定用户的环境变量
- 全局:
/etc/profile/
- 设置PATH:
export PATH=/opt/nodejs/bin:$PATH
- 设置PATH追加:
export PATH=$PATH:/opt/python3/bin
- 设置完PATH之后需要重新运行:
source /etc/profile
- 设置PATH:
- 用户的环境变量:
~/.bashrc
|~/.cshrc
相关文章:

手把手教你在Linux上构建Electron
开发electron最大的特点就是可以使用web技术来开发跨平台应用,大部分开发都是在windows/mac上开发的electron应用,我使用的是electorn-builder来构建应用,官网提供支持在windows上使用docker来实现Linux版本的构建。可以直接在Linux服务器上完…...

力扣【448-消失的数字】【数组-C语言】
题目:力扣-448 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。 把数组中存在[1…n]的元素放其元素值-1的位置上,第一个fo…...

面试题:排序算法的稳定性?(文末有福利)
回归面试题! 回答重点 稳定的排序算法:冒泡排序、插入排序、归并排序、计数排序。 不稳定的排序算法:选择排序、快速排序、堆排序、希尔排序。 扩展知识 1)冒泡排序(Bubble Sort) 原理: 冒…...

在Jdk1.8中Collectors和Comparator使用场景
在Jdk1.8中Collectors和Comparator使用场景 Collectors 和 Comparator 是 Java 8 引入的两个非常重要的类,它们在处理集合和流(Streams)时起着重要的作用。以下是这两个类的使用场景以及它们的典型用法。 1. Collectors Collector…...

linux-性能优化命令
top 我们先来说说top命令用法,这个命令对于我们监控linux性能是至关重要的,我们先来看看展示结果。 top - 15:20:23 up 10 min, 2 users, load average: 0.39, 0.53, 0.35 Tasks: 217 total, 1 running, 216 sleeping, 0 stopped, 0 zombie %C…...

基于MT79815G CPE 板子上挂usb3.0的5G 模块,WIFI能跑多少速度呢
关于MT79815G CPE 板子上挂usb3.0的5G 模块,WIFI能跑多少速度的问题,我们以启明智显 ZX7981P智能无线接入型路由器(CPE)挂广合通5G模组为例说明: 一般来说,用 ZX7981P,通过软加速,U…...

R包compareGroups详细用法
compareGroups compareGroups 是一个功能强大的 R 包,专为数据质量控制、数据探索和生成用于出版的单变量或双变量表格而设计。它能够创建各种格式的报表,如纯文本、HTML、LaTeX、PDF、Word 或 Excel 格式,并显示统计数据(均值、…...

如何选择高品质SD卡
如何选择高品质SD卡 SD卡(Secure Digital Memory Card)是一种广泛使用的存储器件,因其快速的数据传输速度、可热插拔的特性以及较大的存储容量,广泛应用于各种场景,例如在便携式设备如智能手机、平板电脑、运动相机等…...

C++学习:模拟priority_queue
一:仿函数 开始模拟前咱先了解一下仿函数。有了它,我们就可以自己传个代码让优先级队列升序还是降序,自己模拟时也不用在需要升序降序时改代码。这是个很有用的东西。 不写模版也可以,但模版能用在更多地方嘛 template <class …...

同程旅行对标拼多多:“形似神不似”
文:互联网江湖 作者:刘致呈 业绩好,并不意味着同程旅行就能高枕无忧了。 最近,媒体曝出:有用户在同程旅行APP上预订酒店,在预订成功并付款后,结果第二天却被酒店告知,没有查到相关…...

HOJ网站开启https访问 申请免费SSL证书 部署证书详细操作指南
https://console.cloud.tencent.com/ 腾讯云用户 登录控制台 右上角搜SSL 点击 SSL证书 进入链接 点申请 免费证书 有效期3个月 (以后每三个月申请一次证书 上传) 如果是腾讯云申请的域名 选 自动DNS验证 自动添加验证记录 如果是其他平台申请域…...

程序设计基础I-实验4 循环结构之for语句
7-1 sdut-C语言实验-AB for Input-Output Practice (Ⅳ) Your task is to Calculate a b. 输入格式: Your task is to Calculate a b. 输出格式: For each pair of input integers a and b you should output the sum of a and b in one line, and with one line of out…...

深入工作流调度的内核
在大数据时代,工作流任务调度系统成为了数据处理和业务流程管理的核心组件,在大数据平台的构建和开发过程中尤为重要。随着数据量的激增和业务需求的多样化,合理的任务调度不仅能够提高资源利用率,还能保证业务流程的稳定和高效运…...

vue3中动态引入组件并渲染组件
在开发中 有时会在打包或者各种可能的情况下 报错或警告提示 模块化打包的问题, 我们需要动态引入组件并渲染组件时,可以使用import引入 如下举例 import { ref, markRaw } from vue const childrenComponent ref(); onMounted(() > {//举例引入一个…...

【艾思科蓝】网络安全的隐秘战场:构筑数字世界的铜墙铁壁
第七届人文教育与社会科学国际学术会议(ICHESS 2024)_艾思科蓝_学术一站式服务平台 更多学术会议请看:https://ais.cn/u/nuyAF3 目录 引言 一、网络安全:数字时代的双刃剑 1.1 网络安全的定义与重要性 1.2 网络安全威胁的多元化…...

将图片资源保存到服务器的盘符中
服务类 系统盘符:file-path.disk(可能会变,配置配置文件dev中)文件根路径:file-path.root-path(可能会变,配置配置文件dev中)http协议的Nginx的映射前缀:PrefixConstant.…...

数学建模练习小题目
题目A 有三名商人各带一名仆人过河,船最多能载两人。在河的任何一岸,若仆人数超 过商人数,仆人会杀商人越货。如何乘船由商人决定,问是否有安全过河方案,若有,最少需要几步? 定义变量 商人和仆人的状态…...

不可错过的10款文件加密软件,企业电脑加密文件哪个软件好用
在信息安全日益重要的今天,企业和个人都需要可靠的文件加密软件来保护敏感数据。以下是2024年不可错过的10款文件加密软件,它们以强大的加密功能和易用性而闻名。 1.安秉加密软件 安秉加密软件是一款专为企业设计的信息安全管理工具,采用驱动…...

常用卫星学习
文章目录 Landsat-8 Landsat-8 由一台操作陆地成像仪 (OLI) 和一台热红外传感器 (TIRS)的卫星,OLI 提供 9 个波段,覆盖 0.43–2.29 μm 的波长,其中全色波段(一般指0.5μm到0.75μm左…...

音视频入门基础:FLV专题(3)——FLV header简介
一、引言 本文对FLV格式的FLV header进行简介,FLV文件的开头就是FLV header。 进行简介之前,请各位先从《音视频入门基础:FLV专题(1)——FLV官方文档下载》下载FLV的官方文档《video_file_format_spec_v10_1.pdf》和…...

python中数据处理库,机器学习库以及自动化与爬虫
Python 在数据处理、机器学习和自动化任务方面非常强大,它的库生态系统几乎涵盖了所有相关领域。我们将从以下几个部分来介绍 Python 中最常用的库: 数据处理库:Pandas、NumPy 等机器学习库:Scikit-learn、TensorFlow、Keras 等自…...

2024最新测评:低代码平台在企业复杂应用场景的适用性如何?
低代码平台种类多,不好一概而论。但最近有做部分低代码平台的测评,供大家参考。 一个月前接到老板紧急任务:调研有没有一款低代码平台能开发我司的软件场景。我司是一家快速发展中的制造业企业,业务遍布全国,需要一个…...

URL中 / 作为字符串,而不是路径。
在Harbor中,仓库路径是二级,有时候在打镜像的时候,会把 / 作为字符串打进去,URL访问的时候有可能就当路径了。 解决办法:/ 转义 %252F...

el-input只能输入指定范围的数字
el-input只能输入指定范围的数字 需求:el-input只能输入指定范围的数字,不采用el-input-number组件。 几个关键点如下 v-model.numbertype"number"min"1" max"999999" 数字的范围 οninput"validity.valid ||(value…...

数据结构编程实践20讲(Python版)—01数组
本文目录 01 数组 arrayS1 说明S2 举例S3 问题:二维网格中的最小路径求解思路Python3程序 S4 问题:图像左右变换求解思路Python3程序 S5 问题:青蛙过河求解思路Python3程序 写在前面 数据结构是计算机科学中的一个重要概念,用于组…...

数据库实验2—1
10-1 查询重量在[40,65]之间的产品信息 本题目要求编写SQL语句, 检索出product表中所有符合40 < Weight < 65的记录。 提示:请使用SELECT语句作答。 表结构: CREATE TABLE product (Pid varchar(20), --商品编号PName varchar(50), --商品名称…...

现代前端框架实战指南:React、Vue.js、Angular核心概念与应用
随着互联网技术的发展,前端开发变得越来越复杂。 为了应对这些挑战,前端框架应运而生,它们提供了丰富的功能和工具,帮助开发者更高效地构建 和维护大型前端应用。前端框架是现代Web开发中不可或缺的一部分,它们提供了…...

MySQL --用户管理
文章目录 1.用户1.1用户信息1.2创建用户1.3删除用户1.4修改用户密码 2.数据库的权限2.1给用户授权2.2回收权限 如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理。 1.用户 1.1用户信息 MySQL中的用户,都存储在系…...

详解前驱图与PV操作
前驱图、PV操作 前驱图与PV操作的结合例子:两个进程的同步问题使用PV操作实现同步 前驱图的实际应用更复杂的场景示例示例1:前驱图与PV操作的结合1. 前驱图表示2. 使用信号量(PV操作)实现同步进程的执行逻辑: 3. 示例代…...

孩子来加拿大上学真的那么轻松吗?(上)
点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 封面 / 姝琦Midjourney 产品统筹 / bobo 这是拼娃时代第三十一期节目,经过了一年的沉寂,拼娃时代在今年九月份终于恢复更新啦,JunJun老师也…...