当前位置: 首页 > news >正文

手把手教你在Linux上构建Electron

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

构建Linux环境的electron主要的步骤:

  1. 安装依赖:node、python(如需要)
  2. 将源代码上传到Linux环境
  3. 构建应用

安装步骤:

一、安装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目录下

  1. 在/opt下创建nodejs目录

    cd /opt

    mkdir nodejs

  2. 将压缩包拷贝到/opt/nodejs目录下

    mv ~/node-v16.20.2-linux-x64.tar.xz /opt/nodejs

  3. 切换到/opt/nodejs目录下,解压压缩包

    cd /opt/nodejs/

    tar -xvf node-v16.20.2-linux-x64.tar.xz

  4. 记住解压的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”

  1. vim /etc/profile

  2. 按下键盘的 i 即可编辑文件,在文件末尾添加环境变量,如下:

    在这里插入图片描述

  3. 设置完毕后,按下 esc 键退出编辑模式,输入 :wq! 保存编辑并退出

  4. 修改了环境变量文件之后,需要重新加载配置文件以生效,使用命令 source /etc/profile

  5. 输入 node -v 测试是否安装成功

二、安装python

我的程序用到grpc,涉及到了node与c++的调用,为了包之间的适配,需要借用python环境来重新构建依赖以完成grpc与electron的适配

1、将python3.11.5在windows上下载后,上传到Linux

安装步骤:

  1. cd python-3.11.5

  2. ./configure --preofx=/opt/python3

  3. make j 10 :同时运行十个作业,若失败的话,可以使用make

  4. su

  5. make install

2、将 python3 目录下的 bin 目录设置环境变量

  1. vim /etc/profile
  2. export PATH=$PATH:/opt/python3/bin
  3. 设置完成保存后,重新运行配置文件:source /etc/profile

三、构建electron

将windows下开发的electron源代码拷贝到Linux上,保证将windows版本的node_modules删除,在Linux上进行编译

1、在Linux上的electron源代码目录下,确保没有windows版本的node_modules,然后进行构建:

  1. 设置npm和electron的镜像,可以使用国内淘宝镜像顺利的下载资源,执行 npm config edit

  2. 执行 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/
    
  3. 设置完镜像后退出

  4. 确保electron代码中对Linux下build进行了配置

    linux: {icon,target: 'AppImage',maintainer: "zj"
    }
    
  5. 在electron的根目录下执行 npm install

  6. 我的代码中使用到了 grpc,可能会报错grpc与electron版本不兼容的问题,此时需要使用 electron-rebuild 来重新构建完成包之间的兼容

  7. 安装了 electron-rebuild 之后,在 package.json 中的 scripts 中设置 "rebuild": “electron-rebuild -f -w yourmodule”

    在这里插入图片描述

  8. 执行 npm run rebuild ,开始重新构建。在我测试的时候发现:使用node16.20.2版本搭配python3.11.5版本可以完成rebuild重新构建

  9. 打包构建程序: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权限

  1. 需要将node_modules/electron/dist/chrome-sandbox设置权限为4755,并且设置root用户权限

  2. 执行命令:sudo chown root:root chrome-sandbox && sudo chmod 4755 chrome-sandbox

  3. 重新构建build

4、禁用沙盒

  1. 若设置chrome-sandbox权限后,重新构建仍然报错,可以禁用沙盒运行程序

  2. 在启动程序后面加参数 --no-sandbox

  3. 执行:./electron-app --no-sandbox 。此时可以成功运行程序

环境变量配置

Linux上设置环境变量的两种方式:1. 全局设置,设置后所有用户生效 2. 设置属于指定用户的环境变量

  1. 全局:/etc/profile/
    1. 设置PATH:export PATH=/opt/nodejs/bin:$PATH
    2. 设置PATH追加:export PATH=$PATH:/opt/python3/bin
    3. 设置完PATH之后需要重新运行:source /etc/profile
  2. 用户的环境变量:~/.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

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

同程旅行对标拼多多:“形似神不似”

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

HOJ网站开启https访问 申请免费SSL证书 部署证书详细操作指南

https://console.cloud.tencent.com/ 腾讯云用户 登录控制台 右上角搜SSL 点击 SSL证书 进入链接 点申请 免费证书 有效期3个月 &#xff08;以后每三个月申请一次证书 上传&#xff09; 如果是腾讯云申请的域名 选 自动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…...

深入工作流调度的内核

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

vue3中动态引入组件并渲染组件

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

【艾思科蓝】网络安全的隐秘战场:构筑数字世界的铜墙铁壁

第七届人文教育与社会科学国际学术会议&#xff08;ICHESS 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议请看&#xff1a;https://ais.cn/u/nuyAF3 目录 引言 一、网络安全&#xff1a;数字时代的双刃剑 1.1 网络安全的定义与重要性 1.2 网络安全威胁的多元化…...

将图片资源保存到服务器的盘符中

服务类 系统盘符&#xff1a;file-path.disk&#xff08;可能会变&#xff0c;配置配置文件dev中&#xff09;文件根路径&#xff1a;file-path.root-path&#xff08;可能会变&#xff0c;配置配置文件dev中&#xff09;http协议的Nginx的映射前缀&#xff1a;PrefixConstant.…...

数学建模练习小题目

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

不可错过的10款文件加密软件,企业电脑加密文件哪个软件好用

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

常用卫星学习

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

音视频入门基础:FLV专题(3)——FLV header简介

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

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统&#xff1a;AI驱动的职业规划平台技术解析 引言&#xff1a;数字时代的职业革命 在当今瞬息万变的就业市场中&#xff0c;传统的职业规划方法已无法满足个人和企业的需求。据统计&#xff0c;全球每年有超过2亿人面临职业转型困境&#xff0c;而企业也因此遭…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...