electron打包dist为可执行程序后记【electron-quick-start】

news2024/12/28 19:19:15

文章目录

目录

文章目录

前言

一、直接看效果

二、实现步骤

1.准备dist文件夹

2.NVM管理node版本

3.准备electron容器并npm run start

4.封装成可执行程序

1.手动下载electron对应版本的zip文件,解决打包缓慢问题

2.安装packager

3.配置打包命令执行内容

4.修改electron-packager源码

5.执行打包命令

总结


前言

甲方爹:BS=>CS?

我方领导:OJBK。

项目是普普通通的vue项目,要求封装成arm64的Linux可执行程序。

提示:以下是本篇文章正文内容,下面案例可供参考

一、直接看效果

二、实现步骤

1.准备dist文件夹

publicPath得是./,不然打包出来的dist跑起来是空白的,双击index.html能在浏览器中看到页面。

2.NVM管理node版本

项目框架比较成熟,electron-quick-start比较新,中间遇到版本不兼容,一个16一个20。所以需要用NVM管理node版本,执行构建命令的时候切一下。

注意:通过NVM install的node不能直接切,需要把之前安装的node卸载了并且删除类似npmrc这样的文件或者文件夹,网上一搜一大把的说明文档。

3.准备electron容器并npm run start

下载:electron-quick-start

下载下来后是这样的。

把前面准备的dist文件夹复制到根目录中来,像下面这样。

修改main.js的load路径。

修改完执行npm run start就能看到打包后的效果了,需要屏蔽操作栏或者默认最大化之类的可以看看官方手册的BrowserWindow配置内容

官方手册:BrowserWindow

下面贴一下我自己的。

// Modules to control application life and create native browser window
const { app, BrowserWindow,Menu } = require('electron')
const path = require('node:path')

function createWindow () {
  // Create the browser window.
  const mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js')
    },
    minimizable: false,//窗口是否可最小化
    fullscreen: false,//是否全屏展示:没有窗口
  })
  mainWindow.maximize();//窗口最大化展示
  // and load the index.html of the app.
  mainWindow.loadFile('./dist/index.html')
  Menu.setApplicationMenu(null);//去掉默认的操作栏
  // Open the DevTools.开发者工具是否打开
  // mainWindow.webContents.openDevTools()
}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(() => {
  createWindow()

  app.on('activate', function () {
    // On macOS it's common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})

// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit()
})

// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.

4.封装成可执行程序

1.手动下载electron对应版本的zip文件,解决打包缓慢问题

下载地址:electron zip文件

新建cache文件夹,把压缩包放进去,如下。

2.安装packager

npm install electron-packager

3.配置打包命令执行内容

"scripts": {
    "packager:win": "electron-packager ./ winApp --platform=win32 --arch=x64   --overwrite --no-prune --ignore=/node_modules",
    "packager:linux-x64": "electron-packager ./ linuxApp --platform=linux --arch=x64   --overwrite --no-prune --ignore=/node_modules",
    "packager:linux-arm64": "electron-packager ./ linuxApp --platform=linux --arch=arm64   --overwrite --no-prune --ignore=/node_modules"
  },

4.修改electron-packager源码

找到electron-packager的src文件夹下面的index.js搜一下packageForPlatformAndArchWithOpts方法,替换为下面代码块的内容。

async packageForPlatformAndArchWithOpts (comboOpts, downloadOpts) {
    // const zipPath = await this.getElectronZipPath(downloadOpts)  ---
    const arch = downloadOpts.arch // +++
    const zipPath = arch === 'arm64' ? './cache/electron-v22.0.0-linux-arm64.zip' : './cache/electron-v22.0.0-linux-x64.zip' // +++

    if (!this.useTempDir) {
      return this.createApp(comboOpts, zipPath)
    }

    if (common.isPlatformMac(comboOpts.platform)) {
      /* istanbul ignore else */
      if (this.canCreateSymlinks === undefined) {
        return this.testSymlink(comboOpts, zipPath)
      } else if (!this.canCreateSymlinks) {
        return this.skipHostPlatformSansSymlinkSupport(comboOpts)
      }
    }

    return this.checkOverwrite(comboOpts, zipPath)
}

替换:

5.执行打包命令

npm run packager:linux-arm64

总结

总的流程走下来挺顺利的,坑不算多。

我方领导:😊。

甲方爹:退出应用的时候能不能加个确认框?确认退出应用后电脑关机...。

我方领导:OJBK。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1602114.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用CSS延迟动画,打造令人惊艳的复杂动画效果!

动画在前端开发中是经常遇到的场景之一,加入动画后页面可以极大的提升用户体验。 绝大多数简单的动画场景可以直接通过CSS实现,对于一些特殊场景的动画可能会使用到JS计算实现,通过本文的学习,可以让你在一些看似需要使用JS实现的…

广东东莞机房建设

在信息技术迅猛发展的今天,机房作为企业信息化的核心基础设施,其建设质量直接关系到企业数据的安全、系统的稳定以及业务的持续发展。特别是在广东省这样经济发达、科技先进的前沿地区,企业对机房的高效性、安全性和可靠性提出了更高的要求。…

【AAAI2024】点云的自适应邻域提取

论文标题:Point Deformable Network with Enhanced Normal Embedding for Point Cloud Analysis 论文地址:https://ojs.aaai.org/index.php/AAAI/article/view/28497 两个创新点:可变邻域法向量提取 一、由固定邻居变为可变的邻域 二、最小二…

智慧公厕:打造城市品质生活的必备设施

公共厕所一直是城市管理中不可忽视的一环,而随着智慧科技的发展,智慧公厕逐渐成为改善城市品质生活的利器。智慧公厕作为一种创新的公共卫生设施,其带来的好处不仅体现在对公共厕所的全面监测和高效智慧化管理,更是为市民提供了更…

C/C++ BM25二叉树的后序遍历

文章目录 前言题目解决方案一1.1 思路阐述1.2 源码 解决方案二总结 前言 和前序遍历中序遍历一致,换个顺序就行。 详情参考C/C BM23 二叉树的前序遍历 详情参考C/C BM24 二叉树的中序遍历 题目 给定一个二叉树,返回他的后序遍历的序列。 后序遍历是值…

python读取DBF数据

DBF文件通常是由数据库软件(如FoxPro或dBASE)创建的数据库文件。Python中并没有直接读取DBF文件的内置库,但你可以使用第三方库如dbfread来读取DBF文件。 首先,你需要安装dbfread库。你可以使用pip来安装: pip insta…

使用 wireshark 抓包,在 postman 中模拟请求给小朋友投票

突然某天在微信群里收到了朋友的投票请求,点进去发现不需要授权,我就喜欢这样不需要登录的投票网站 在电脑端微信打开后,微信浏览器右上角可以复制链接 于是,我拿到了这个地址:http://hjkki.cvnxoz.cn/app/YYkEgSzlr…

服务器中毒怎么办?企业数据安全需重视

互联网企业: 广义的互联网企业是指以计算机网络技术为基础,利用网络平台提供服务并因此获得收入的企业。广义的互联网企业可以分为:基础层互联网企业、服务层互联网企业、终端层互联网企业。 狭义的互联网企业是指在互联网上注册域名,建立网…

【c++】stack和queue使用 stack和queue模拟实现

主页:醋溜马桶圈-CSDN博客 专栏:c_醋溜马桶圈的博客-CSDN博客 gitee:mnxcc (mnxcc) - Gitee.com 目录 1. stack的介绍和使用 1.1 stack的介绍 1.2 stack的使用 1.3 stack的模拟实现 2. queue的介绍和使用 2.1 queue的介绍 2.2 queue的…

Web端即时通讯必备技术:WebSocket快速入门

随着Web应用程序的不断发展,越来越多的应用需要实现实时交互和通信。然而,传统的HTTP协议只支持单向通信,即客户端向服务器发送请求并接收响应。为了解决这一限制,WebSocket技术应运而生。本文将为大家介绍即时通讯技术 WebSocket…

linux 挂载云盘 NT只能挂载2T,使用parted挂载超过2T云盘

一、删除原来挂载好的云盘和分区 1、查看挂载号的云盘 fdisk -l 发现我们有5千多G但是只挂载了2T,心里非常的慌张!十分的不爽! 好,我们把它干掉,重新分区! 2、解除挂载 umount /homeE 没保存跳转到&…

Elasticsearch:(一)ES简介

搜索引擎是什么?在不少开发者眼中,ES似乎就是搜索引擎的代名词,然而这实际上是一种误解。搜索引擎是一种专门用于从互联网中检索信息的技术工具,它主要可以划分为元搜索引擎、全文搜索引擎和垂直搜索引擎几大类。其中,…

【算法一则】矩阵置零 【矩阵】【空间复用】

题目 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2: …

设计模式代码实战-中间者模式

1、问题描述 小明正在设计一个简单的多人聊天室系统,有多个用户和一个聊天室中介者,用户通过中介者进行聊天,请你帮他完成这个系统的设计。 输入示例 3 User1 User2 User3 User1 Hello_All! User2 Hi_User1! User3 How_is_everyone? 输出…

写后端项目的分页查询时,解决分页不更新

写基于VueSpringBoot项目,实现分页查询功能时,改完代码后,发现页数不更新: 更改处如下: 显示如图: 发现页数没有变化,两条数据还是显示在同一页,而且每页都10条。且重启项目也没有更…

【408直通车】C+Python赋能数据结构:从底层原理到高级应用的蜕变之路——线性表

本专栏旨在通过使用C语言和Python分别实现各种考研常见数据结构,从底层原理和应用两个角度深入探索数据结构。通过深入理解数据结构的底层原理和掌握Python的高级特性,读者将能够全面掌握数据结构的知识,并且学会如何在实际应用中灵活运用。 …

查天气(Vue.js,Element UI)

演示图 几点注意 有亿点简陋,凑合能用,button一定要 !important 覆盖原本的 element ui ,不然无效axios回调函数中 this 指向改变了,需要额外的保存一份服务器返回的数据比较复杂时,获取的时候需要注意层级结构method…

光伏电站智能勘探:无人机优势及流程详解

随着科技和互联网技术的不断发展,无人机在各个领域的应用越来越广泛,其中之一就是光伏电站智能勘探。利用无人机高清摄像头和传感器等设备,可以对光伏电站周边环境、日照情况、房屋状态进行全方面的勘探和记录,搭配卫星勘探、实地…

自动驾驶(八十四)---------中间件对比分析

很久没有写博客了,CSDN无故非法删了我第82篇,让我很恼火,一直提不起兴趣重新写一遍第82篇。但回初心,知识需要用自己的语言输出,所以今天对比分析自动驾驶中间件: 1. 中间件介绍 在自动驾驶架构中&#xf…

第14章 大数据与数据科学知识点梳理

第14章 大数据与数据科学知识点梳理(附带页码) ◼ 原则:组织应仔细管理与大数据源相关的元数据,以便对数据文件及其来源和价值进行准确的清单管理。P386 ◼ 大数据:数据量大(Volume)、数据更新…