electron起步基本和electron打包 无脑步骤(修改electron图标)

news2024/9/29 11:37:04

1.安装 yarn add electron --dev 和 yarn add nodemon --dev
2.在package.json 写main入口和启动脚本
"main":"main.js", "start": "nodemon --exec electron . --watch ./ --ext .js,.html,.css,.vue"

"license": "MIT",
  "main":"./electron/main.js", //我在根目录建的新文件electron/main.js 注意路劲 //新添加
  "scripts": {
    "dev": "vite",
    "dev:prod": "vite --mode production",
    "build:prod": "vite build",
    "build:stage": "vite build --mode staging",
    "preview": "vite preview",
    "start": "nodemon --exec electron . --watch ./ --ext .js,.html,.css,.vue"  //新添加
  },

3.新建 main.js (electron配置文件)

const { app, BrowserWindow } = require('electron')
const createWindow = () => {
    const win = new BrowserWindow({
        // 窗口的大小
       // 窗口的大小
        //fullscreen: true   //全屏
         //frame: false,   	//让桌面应用没有边框,这样菜单栏也会消失
        //  width: 800,         //设置窗口宽高
        //  height: 600,
        //  icon: iconPath,     //应用运行时的标题栏图标
        //  minWidth: 300,     // 最小宽度
        //  minHeight: 500,    // 最小高度
        //  maxWidth: 300,    // 最大宽度
        //  maxHeight: 600,    // 最大高度
        // 进行对首选项的设置
		   show: false,
        webPreferences:{    
           // 定义预约加载的js
            preload: path.resolve(__dirname, './preload/index.js')
          }
          // 当页面加载完毕的时候在显示窗口
    win.on('ready-to-show', () => {
        win.show()
    })
    })
    // 窗口打开的数据
    win.loadURL('http://localhost') //链接
    // win.loadFile('index.html')//文件
// 打开发开工商
    win.webContents.openDevTools()
}
//关闭黄色警告
`process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';

app.whenReady().then(() => {
    createWindow()

    app.on('activate', () => {
        // 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()
    })
})

// 除了 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', () => {
    if (process.platform !== 'darwin') app.quit()
})

恢复上次关闭窗口的位置和大小

安装 npm i electron-win-state --dev
main.js

const { app, BrowserWindow } = require('electron')
const WinState = require('electron-win-state').default
const winState = new WinState({})



const createWindow = () => {
    const win = new BrowserWindow({
        ...winState.winOptions,
        // 窗口的大小
      // 窗口的大小
        //fullscreen: true   //全屏
         //frame: false,   	//让桌面应用没有边框,这样菜单栏也会消失
        //  width: 800,         //设置窗口宽高
        //  height: 600,
        //  icon: iconPath,     //应用运行时的标题栏图标
        //  minWidth: 300,     // 最小宽度
        //  minHeight: 500,    // 最小高度
        //  maxWidth: 300,    // 最大宽度
        //  maxHeight: 600,    // 最大高度
        // 进行对首选项的设置
        webPreferences:{    
                     //   preload: path.resolve(__dirname, './preload/index.js')

          }
    })
	winState.manage(win)

    // 窗口打开的页面
    win.loadURL('http://localhost') //链接
    // win.loadFile('index.html')//文件
// 打开发开工商
    win.webContents.openDevTools()
        winState.manage(win)

}

app.whenReady().then(()=> {
    createWindow()
})

添加菜单

创建 menu.js文件 之后 main.js引入 require('./menu') //注意路劲

const { Menu } = require("electron");
const menuTemplate = [
  {
    label:"文件", // 菜单名
    submenu:[ // 二级菜单
       {
        label:'新建',
        accelerator:'ctrl+n', // 快捷键
        click:()=>{ // 点击事件
          console.log("create file")
        }
      },
      {type: 'separator'}, // 分割线
      {
        label:'打开',
      },
      {
        label:'保存',
      }
    ],
  },
  {
    label:"编辑",
    submenu:[ 
       {
        label:'复制', 
        role:'copy', // 快捷键与系统冲突时可以使用role属性指定
        click:()=>{ 
          console.log("copy")
        }
      },
      {
        label:'粘贴',
        role:'paste',
        click:()=>{
          console.log("paste")
        }
      },
      {
        label:'保存',
      }
    ],
  },
]
const menuBuilder = Menu.buildFromTemplate(menuTemplate)
Menu.setApplicationMenu(menuBuilder)

打包

1.安装 yarn add electron-builder --dev 会安装在package.json文件下的devDependencies里
![在这里插入图片描述](https://img-blog.csdnimg.cn/78ef0721f23d4a17aec08cc02d9f20d9.png在这里插入图片描述

2.package.json 添加

  "name": "electron-demo",
  "version": "1.0.0",
  "author": "your name",
  "description": "My Electron app",
 "main": "./electron/main.js", //注意 文件位置//新添加
  "scripts": {
    "start": "nodemon --exec electron . --watch ./ --ext .js,.html,.css,.vue",
    "electron-builder": "electron-builder"
  },
  "build": {
    "productName": "electron-demo",   // 安装包文件名
    "directories": {
      "output": "dist"  // 安装包生成目录
    },
    "nsis": {
      "oneClick": false,  // 是否一键安装
      "allowToChangeInstallationDirectory": true    // 允许用户选择安装目录
    },
    "mac": {
      "category": "your.app.category.type"
    },
    "win": {
      "icon": "build/icons/food.png",   // 安装包图标,必须为 256 * 256 像素图片
      "target": [
        {
          "target": "nsis"
        }
      ]
    }
  },

3.打包 yarn electron-builder
在这里插入图片描述
出现exe 可以点击安装 就可以了

修改electron图标

1…安装 yarn add electron-icon-builder
2.package.json添加

  "scripts": {
    "electron:generate-icons": "electron-icon-builder --input=./public/icon.png --output=build --flatten"
  },
  "win": {
      "icon": "build/icons/11.ico",//注意目录 和文件名称
      "target": [
        {
          "target": "nsis"
        }
      ]
    }

3.运行 yarn electron:generate-icons 完成后 根目录自动生成build/icons文件 在里面放入ico图
注意: 图得需要256*256大小的 ,随便改后缀成ico可能会打包报错 注意点
4.打包 yarn electron-builder //根据自己的配置打包

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

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

相关文章

oracle在本地创建数据库和导入DMP数据泵

第一步:创建本地数据库 databse Configuration Assistant,创建数据库。 下一步之后完成。 通常在创建数据库时会报错,如图,直接跳过,在net manager的Listener下添加一个新的地址,协议名填写警告日志中Prot…

关于mmpose

为什么是关于mmpose呢,因为我菜。本文仅做记录使用,也就是说,写的不一定对,欢迎大佬批评指正。 我只想知道这种关键点检测是如何标注的,数据集是如何搞的,全网居然都找不到,付费资源我不配&…

Android设计模式详解之装饰模式

前言 装饰模式也称为包装模式,结构型设计模式之一; 定义:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式生成子类更为灵活; 使用场景:需要透明且动态地扩展类的功能时; UML类…

零经验出海报单,看跨境电商小白如何在Starday突出重围

随着大数据、云计算等一系列新颖先进的技术概念引入,全球经济市场呈现出以往难以想象的活跃,世界各地的贸易订单都可以借助互联网渠道在数秒内完成全流程。“跨境电商”这一概念正是全球互联网技术普及应用下的附属品,更是经济全球化时代发展…

第五章. 可视化数据分析图表—Seaborn图表(线性回归模型,箱型图,核密度图,提琴图)

第五章. 可视化数据分析图 5.7 Seaborn图表 Seaborn是一个基于Matplotlib的高级可视化效果库,偏向于统计图表,主要针对的是数据挖掘和机器学习中的变量特征选取,相比Matplotlib,他的语法相对简单,但是具有一定的局限性…

《Java高并发与集合框架》第三部分在高并发场景中工作的集合

《Java高并发与集合框架》第三部分在高并发场景中工作的集合前言1.高并发场景中的List、Map和Set集合1.1 CopyOnWriteArrayList1.2 CopyOnWriteArrayList不支持的使用场景1.3 CopyOnWriteArrayList主要方法1.4 java.util.Collections.synchronizedList()方法的补充作用1.4.1 Co…

Allegro如何实现交换pin操作详细指导

Allegro如何实现交换pin操作详细指导 在做PCB设计的时候,换pin是用的较多的功能,换pin可以让线序更加的顺,方便布线。但是前提是确保网络的交换是被允许的 下面用下图为例介绍Allegro中是如何实现交换pin的 具体操作如下 选择File选择Export-Libraries

2022年终,盘点IT行业全年10大事件

白云苍狗,一眨眼,2022年就来到了尾声。这一年里,IT行业发生了不少的大事。有喜有忧,令人目不暇接,显现出IT行业风云变幻的一面。 本期,知了姐为大家整理了近一年来,IT行业发生的10件大事。 NO…

Linux下安装mysql

下载地址: https://dev.mysql.com/downloads/mysql/ 1.解压mysql 文件包,解压路径/home/mysql tar -zxvf mysql-8.0.31-linux-glibc2.12-x86_64.tar 2.编写配置 [client] #password your_password port 3306 socket /home/mysql/…

无线网络监控分析工具

多年来,网络设备已经从房间大小的机器急剧转变为小型便携式设备。随着设备尺寸发生巨大变化,将这些设备相互连接所涉及的技术也发生了巨大变化。这些剧烈变化的结果是无线网络的形成。无线网络的优势在于网络中的各种设备之间不需要物理连接。此外&#…

GoLang ~ 远程调试

前提条件 在编译go项目时,使用​​go build -gcflags "all-N -l"​​,关闭内联优化,以支持debug。 关于​​-gcflags "-N -l"​​参数的解释: 编译时,如果编译的结果需要gdb调试则使用参数​​-…

ASEMI整流桥2W10,DB107S和KBP307封装参数对比

编辑-Z ASEMI整流桥2W10,DB107S和KBP307是很常见的型号,今天就把整流桥2W10,DB107S和KBP307的封装参数对比一小,以便大家在选型时有更好的参考。 2W10参数: 型号:2W10 封装:WOB-4 最大重复峰…

Redis实现全局唯一id,实现优惠卷秒杀的下单功能

Redis实现全局唯一id public class RedisIdWorker {private StringRedisTemplate stringRedisTemplate;public RedisIdWorker(StringRedisTemplate stringRedisTemplate) {this.stringRedisTemplate stringRedisTemplate;}//开始时间戳private static final long BEGIN_TIMEST…

Postman之接口关联

一、前言 在我们做接口测试时,绝大多数测试人员都会使用 Postman 来进行测试,因为 Postman 的易用性非常好。进行单接口测的时候十分方便,但是实际项目上很多接口都会有依赖关系,这使得每次接口请求前,都要先手动获取…

JMeter操作笔记

通过这个图,我们可以看到一个简单的计算逻辑: 1. 如果有 10000 个在线用户数,同时并发度是 1%,那显然并发用户数就是 100。 2. 如果每个线程的 20TPS,显然只需要 5 个线程就够了(请注意,这里…

函数编程和Stream

在函数编程里用到了一些Lamada语法,因此要先了解一些lamada的内容,然后再了解函数编程,进一步再去了解stream 一、lamada使用语法 1.1、使用格式 lambda 表达式的语法格式如下: (parameters) -> expression 或 (parameters…

专家通过六点考证唐村《李氏族谱》:辨别家谱真伪,有这些窍门

如何辨别家谱真实性 家谱与史书、地方志都是史学界无比重视的史料文献,诸如唐村《李氏族谱》就为我们解开了明末、传统武术、太极拳等谜团,也让我们站在社会底层的角度看到了明末清初的种种变革和生活影响。但家谱的内容相比较史书与地方志而言&#xf…

DEJA_VU3D - Cesium功能集 之 091-绘制等高线(纯前端)

前言 编写这个专栏主要目的是对工作之中基于Cesium实现过的功能进行整合,有自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有差不多实现小130个左右的功能,后续也会不断的追加,所以暂时打算一周2-3更的样子来更新本专栏(尽可能把代码简洁一些)。博文内容…

Allegro如何实现交换functions操作详细指导

Allegro如何实现交换functions操作详细指导 在做PCB设计的时候,换function也是用的较多的功能。但是前提是确保交换是被允许的 同样下面用下图为例介绍Allegro中是如何实现交换function的 具体操作如下 选择File选择Export-Libraries

学习使用html2canvas生成渐变色背景图片

学习使用html2canvas生成渐变色背景图片全部代码html2canvas官网生成图片的下载全部代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>生成渐变色背景图片</title> </head><style>#grad1 {width: 75…