Electron在windows下打linux包

2023-05-16

在原来打包windows包的配置的基础上做一些改动即可
参考我之前的博客 Vue cli 3.x使用electron打包配置

1. 修改package.json配置,下面三个字段必填,且author要按照下面格式填写

{
	"license": "aaa",               // 根据实际情况填写
  	"author": "作者名 <邮箱地址>",   // 如 "张三 <1111@qq.com>"
  	"homepage": "",                 // 可以填写网址,如公司官网网址或者app对应网页的地址等
}

scripts中添加electron打包linux环境的命令

"scripts": {
	// 可选 --x64 --ia32 --arm64 --armv7l等
    "electron:linux": "vue-cli-service electron:build -l --x64",  // 打包linux下amd64位的包
    "electron:arm": "vue-cli-service electron:build -l --arm64"   // 打包linux下arm64位的包
  },

2. 在vue.config.js中的electron-builder的配置下增加linux的配置,linux下默认打的是AppImage包和snap包,可以通过target字段修改

pluginOptions: {
    electronBuilder: {
      builderOptions: {
       	...
        linux: {
          icon: './public/app.png',    // 注意linux下图片的尺寸最好是256*256
       //  target: 'deb',              // 这个字段也可以是数组格式,具体可以参考electron-builder官网
        },
        ...
      }
    }
  }

3. 以前是可以直接在windows下打linux包的,但是现在根据官方文档说明,原来支持打包的服务已经停用了,所以windows下我们需要借助虚拟机来实现打包(条件允许的打包什么样的版本的包可以直接在对应的linux系统上进行打包)

打包步骤:
  • 安装docker Docker下载地址
  • 安装后启动 docker desktop,可能会报错提示需要更新到WSL2,安装过程中会出现失败等情况,可以参考 Win10家庭版 通过Hyper-V(WSL2)安装Docker-Desktop 失败
  • 启动成功后,win + r 输入cmd打开终端
  • 输入 docker pull electronuserland/builder
  • 输入 docker run --rm -ti -v C:\project\vue:/project -w /project electronuserland/builder
    这行命令表示把windows系统下的项目映射到虚拟机的某个虚拟文件夹下
    (其中C:\project\vue\ 为要映射的原项目文件地址,最后一个斜杠不要忘哦!! 其中的两个/project表示映射后项目所放置的文件夹名称,可以根据自己的习惯进行修改)
  • 映射成功,进入linux命令行后,重新装包 npm install
  • 装包过程中可能会出现安装electron包很慢的情况,可以修改npm、electron、electron-builder-binaries的安装镜像源

修改npm的下载镜像为淘宝镜像

npm config set registry https://registry.npm.taobao.org

按照下面命令修改electron镜像,electron-builder-binaries是后面打包过程中需要用到的,可以提前修改镜像

npm config set electron_mirror https://npm.taobao.org/mirrors/electron/
npm config set electron-builder-binaries_mirror_mirror https://npm.taobao.org/mirrors/electron-builder-binaries_mirror/

electron的某些版本在淘宝镜像中可能找不到,也可以用华为云这个镜像安装

npm config set electron_mirror https://mirrors.huaweicloud.com/electron/
npm config set electron-builder-binaries_mirror https://mirrors.huaweicloud.com/electron-builder-binaries/
  • 装包成功后,执行打包命令时,可能报错需要npm rebuid node-sass,按照报错提示执行npm rebuid node-sass即可
  • 执行完毕后,继续打包,打包完成后dist-electron则会出现对应的安装包

4. 安装包的升级,electron官网中有提过autoUpdater是不支持linux的自动升级的,需要通过发行版包管理器来实现升级

因为我们做的是政府项目,所以发行版包管理器不好搭建
自动升级检测时,amd下需要latest-linux.yml配置文件,arm下需要latest-linux-arm64.yml(根据系统实际的位数变化)配置文件

  1. 打包deb安装包时,即使配置了publish,无法打包出latest-linux.yml文件
  2. 在不修改linux下的target配置时,打包amd64的包时,默认情况下会同时打包AppImage和snap两种格式的包,并且会产生latest-linux.yml文件,并且按照windows的自动更新方式上传新的latest-linux.yml和安装包到服务器,通过autoUpdater是可以实现自动检测更新的
  3. 打包arm64的包时,在打包snap包时会报错,提示需要sudo snap install snapcraft --classic 但是安装这个很难成功(目前我还没成功,即使我在arm64的虚拟系统上打包也会有这个报错),当然这个报错不会影响AppImage打包,在dist-electron中可以看到AppImage包,但是这个报错会让我们得不到latest-linux-arm64文件,所以建议大家这个时候可以修改下target:"AppImage"后即可成功打包出latest-linux-arm64文件了,同样也可以使用autoUpdater进行更新了

针对无法使用自动升级的deb包,我采用的是当有新的安装包时,提示用户去下载安装更新,在系统中提供下载最新安装包的位置,让用户手动进行下载安装更新

5.打包出来的AppImage安装包在实际安装过程中会出现问题

  1. amd下安装AppImage包运行时报错
/tmp/.mount_综合tnTpHu/chrome-sandbox is owned by root and has mode 4755.

解决方案:
1、终端运行时添加免沙箱命令–no-sandbox,但是该种方案在自动升级时会无法自动打开应用程序,只能将AppImage旧版本安装包所在的路径下的安装包替换为新版本的安装包,然后重新通过命令行的方式打开
2、启用用户命名空间:sudo sysctl kernel.unprivileged_userns_clone=1,但每次开机都要运行该命令
3、给报错信息中的文件授权:sudo chown root <path_to_marktext_dir>/chrome-sandbox && sudo chmod 4755 <path_to_marktext_dir>/chrome-sandbox,这个方法不适用于picgo,因为这个chrome-sandbox文件会被自动删除,(我不太清楚electron打包出来的是不是picgo,但是我确实没有找到这个路径下的sandbox文件)
4、开机时自启动用户名称空间:root下运行echo ‘kernel.unprivileged_userns_clone=1’ >
/etc/sysctl.d/userns.conf命令即可

  1. arm下安装的时候报错
error while loading shared libraries: libz.so: cannot open shared object file: No such file or directory.

解决方案:

  • 使用apt-file search查找
    sudo apt-get install apt-file
  • 安装成功使用apt-file时一般会提示更新
    sudo apt-file update
  • 查找libz.so所在的库或所在的包
    apt-file search libz.so
  • 运行命令显示如下:
libzadc-dev: /usr/lib/arrch64-linux-gnu/genwqe/libz.so
zlib1g-dev: /usr/lib/arrch64-linux-gnu/libz.so
...

右边是匹配你缺失的库的,左边是查到的库所在的包,当发现匹配到多个包时,按顺序安装尝试即可(我安装了第一个就可以了)

  • 安装缺失包:
    sudo apt-get install libzadc-dev
  • 可以正常运行包

最后给大家提些小小的帮助,因为对linux不是很熟悉而浪费时间的地方(当然大佬可以无视)
linux下安装deb包成功,但是点击打开运行时毫无反应,由于本人不知道怎么查看运行终端查看报错日志,于是反复打包了很多次依然无果,

  1. 查看方式,打开deb安装包安装成功后的文件夹,下面有一个跟你打包时在package.json中的写的name同名的可执行程序,在当前文件夹下打开终端,拖动该可执行程序到终端中运行,即可以查看到运行日志
  2. 运行时报错cannot find module fs/promise 这种错误是因为包的版本不对,我把electron-updater的版本固定到4.3.5就可以成功运行了
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Electron在windows下打linux包 的相关文章

  • 在 C# 中使用反射列出枚举中的值

    我正在尝试使用反射来列出一个 Visual Studio 解决方案内的各个项目中的一些类的公共成员和方法 我尝试访问的所有类都是 C 的 并且它们都是从 C 类访问的 我用来进行这些调用的代码如下 public void PopulateE
  • 使用 Windows 任务计划程序安排 [Virtualenv 相关] Python 脚本

    I want to schedule a python script to start at 3AM and break at 5PM every weekday However the problem arises when I need
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • 在 wampserver 2.2 上安装 php_imagick.dll PHP 扩展

    我使用的是 32 位操作系统的 Windows 7 我安装了 ImageMagick 6 8 7 Q16Link https www imagemagick org script download php windows我能够从命令行 转换
  • 在电子生成器反应电子应用程序后,在 Windows 中出现空白屏幕

    在电子生成器反应电子应用程序后 Windows 中出现空白屏幕 这是package json 在电子生成器反应电子应用程序后 Windows 中出现空白屏幕 name SmallBusinessManagement version 0 1
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • Electron — 无法显示自定义图标

    我在以两种不同的方式设置 Electron 应用程序的图标时遇到问题 非打包 通过终端运行应用程序 我的 main js 确实指定了一个 图标 值 指向图标文件 但它不适用 包装 使用电子包装器 我的 package json 文件指定了
  • 归档文件系统或格式

    我正在寻找一种文件类型来存储已退役系统的档案 目前 我们主要使用 tar gz 但从 200GB tar gz 存档中查找并提取几个文件是很麻烦的 因为 tar gz 不支持任何类型的随机访问读取规定 在你明白之前 使用 FUSE 安装 t
  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • 在 /dev/input/eventX 中写入事件需要哪些命令?

    我正在开发一个android需要将触摸事件发送到 dev input eventX 的应用程序 我知道C执行此类操作的代码结构如下 struct input event struct timeval time unsigned short
  • 在主目录中安装库

    在 Linux Ubuntu 中 我尝试运行一个工具 但它显示错误 库丢失 我无权在系统中安装任何内容 或者根本无法从我的用户帐户执行 sudo 是否可以在我的主目录 没有 sudo 中安装缺少的库 在我的例子中为 libstdc so 6
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • diff 文件仅比较每行的前 n 个字符

    我有2个文件 我们将它们称为 md5s1 txt 和 md5s2 txt 两者都包含a的输出 find type f print0 xargs 0 md5sum sort gt md5s txt 不同目录下的命令 许多文件被重命名 但内容保
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • Windows 睡眠功能极慢

    我正在通过 Windows h 使用 Sleep 命令制作一个程序 并且在 Windows 10 而不是 Windows 7 上运行我的程序时遇到了令人沮丧的差异 我将我的程序简化为下面的程序 它与我的更复杂的程序表现出相同的行为 在 Wi
  • 在 Mac OS X 上构建 Linux 内核

    我正在做一个修改Linux内核的项目 我有一台桌面 Linux 机器 在上面构建内核没有问题 不过 我要去旅行 我想在途中工作 我只有一台 MacBook 当我尝试构建 Linux 内核时 它抱怨说elf h was not found 我
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • Unix 命令列出包含字符串但*不*包含另一个字符串的文件

    如何递归查看包含一个字符串且不包含另一个字符串的文件列表 另外 我的意思是评估文件的文本 而不是文件名 结论 根据评论 我最终使用了 find name html exec grep lR base maps xargs grep L ba
  • “Electron”中“BrowserView”和“renderer” React 页面之间的消息

    我正在尝试弄清楚如何在两者之间交换消息main过程和BrowserView 我一直在使用ipc在 之间main过程和renderer 简单 的过程react renderer page 但现在 使用相同的技术 我在console of th
  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1

随机推荐

  • 01-Elasticsearch安装与配置

    一 Elasticsearch 介绍 Elasticsearch是一个实时分布式搜索和分析引擎 二 运行环境 系统 Centos 7JDK 1 8ES版本 7 5 1 下载地址 https www elastic co cn downloa
  • 01-Liunx_用户操作

    一 创建用户组 创建用户组 root 64 localhost bin groupadd 用户组名称 example groupadd test 删除用户组 root 64 localhost bin groupdel 用户组名称 exam
  • 打工与乘公交

    去一个公司打工就如同上了一辆公交车 在上车之前 xff0c 你应该清楚自己打算去哪里 xff0c 打算在哪里下车 有的公交车很豪华 xff0c 有的很破烂 xff0c 但是这并不是重点 xff0c 所有能开到目的地的车都是好车 上了车之后
  • 01-MyBatis Plus-配置信息

    一 官网 URL https mp baomidou com 二 特性 无侵入 xff1a 只做增强不做改变 xff0c 引入它不会对现有工程产生影响 xff0c 如丝般顺滑损耗小 xff1a 启动即会自动注入基本 CURD xff0c 性
  • 五分钟教你手写HashMap

    原作者 xff1a 老铁123 出处 xff1a https blog csdn net qewgd article details 85927183 本文归作者 老铁123 和博客园共有 xff0c 欢迎转载 xff0c 但未经作者同意必
  • Java实现快速排序算法

    原作者 xff1a 老铁123 出处 xff1a https blog csdn net qewgd article details 85949755 本文归作者 老铁123 和博客园共有 xff0c 欢迎转载 xff0c 但未经作者同意必
  • 手写ArrayBlockingQueue

    个人分类 xff1a 算法 编辑 原作者 xff1a 老铁123 出处 xff1a https blog csdn net qewgd article details 88363745 本文归作者 老铁123 和博客园共有 xff0c 欢迎
  • 手写LinkedBlockingQueue

    原作者 xff1a 老铁123 出处 xff1a https blog csdn net qewgd article details 88364742 本文归作者 老铁123 和博客园共有 xff0c 欢迎转载 xff0c 但未经作者同意必
  • Viewbinding自动生成XML的一个对应绑定类

    当你在项目 Module 的build gradle中的android 中设置 buildFeatures viewBinding true 设置完sync一下 xff0c 然后会在项目中看到对应的XML文件的一个继承了ViewBindin
  • AE制作Json动画教程

    本文将从为什么要做动画 xff0c 到动画实现方式 xff0c 再到用AE 43 Bodymovin制作动画 xff0c 结合实际案例行分享 xff0c 希望给新手带来一些启发 首先我们来聊聊 xff0c 我们为什么要做动效 xff1f 1
  • zabbix proxy 表分区

    zabbix server进行表分区的话 xff0c zabbix的内部管家会失效 xff0c 这个时候 xff0c 如果有proxy的话 xff0c 也要进行表分区 xff0c proxy表分区比较简单 xff0c 也不用每天更换分区 步
  • pycharm中unresolved reference怎么解决(配置问题)

    iunresolved reference怎么解决 解决方法 xff1a xff08 本人使用方法二解决的 xff09 方法1 进入PyCharm gt Settings gt Build Excution Deployment gt Co
  • ModuleNotFoundError: No module named ‘_ssl‘

    如果openssl是自己编译安装的 xff0c 安装python时需要注意以下问题 xff1a 从python官网下载的tar gz包或者tgz解压 xff1a 更改 xff1a Python 3 6 6 Modules Setup dis
  • Can I become a good programmer without math and algorithms knowledge?

    Knowledge of algorithms has very little to do with programming skill As some random dude on the internet once said 34 Wh
  • 线程进阶:生产者消费者模式和线程池

    一 生产者消费者模式 这是一种不属于GOF23的设计者模式 这种模式分为三个对象 xff1a 一个生产者 xff0c 一个消费者 xff0c 一个缓存区 生产者 某些程序 进程 线程负责生产数据就属于生产者 消费者 某些程序 进程 线程负责
  • Java异常

    目录 一 什么是异常 xff1f 二 什么是异常处理 三 Java中如何进行异常处理 1 try catah块捕获异常 xff0c 分为三种情况 2 多重catch块 3 finally块 4 声明异常 throws 5 抛出异常 thro
  • Linux系统安装mysql(rpm版)

    目录 Linux系统安装mysql xff08 rpm版 xff09 1 检测当前系统中是否安装MySQL数据库 2 将mysql安装包上传到Linux并解压 3 按照顺序安装rpm软件包 4 启动mysql 5 设置开机自启 6 查看已启
  • ffmpeg 花屏的问题

    ffmpeg 首先说明 xff0c ffmpeg并非做得毫无破绽 1 网络丢包 udp 改成tcp传输并非一定不会丢包 xff0c 这个一定要清楚 xff0c 除此之外 xff0c 如果使用udp xff0c 一定要把udp的接收缓存加得合
  • 通过使用 Byte Buddy,便捷地创建 Java Agent

    Java agent 是在另外一个 Java 应用 xff08 目标 应用 xff09 启动之前要执行的 Java 程序 xff0c 这样 agent 就有机会修改目标应用或者应用所运行的环境 在本文中 xff0c 我们将会从基础内容开始
  • Electron在windows下打linux包

    在原来打包windows包的配置的基础上做一些改动即可 参考我之前的博客 Vue cli 3 x使用electron打包配置 1 修改package json配置 xff0c 下面三个字段必填 xff0c 且author要按照下面格式填写