Electron实战(一):环境搭建/Hello World/打包exe

文章目录

      • Electron
      • 安装Node.js
      • NodeJs推荐配置
      • 开始Electron项目
      • 创建index.js文件
      • 创建src目录
      • 运行
      • 打包生成exe
      • 生成安装包
      • 踩坑
    • 下一篇
    • Electron实战(二):将Node.js和UI能力(app/BrowserWindow/dialog)等注入html

Electron

Electron是一个使用JavaScript, HTML, CSS开发跨平台桌面应用程序的框架。

Electron整合Chromium浏览器(跨平台界面容器)和Node.js(跨平台系统能力),实现了一个使用JavaScript的全栈开发环境,逐渐成为开发跨平台桌面应用程序的有力竞争者。

2023年7月3日,腾讯正式上线 Windows QQ v9.9.0 体验版本。该版本基于 Electron 重构,实现了 Linux、macOS、Windows 三端架构统一。三个平台一套代码,多端运行,同步更新。三个平台的版本在外观、操作和性能上一致。

官方文档:https://www.electronjs.org/docs/latest/

安装Node.js

官网下载安装最新版NodeJs:

https://nodejs.org/en

安装到D:/env/nodejs/目录底下,安装成功后查看版本:

C:\Users\admin>node -v
v20.10.0C:\Users\admin>npm -v
10.2.3

NodeJs推荐配置

配置npm安装的全局模块的位置,以及缓存目录cache的位置

如果不配置,后续执行npm install xxx -g(g代表global全局安装的意思)安装语句时,会将安装的模块安装到C:\Users\用户名\AppData\Roaming\npm路径中,占用C盘空间。

可以在node安目录(比如D:\env\nodejs),下创建node_global目录和node_cache目录,然后执行命令:

npm config set prefix "D:\env\nodejs\node_global"
npm config set cache "D:\env\nodejs\node_cache"
npm config list #查看配置信息

检查设置是否成功:

C:\Users\admin>npm config get prefix
D:\env\nodejs\node_global
C:\Users\admin>npm config get cache
D:\env\nodejs\node_cache

开始Electron项目

创建项目目录,项目目录底下执行npm init,然后安装Electron

# 进入新建的项目目录
cd D:\dev\web\work\LuckyTools
# 初始化npm项目
npm init
# 项目底下安装electron
npm install electron -S

package.json中记录了安装electron的版本:

"dependencies": {"electron": "^27.1.3"
}

npm安装命令的常用参数比较:

npm install xxx(简写:npm i xxx) 本地安装xxx包,但不将安装包的信息写入package.json(不推荐)
-–global/-g 全局安装,安装后可直接(全局)使用相应包里面提供的命令
–-save/-s/-S 本地安装,安装版本写入package.json的dependencies
–-save-dev/-d/-D 本地安装,安装版本写入package.json的devDependencies

创建index.js文件

项目目录底下创建index.js作为项目的入口文件,文件内容:

//app 模块,控制整个应用程序的生命周期和事件处理
//BrowserWindow 模块,它创建和管理程序的窗口。
const { app, BrowserWindow } = require('electron')
const path = require('path')const iconPath = path.join(__dirname, './src/res/icon.ico')
//在 Electron 中,只有在 app 模块的 ready 事件被激发后才能创建浏览器窗口
app.on('ready', () => {//创建一个窗口const mainWindow = new BrowserWindow({icon: iconPath,});mainWindow.setMenu(null);//禁用默认的菜单栏//窗口加载html文件mainWindow.loadFile('./src/index.html')
})

创建src目录

里面存放前端页面,比如index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title></title><link rel="stylesheet" href="css/xxx.css"/><style></style>
</head>
<body><div>Hello World</div><script src="js/xxx.js"></script><script></script>
</body>
</html>

编辑package.jsonscripts属性下,增加start命令:

// package.json
"scripts": {"start": "electron .",
}

运行

npm start

在这里插入图片描述

打包生成exe

安装electron-packager后,可打包生成Windows可执行文件exe。

npm install electron-packager -g

添加打包package命令:

"scripts": {"start": "electron .","package":"electron-packager . needle-server --platform=win32 --arch=x64 --out=./out --asar --app-version=1.0.0 --overwrite --ignore=node_modules"},

执行打包命令:

PS D:\dev\web\work\LuckyTools> npm run package> lucky_tools@1.0.0 package
> electron-packager . needle-server --platform=win32 --arch=x64 --out=./out --asar --app-version=1.0.0 --overwrite --ignore=node_modulesPackaging app for platform win32 x64 using electron v27.1.3
Wrote new app to: out\needle-server-win32-x64

生成安装包

可以使用electron-builder,由于没有实际测试,略过。

npm i electron-builder --D

踩坑

笔者安装的版本:

"devDependencies": {"electron-builder": "^24.9.1","electron-packger": "^24.9.1"}

由于electron-packager依赖较新的node版本。只好重装了node最新版本。但安装后发现npm不能用了,npm -v 报错:

D:\env\nodejs\node_modules\npm\lib\es6\validate-engines.js:31throw err^TypeError: Class extends value undefined is not a constructor or nullat Object.<anonymous> (D:\env\nodejs\node_modules\npm\node_modules\fs-minipass\lib\index.js:136:4)at Module._compile (node:internal/modules/cjs/loader:1376:14)at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)at Module.load (node:internal/modules/cjs/loader:1207:32)at Module._load (node:internal/modules/cjs/loader:1023:12)at Module.require (node:internal/modules/cjs/loader:1235:19)at require (node:internal/modules/helpers:176:18)at Object.<anonymous> (D:\env\nodejs\node_modules\npm\node_modules\cacache\lib\content\read.js:4:13)at Module._compile (node:internal/modules/cjs/loader:1376:14)at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)Node.js v20.10.0

无奈,遇到版本不兼容了!!

只好先卸载nodejs,删除nodejs/node_modules/npm整个目录,然后重新安装最新版的nodejs。


下一篇

Electron实战(二):将Node.js和UI能力(app/BrowserWindow/dialog)等注入html

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

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

相关文章

Java并发(二十三)----同步模式之保护性暂停

1、定义 即 Guarded Suspension&#xff0c;用在一个线程等待另一个线程的执行结果 要点 有一个结果需要从一个线程传递到另一个线程&#xff0c;让他们关联同一个 GuardedObject 如果有结果不断从一个线程到另一个线程那么可以使用消息队列 JDK 中&#xff0c;join 的实现…

LFU缓存(Leetcode460)

例题&#xff1a; 分析&#xff1a; 这道题可以用两个哈希表来实现&#xff0c;一个hash表&#xff08;kvMap&#xff09;用来存储节点&#xff0c;另一个hash表&#xff08;freqMap&#xff09;用来存储双向链表&#xff0c;链表的头节点代表最近使用的元素&#xff0c;离头节…

近期作业总结(函数,递归,二进制)

二分查找函数 写一个二分查找函数 功能&#xff1a;在一个升序数组中查找指定的数值&#xff0c;找到了就返回下标&#xff0c;找不到就返回-1。 int bin_search(int arr[], int left, int right, int key) {int mid 0;while (left < right) {mid (right left) / 2;if…

Transformer 自然语言处理(一)

原文&#xff1a;Natural Language Processing with Transformers 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 前言 当你阅读这些文字时&#xff0c;一个奇迹正在发生&#xff1a;这页上的涂鸦正在在你的大脑皮层中转化为单词、概念和情感。我的 2021 年 11 月的思…

django微博热搜数据分析与可视化系统python毕业设计

简而言之&#xff0c;数据可视化是以图形方式呈现结构化或非结构化数据&#xff0c;从而将隐藏在数据中的信息直接呈现给人们。但是有一个陷阱:它不仅仅是使用数据可视化工具将数据转化为图形。相反&#xff0c;它是从数据的角度看待世界。换句话说&#xff0c;数据可视化的对象…

cherles抓包,安卓,http/https

前置条件&#xff1a;charles抓取手机数据包的前提&#xff0c;手机和电脑需要在一个局域网内。 1、charles官网下载地址 Download a Free Trial of Charles • Charles Web Debugging Proxy 下载以后按提示安装即可。 2、charles的配置 在charles中【proxy->proxy Set…

Zabbix“专家坐诊”第225期问答汇总

来源&#xff1a;乐维社区 问题一 Q&#xff1a;当系统负荷顶不住时&#xff0c;比如4个cpu&#xff0c;load average 特别高&#xff0c;比如100。这时候这段时间zabbix的所有指标数据会丢失&#xff0c;不知道原因是什么&#xff0c;有没有办法去处理&#xff0c;保存这块指标…

面试八股文(3)

文章目录 1.HashSet如何检查重复2.comparable和Comparator区别3.ConcurrentHashMap和Hashtable区别4.线程和进程5.并发与并行的区别6.为什么使用多线程7.使用多线程可能带来问题8.线程的生命周期和状态9.什么是上下文切换10.线程死锁11.产生死锁四个条件12.如何避免死锁 1.Hash…

游戏如何选择服务器

一个网络游戏要想长期运行下去&#xff0c;关键是用户体验&#xff0c;在初期阶段的游戏服务器租用环节就显得尤为重要。那么问题来了&#xff0c;游戏公司如何才能够在众多的服务器商中租用找到高性能、高性价比的游戏服务器租用呢&#xff1f;租用游戏服务器时需要考虑的因素…

幻兽帕鲁游戏中走路卡顿并且会出现回弹是什么原因?

可能原因是最近的 1.4.0 更新后&#xff0c;代码中有一个启动参数的加入&#xff0c;导致 CPU 占用极高。 可以远程连接你的服务器 然后执行下面的代码&#xff0c;删除代码中的那个启动参数。 # 删除可能导致人物回弹的游戏服务器启动参数 sudo -u ecs-assist-user sed -i s…

英码科技携手昇腾共建算力底座:推出EA500I超强AI处理能力边缘计算盒子!

在数字经济浪潮中&#xff0c;算力已成为不可或缺的驱动力&#xff0c;为各行各业的数字化转型提供了强大的推动力。面对多元化和供需不平衡的挑战&#xff0c;需要实现从理论架构到软硬件实现的质的飞跃&#xff0c;以满足持续增长的算力需求&#xff0c;华为昇腾在这一方面展…

【SpringBoot】RBAC权限控制

&#x1f4dd;个页人主&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;SpringBoot⛺️稳重求进&#xff0c;晒太阳 权限系统与RBAC模型 权限 为了解决用户和资源的操作关系&#xff0c; 让指定的用户&#xff0c;只能操作指定的资源。 权限功能 菜单权限&a…