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

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脚本},// 发布到githubpublish: {provider: 'github',repo: 'xxxx', // git仓库owner: 'xxxx', // 拥有者token: 'xxxxxxxxxxxxxxx', // gitTokenreleaseType: '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 -gnpm install electron-packager -gnpm 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.mzph.cn/news/8778.shtml

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

相关文章

什么是事件循环Event Loop

一、含义 事件循环是指不断从任务队列中取出任务&#xff0c;并执行其对应的回调函数的过程。 二、事件循环流程 1.主线程执行同步任务&#xff0c;直到遇到异步任务时&#xff0c;将其回调函数他家到任务队列中&#xff0c;然后继续执行同步任务 2.当所有同步任务执行完之后&a…

如何利用plotly和geopandas根据美国邮政编码(Zip-Code)绘制美国地图

对于我自己来说&#xff0c;该需求源自于分析Movielens-1m数据集的用户数据&#xff1a; UserID::Gender::Age::Occupation::Zip-code 1::F::1::10::48067 2::M::56::16::70072 3::M::25::15::55117 4::M::45::7::02460 5::M::25::20::55455 6::F::50::9::55117我希望根据Zip-…

在 3ds Max 和 After Effects 中创建逼真的蜘蛛网模型

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 创建蜘蛛网 步骤 1 打开 3ds Max。 打开 3ds Max 步骤 2 转到创建>标准基元>平面并创建一个平面 在前视图中。 创建平面 步骤 3 保持其长度和宽度 segs 为 80。 段 步骤 4 打开修改器列表…

Python爬虫之Scrapy框架系列(23)——分布式爬虫scrapy_redis浅实战【XXTop250部分爬取】

目录&#xff1a; 1.实战讲解&#xff08;XXTop250完整信息的爬取&#xff09;&#xff1a;1.1 使用之前做的完整的XXTOP250项目&#xff0c;但是设置为只爬取一页&#xff08;共25个电影&#xff09;,便于观察1.2 配置settings文件中使用scrapy_redis的必要配置&#xff0c;并…

智能汽车的主动悬架工作原理详述

摘要&#xff1a; 本文将详细介绍主动悬架功能原理设计。 主动悬架是车辆上的一种汽车悬架。它使用车载系统来控制车轮相对于底盘或车身的垂直运动&#xff0c;而不是由大弹簧提供的被动悬架&#xff0c;后者的运动完全由路面决定。主动悬架分为两类&#xff1a;真正的主动悬架…

fSGAT批量候选基因关联分析丨快速单基因关联分析

候选基因如何分析&#xff1f; 通常情况下关联分析会得到一大堆候选基因&#xff0c;总不可能每个都有用&#xff0c;因此需要对候选基因进行深一步分析&#xff0c;本篇笔记分享一下群体遗传学研究中GWAS候选位点与候选基因的筛选思路。主要的方式包括单基因关联分析、连锁程度…

ubuntu 静态IP设置

ubuntu 静态IP设置&#xff1a; 1.输入&#xff1a; sudo vim /etc/netplan/01-network-manager-all.yaml Let NetworkManager manage all devices on this system network: ethernets: ens33: dhcp4: no addresses: [192.168.1.119/24] gateway4: 192.168.1.1 nameservers: …

CASAtomic原子操作详解

一、CAS&#xff08;Compare And Swap&#xff09; 1、CAS介绍 CAS原理&#xff1a;假设有三个值&#xff0c;E&#xff08;旧值&#xff09;、U&#xff08;需要更新的值&#xff09;、V&#xff08;内存中真实的值&#xff09;&#xff0c;具体参照下图&#xff1a; 作用&a…

[C++] C++入门第二篇 -- 引用 -- 内联函数inline -- auto+for

目录 1、引用 -- & 1.1 引用的概念 1.2 引用特性 1.3 常引用 -- 权限问题 1.4 引用的使用场景 1.4.1 做参数 1.4.2 做返回值 注意 1.5 传值、传引用的效率比较 1.6 引用和指针的区别 2、内联函数 2.1 概念 转存失败重新上传取消​编辑转存失败重新上传取消​编…

flink cdc环境搭建

1.下载flink https://archive.apache.org/dist/flink/flink-1.12.2/ 2.修改flink-conf.yaml #根据自己电脑核数修改&#xff0c;这里我设置为4&#xff0c;因为系统分配了4核 jobmanager.rpc.address: localhost #主机名根据自己设定 taskmanager.numberOfTaskSlots: 4 3.下载…

前端JS识别二维码内容

原文&#xff1a;https://www.cnblogs.com/houxianzhou/p/15030351.html <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>图片二维码识别</title><script src"https://cdn.bootcss.com/jquery/3.4.1/jque…

Springboot中 AOP实现日志信息的记录到数据库

1、导入相关的依赖 <!--spring切面aop依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency> 注意&#xff1a;在application.properties文件里加这样一…

【前端设计】使用Verdi查看波形时鼠标遮住了parameter值怎么整

盆友&#xff0c;你们在使用Verdi的时候&#xff0c;有没有遇到过鼠标遮挡着了parameter数值的场景&#xff1f;就跟下面这个示意图一样&#xff1a; 最可恨的是这个参数值他会跟着你的鼠标走&#xff0c;你想把鼠标移开看看看这个例化值到底是多大吧&#xff0c;这个数他跟着你…

Python实现人脸识别功能

Python实现人脸识别功能 闲来没事&#xff0c;记录一下前几天学习的人脸识别小项目。 要想实现人脸识别&#xff0c;我们首先要搞明白&#xff0c;人脸识别主要分为哪些步骤&#xff1f;为了提高人脸识别的准确性&#xff0c;我们首先要把图像或视频中的人脸检测出来&#xf…

基于DNN深度学习网络的OFDM+QPSK信号检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ............................................................................. Transmitt…

XGBoost实例——皮马印第安人糖尿病预测和特征筛选

利用皮马印第安人糖尿病数据集来预测皮马印第安人的糖尿病&#xff0c;以下是数据集的信息&#xff1a; Pregnancies&#xff1a;怀孕次数Glucose&#xff1a;葡萄糖BloodPressure&#xff1a;血压 (mm Hg)SkinThickness&#xff1a;皮层厚度 (mm)Insulin&#xff1a;胰岛素 2…

区块链学习笔记

区块链技术与应用 数组 列表 二叉树 哈希函数 BTC中的密码学原理 cryptographic hash function collsion resistance(碰撞抵抗) 碰撞指的是找到两个不同的输入值&#xff0c;使得它们的哈希值相同。也就是说&#xff0c;如果存在任意两个输入x和y&#xff0c;满足x ≠ y…

【ES】---ES的聚合(aggregations)

目录 一、前言1、聚合分类2、聚合的实现方式二、RestAPI--bucket聚合案例11、按照类型分bucket2、按照(String)时间分bucket三、RestAPI-- metric聚合案例11、metric指标统计四、RestAPI-- pipeline聚合案例1一、前言 聚合是对文档数据的统计、分析、计算。 注意:参与聚合的字…

YOLOX-PAI 论文学习

1. 解决了什么问题&#xff1f; 对 YOLOX 做加速&#xff0c;在单张 Tesla V100 上取得了 42.8 42.8 42.8mAP&#xff0c;推理速度为 1 毫秒。 2. 提出了什么方法&#xff1f; 2.1 主干网络 YOLOv6 和 PP-YOLOE 都将主干网络从 CSPNet 切换到了 RepVGG。RepVGG 在推理时&a…

MyBatis学习笔记之高级映射及延迟加载

文章目录 环境搭建&#xff0c;数据配置多对一的映射的思路逻辑级联属性映射association分布查询 一对多的映射的思路逻辑collection分布 环境搭建&#xff0c;数据配置 t_class表 t_stu表 多对一的映射的思路逻辑 多对一&#xff1a;多个学生对应一个班级 多的一方是st…