electron的electron-packager打包运行和electron-builder生产安装包过程,学透 Electron 自定义 Dock 图标

news2024/9/28 11:17:12

electron的electron-packager打包运行和electron-builder生产安装包过程

开发electron客户端程序,打包是绕不开的问题。
macOS 应用构建,看似近在咫尺,实则坑坑致命。
场景:mac笔记本打包,以及生产出可交付的软件安装包,如何避坑,如何理解app的产生过程!!!!
可以按照我测试的路程来配置环境。包括node版本,electron版本等。

一、启动基础electron项目

  • 可以看我上一篇关于electron基本操作,搭建一个简易的index.htm作为app的页面,去尝试构架自己的第一款

二、检查是否安装了node

  • 输入node -vnpm -v 查看node和npm是否安装好,可以通过nvm统一管理node版本环境,具体的操作可以看我关于nodejs环境配置的一篇博客,macwin通用
  • 我这边的nodejs版本是v16.10.0;
  • 如果有期间有下载失败,那就用点程序员都懂的那个东西。

在这里插入图片描述

三、镜像换成淘宝

持久使用淘宝镜像
npm config set registry https://registry.npm.taobao.org
这个命令可以查看npm源地址
npm config get registry

四、electron-packager和electron-builder不同之处,使用场景,使用方法。

创建前端项目或引入前端项目, 项目目录为以下结构:

--main.js
--icons
--preload.js
--index.html
--package.json

(4.1) electron

  • 开发环境安装,使用以下任意命令:
npm install --save-dev electron
cnpm install --save-dev electron
yarn add electron --dev

package.json配置内容如下:

{
  "name": "electron-base",//初始化的npm init生成package.json
  "version": "1.0.0",//项目版本号
  "description": "测试electron",//项目描述
  "main": "main.js",//入口文件
  "scripts": { //脚本文件
    "dev": "nodemon --exec electron .",
 },
 devDependencies": {
    "electron": "^25.3.1",
  }

看见我的electron版本是25.3.1
执行yarn run dev启动这个electron项目。

  • 然后就启动了这个项目。是在mac本上的跑的。这里的app上面的标题中间的是Thorough_path就是index.html的<title>Thorough_path</title>标签内容。并不是app的名字
  • 在win的环境下,这个标题在左侧

Alt

main.js入口文件,配置以下内容
const {app, BrowserWindow,Menu} =  require('electron');
const path = require('path');
const createWindow = ()=>{
  Menu.setApplicationMenu(null) // null值取消顶部菜单栏
  const win = new BrowserWindow({
      width:1000,
      height:800,
      icon: './icons/icon.ico', // 设置窗口左上角的图标
      webPreferences:{
        nodeIntegration:true,
        contextIsolation:false,
        // preload: path.join(__dirname, 'preload.js')
      }
  })
  win.loadFile('./index.html');//本地地址
}
app.whenReady().then(createWindow)

(4.2) electron-packager

  • 安装electron-packager依赖,以下任意一种安装即可
  • 开发环境安装,我安装的是electron-packager为17.1.1
    要知道的是,这是一个用于打包electron应用的工具,只是打包成各个平台下可执行文件,并不是安装包
npm install --save-dev electron-packager
cnpm install --save-dev electron-packager
yarn add electron --dev
"devDependencies": {
    "electron": "^25.3.1",
    "electron-packager": "^17.1.1"
  }

安装成功后需要配置package.json文件

"package-mac": "electron-packager . Path --platform=darwin --electron-version=25.3.1 --download.mirrorOptions.mirror=https://npm.taobao.org/mirrors/electron/ --out=dist --icon=icons/icon.icns",
- platform:设置平台,window,linux还是Mac,darwin:代表的是mac环境,win32:代表win平台
- arch:x84还是x64,
- Path的位置可以替换成你打包后的exe名字,这里就会生成Path.exe文件。
- electron-version:electron的版本,必须要指定,这里设置为25.3.1,可查看package.json中electron安装的版本号
- out 输出文件
- icon 图标地址

执行命令 npm run packager,运行成功后就会在项目根目录中看到dist文件夹,运行exe文件就可以看到构建后的项目了。

Alt在这里插入图片描述
在这里插入图片描述
生成一个可执行文件不用安装的文件,点击可以直接运行

(4.3) electron-builder

  • 全局安装electron-builder
    - 安装electron-builder打包成安装包

全局安装或者项目开发环境安装

yarn add electron-builder -g

查看安装是否成功
在这里插入图片描述
使用electron-builder打包需要配置"build"

"scripts": {
    "dev": "nodemon --exec electron .",
    "build": "electron-builder --win --x64"
  },
  "build": {
      "productName":"xxxx",   // 项目名称
      "appId": "electron.app",  // 安装包名称
      "directories": { 			
        "output": "build"
      }, // 输出文件夹
      "copyright":"xxxx", // 版权信息
      "nsis": {	//nsis相关配置,打包方式为nsis时生效
        "oneClick": false, 				// 是否一键安装
        "allowElevation": true, 			// 允许请求提升,如果为false,则用户必须使用提升的权限重新启动安装程序。
        "allowToChangeInstallationDirectory": true, 	// 允许修改安装目录
        "installerIcon": "./build/icons/aaa.ico",	// 安装图标
        "uninstallerIcon": "./build/icons/bbb.ico",	// 卸载图标
        "installerHeaderIcon": "./build/icons/aaa.ico", // 安装时头部图标
        "createDesktopShortcut": true, 			// 创建桌面图标
        "createStartMenuShortcut": true,		// 创建开始菜单图标
        "shortcutName": "xxxx", 			// 图标名称
        "include": "build/script/installer.nsh", 	// 包含的自定义nsis脚本
      },
      // 发布到github
      publish: {
        provider: 'github',
        repo: 'xxxx', // git仓库
        owner: 'xxxx', // 拥有者
        token: 'xxxxxxxxxxxxxxx', // gitToken
        releaseType: 'release',
        publishAutoUpdate: true // 发布自动更新(需要配置GH_TOKEN)。 默认true
      },
      //配置windows环境
      "win": {
        "icon": "build/icons/aims.ico",
        "target": ["nsis","zip"]
      },
      //配置mac环境
      "mac": {
        "target": ["dmg","zip"]
      },
      //配置linux环境
      "linux": {
        "icon": "build/icons"
      }
  }
}

当然我这里不会配置这么全面,只是简单的进行构架配置。

"name": "electron-base",
"version": "1.0.2",
"description": "",
"main": "main.js",
"scripts": {
    "dev": "nodemon --exec electron .",
    "package-mac": "electron-packager . Path --platform=darwin --electron-version=25.3.1 --download.mirrorOptions.mirror=https://npm.taobao.org/mirrors/electron/ --out=dist --icon=icons/icon.icns",
    "build": "electron-builder --win --x64"
  },
"build": {
    "productName": "Path",
    "appId": "Path.app",
    "directories": {
      "output": "installPackages"
    },
    "mac": {
      "icon": "icons/icon.icns"
    },
    "win": {
      "icon": "icons/icon.ico",
      "target": [
        "nsis"
      ]
    },
    "nsis": {
      "oneClick": false,
      "allowToChangeInstallationDirectory": true,
      "perMachine": true
    },
    "electronVersion": "25.3.1",
    "electronDownload": {
      "mirror": "https://npm.taobao.org/mirrors/electron/"
    }
  },

在这里插入图片描述

Alt

(4.2.1)nsis配置

  • 这个要详细的讲一下,这个nsis的配置指的是安装过程的配置,其实还是很重要的,如果不配置nsis那么应用程序就会自动的安装在C盘。没有用户选择的余地,这样肯定是不行的
    关于nsis的配置是在build中nsis这个选项中进行配置,上面是部分基础的nsis配置,NSIS对于处理安装包这种东西,功能非常的强大。但是学习起来并不比一门高级语言要容易。其中的奥秘还要各位大佬自行探索。

五、初始化项目&配置文件

统一一些的话,直接全局安装完事
全局安装electron、electron-builder、electron-packager

electron 以窗口模式启动网页程序
electron-packager 可以打包成绿色版免安装exe程序
electron-builder打包成可安装exe文件 和 绿色版免安装exe程序

npm install electron -g

npm install electron-packager -g

npm install electron-builder -g

electron 版本在淘宝镜像 https://npm.taobao.org/mirrors/electron/

打包成mac桌面app

  • 学透 Electron 自定义 Dock 图标

主要增加一条执行脚本

"scripts": {
    "dev": "nodemon --exec electron .",
    "build": "electron-builder --win --x64",
    "build-mac":"electron-builder --macos "
  },

执行yarn run build-mac即可,等待一会就结束。
在这里插入图片描述

Alt
构建成功拖动安装之后,但是发现貌似icon配置项不管用。导致安装时app图标不可见,在这里插入图片描述

那是因为BrowserWindow 对象的 icon 属性只对 windows/Linux 系统生效,查阅了一些,对于 Mac OS 需要通过 app.dock.setIcon 进行设置,但是貌似不管用,之后再通过查阅文档,发现这样可以解决,那就是
在这里插入图片描述
修改build配置项,将build配置项的icon路径前增加一个路径,虽然文件目录结构没有这个electron文件夹,但是这样写,可能会生成这个指定到electron下的icons,其实我的icons在根目录库下。

项目目录结构
--main.js
--icons
--preload.js
--index.html
--package.json
    "mac": {
      "icon": "electron/icons/icon.icns"
    },
    "win": {
      "icon": "electron/icons/icon.ico",
      "target": [
        "nsis"
      ]
    }

在这里插入图片描述
dock中也有了咋们的图标,再也不是没有图像的小透明了
在这里插入图片描述

在这里插入图片描述

也算是稀里糊涂的解决了问题,不过这个electron里面的还是知识很多的,需要慢慢去看,这里就皮毛结束。加油💪🏻。


什么是.icns
.icns 是 Apple 的 macOS 操作系统的 App 图标文件的扩展名,你在 macOS 的「 Desktop 桌面」、「Finder 访达」、「Dock 程序坞」等看到应用程序的外观就是由一个内置在此 App 内部的扩展名为.icns的文件实现的。至于如何制作这样的一个macos文件,可以参考

.icns是什么,又是如何创建的

点击标题跳转↑


附上项目中完整的pack.json

{
  "name": "electron-base",
  "version": "1.0.4",
  "description": "",
  "main": "main.js",
  "scripts": {
    "dev": "nodemon --exec electron .",
    "package-mac": "electron-packager . Path --platform=darwin --electron-version=25.3.1 --download.mirrorOptions.mirror=https://npm.taobao.org/mirrors/electron/ --out=dist --icon=icons/icon.icns",
    "build": "electron-builder --win --x64",
    "build-mac":"electron-builder --macos "
  },
  "build": {
    "productName": "Path",
    "appId": "Path.app",
    "directories": {
      "output": "installPackages"
    },
    "mac": {
      "icon": "electron/icons/icon.icns"
    },
    "win": {
      "icon": "electron/icons/icon.ico",
      "target": [
        "nsis"
      ]
    },
    "nsis": {
      "oneClick": false,
      "allowToChangeInstallationDirectory": true,
      "perMachine": true
    },
    "electronVersion": "25.3.1",
    "electronDownload": {
      "mirror": "https://npm.taobao.org/mirrors/electron/"
    }
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {},
  "devDependencies": {
    "electron": "^25.3.1",
    "electron-packager": "^17.1.1"
  }
}

main.js

const {app, BrowserWindow,Menu} =  require('electron');
const path = require('path');
const createWindow = ()=>{
  Menu.setApplicationMenu(null) // null值取消顶部菜单栏
  const win = new BrowserWindow({
      width:1000,
      height:800,
      icon: './icons/icon.ico', // 设置窗口左上角的图标
      webPreferences:{
        nodeIntegration:true,
        contextIsolation:false,
        // preload: path.join(__dirname, 'preload.js')
      }
  })
  if (process.platform == 'darwin') {
		// app.dock.setIcon(path.join(__dirname, 'electron/icons/icon.icns'));
	}
  // win.loadURL('https://niupeng.inscode.cc/qianduan');//线上地址
  win.loadFile('./index.html');//本地地址
  // win.webContents.openDevTools();//打开开发者工具
  // process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';

}
app.whenReady().then(createWindow)

Alt

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

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

相关文章

自学网络安全(黑客)的误区

前言 网络安全入门到底是先学编程还是先学计算机基础&#xff1f;这是一个争议比较大的问题&#xff0c;有的人会建议先学编程&#xff0c;而有的人会建议先学计算机基础&#xff0c;其实这都是要学的。而且这些对学习网络安全来说非常重要。 一、网络安全学习的误区 1.不要…

windows系统安装ArtemisMQ

windows系统安装ArtemisMQ ArtemisMQ介绍 apache-artemi 是apache-activemq的新一代MQ产品。 特点&#xff1a; 1.支持多种mq协议&#xff0c;如jms\amqp\mqtt等协议。 2.部署方便&#xff0c;可以快速生成多个broker实例&#xff0c;以及部署集群。 3.已提供spring-boot-sta…

学习数学助手Schooltech Math Resource Studio 7.0 Crack

数学资源工作室 数学工作表生成器&#xff1a;快速轻松地创建数学工作表 使用易于使用的数学工作表生成器软件创建可打印的数学练习工作表。通过练习、谜题、问题等提高数学技能。 瞄准学习需求并激励学生 Math Resource Studio 是个性化数学教学的理想软件解决方案&#xff0c…

LeetCode279.Perfect-Squares<完全平方数>

题目&#xff1a; 思路&#xff1a; 这一题和硬币那题有一点像。 (13条消息) LeetCode322.Coin-Change&#xff1c;零钱兑换&#xff1e;_Eminste的博客-CSDN博客 所以我们初始化一系列“硬币”&#xff08;平方数&#xff09; 然后扫描用多少个“硬币”可以组成值。 最后返…

【ICCV2023】Scale-Aware Modulation Meet Transformer

Scale-Aware Modulation Meet Transformer, ICCV2023 论文&#xff1a;https://arxiv.org/abs/2307.08579 代码&#xff1a;https://github.com/AFeng-x/SMT 解读&#xff1a;ICCV2023 &#xff5c; 当尺度感知调制遇上Transformer&#xff0c;会碰撞出怎样的火花&#xff1…

C# 复习笔记

文章目录 Visual C# Step By StepC# 7.0核心技术指南面向对象是怎样工作的 Visual C# Step By Step 1.Net FrameWork&#xff1a;为开发应用程序而创建的一个平台&#xff08;可以是运行在windows &#xff0c;也可以是运行在其他操作系统&#xff09;。例如Mono&#xff0c;它…

第119天:免杀对抗-二开CSShellcode函数修改生成模版修改反编译重打包(下)

知识点 #知识点&#xff1a; 1、CS-表面特征消除 2、CS-HTTP流量特征消除 3、CS-Shellcode特征消除#章节点&#xff1a; 编译代码面-ShellCode-混淆 编译代码面-编辑执行器-编写 编译代码面-分离加载器-编写 程序文件面-特征码定位-修改 程序文件面-加壳花指令-资源 代码加载面…

C语言-print字符串打印-转义字符妙用

这里有两个有关打印的小知识 打印的字符串内容由两部分组成&#xff1a;可见字符、转义字符&#xff1b;各种字母、数字、以及空格&#xff0c;均属于可见字符&#xff0c;“\”等属于转义字符 举例&#xff1a; 1.直接print里面打印内容&#xff0c;内容直接出现 2.这里想将一…

iptable防火墙

主要作用&#xff1a; 隔离功能&#xff0c;在工作中&#xff0c;防火墙 的主要作用决定哪些数据可以被外网访问以及哪些数据可以进入内网访问 一般部署在网络边缘或者主机边缘&#xff0c;作用于网络层 安全技术&#xff1a; 1、入侵检测系统&#xff1a; 检测病毒、木马&a…

如何进行SQL优化

一、SQL优化的主要步骤 在应用的的开发过程中&#xff0c;由于初期数据量小&#xff0c;开发人员写 SQL 语句时更重视功能上的实现&#xff0c;但是当应用系统正式上线后&#xff0c;随着生产数据量的急剧增长&#xff0c;很多 SQL 语句开始逐渐显露出性能问题&#xff0c;对生…

Oracle转Mysql出现的问题记录

学海无涯&#xff0c;旅“途”漫漫&#xff0c;“途”中小记&#xff0c;如有错误&#xff0c;敬请指出&#xff0c;在此拜谢&#xff01; 文章目录 前言函数错误concat函数使用有区别代码示例导致问题区别及分析解决方法 时间相减代码示例导致问题区别与分析解决方法 or 不走索…

入门Linux基本指令(1)

本篇文章介绍Linux中的一些常用基本指令来供大家学习和参考。 目录 ls指令 pwd指令 cd指令 .和.. touch指令与mkdir指令 rm指令 man指令 ls指令 语法 &#xff1a; ls [ 选项 ][ 目录或文件 ] 功能 &#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与…

无符号数和有符号数的“bug”

1. 起因 在实现kmp算法时&#xff0c;出现了诡异的现象&#xff0c;看下面的代码&#xff1a; int KMP (const char *s, const char *t) {int lenS strlen (s);int lenT strlen (t);int next[lenT];get_next (next, t);int i 0;int j 0;while (i < lenS && j …

C#安装包制作过程详解

本文讲解C#安装包制作过程。 文章目录 一、安装打包插件二、项目的部署与安装三、制作安装包时注意路径一、安装打包插件 打开VS2017:工具 --> 扩展和更新 --> 联机,搜索Microsoft Visual Studio Installer Projects,如图: 下载Microsoft Visual Studio Installe…

PostgreSQL数据库动态共享内存管理器——Dynamic shared memory areas

dsm.c提供的功能允许创建后端进程间共享的共享内存段。DSA利用多个DSM段提供共享内存heap&#xff1b;DSA可以利用已经存在的共享内存&#xff08;DSM段&#xff09;也可以创建额外的DSM段。和系统heap使用指针不同的是&#xff0c;DSA提供伪指针&#xff0c;可以转换为backend…

Hbase基础概念

HBase 一、HBase的数据模型1.HBase数据存储结构2.HBase存储概念3.HBase基本架构 二、HBase Shell1.DDL(Data Definition Language)2.DML&#xff08;Data Manipulation Language&#xff09; 三、HBase组成架构1. Master架构2. RegionServer架构 四、HBase读写流程1.写流程MemS…

AI数字人:金融数字化转型的“关键先生”

今年年初ChatGPT的火热&#xff0c;在全球掀起一阵生成式AI&#xff08;AIGC&#xff09;热潮。国外的OpenAI、国内的百度等企业&#xff0c;都在AIGC上强力布局。 各种应用场景中&#xff0c;AIGC助力的数字人引起了市场注意。 事实上&#xff0c;数字人不是个新鲜事。早在1…

Linux 系统下 “Verilog” 编程配置

文章目录 简介Verilog HDLIverilogGtkwave 环境搭建软件的安装Vim 之 Verilog 语法高亮配置 简单的计数器示例计数器程序的编写仿真测试 简介 Verilog HDL Verilog HDL 是一种用于设计数字电路的硬件描述语言&#xff0c;它可以用来描述数字电路的功能和结构&#xff0c;并且可…

云服务器AccessKey执行命令

人之所以痛苦&#xff0c;在于追求错误的东西。如果你不给自己烦恼&#xff0c;别人也永远不可能给你烦恼。因为你自己的内心&#xff0c;你放不下。 好好的管教你自己&#xff0c;不要管别人。 漏洞实战 查看所有实例信息 A.exe -a xxx -s xxx ecs -list执行命令 A.exe -a…

新能源汽车充电桩最重要的模块设备是什么

你是否曾经遇到过充电桩无法给你电动汽车提供电源的问题?或者你曾经怀疑过为什么充电桩速度如此缓慢?其实&#xff0c;这一切都可能与充电桩最重要的模块设备——控制主板有关。 交流充电桩由充电桩外壳、控制主板、刷卡模块、计费控制、显示屏、通信模块、继电器、开关电源等…