【Electron将HTML项目打包成桌面应用exe文件】

news/2024/11/28 15:50:41/

目标:前端将静态页面文件夹所有页面打包成一个exe文件(不包含其它文件)可运行。

步骤

1、初始化

npm init

此时项目多出一个package.json文件。

{"name": "my-electron-app","version": "1.0.0","description": "Hello World!","main": "main.js","scripts": {"start": "electron ."},"author": "Jane Doe","license": "MIT","devDependencies": {"electron": "^18.0.4"}
}

2、在根目录下新建main.js

const { app, BrowserWindow } = require('electron')function createWindow () {   
// 创建浏览器窗口
const win = new BrowserWindow({width: 800,height: 600,
resizable: false, //禁止改变主窗口尺寸
// frame:false, //去掉边框和工具栏  去掉之后就不能拖拽窗口,需要自己写
maximizable: false, //禁止最大化webPreferences: {nodeIntegration: true}
})
// 这里是配置的入口文件,如果需要改变入口文件改这里就可以 为相对路径
win.loadFile('index.html')// 打开开发者工具
win.webContents.openDevTools()}// Electron会在初始化完成并且准备好创建浏览器窗口时调用这个方法// 部分 API 在 ready 事件触发后才能使用。app.whenReady().then(createWindow)//当所有窗口都被关闭后退出app.on('window-all-closed', () => {// 在 macOS 上,除非用户用 Cmd + Q 确定地退出,// 否则绝大部分应用及其菜单栏会保持激活。if (process.platform !== 'darwin') {app.quit()}})app.on('activate', () => {// 在macOS上,当单击dock图标并且没有其他窗口打开时,// 通常在应用程序中重新创建一个窗口。if (BrowserWindow.getAllWindows().length === 0) {createWindow()}})

3、安装electron

npm install electron-packager -g

4、配置package的js文件

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

5、打包执行以下命令,此时会输出文件夹/out,找到exe文件就是打包程序的快捷方式,但是还没结束。我们只是通过electron-packager,将electron应用打包成可执行exe,我们还需要使用electron-winstaller将应用打包成exe安装程序;electron-squirrel-startup安装程序时生成快捷方式

npm run package

在这里插入图片描述

6、安装打包依赖包

npm install electron-packager --save-dev
npm install electron-squirrel-startup --save

7、新建build.js文件

var electronInstaller = require('electron-winstaller');
var path = require("path");resultPromise = electronInstaller.createWindowsInstaller({appDirectory: path.join('./out/needle-server-win32-x64'), //刚才生成打包文件的路径outputDirectory: path.join('./out/installer64'), //输出路径authors: 'Joy', // 作者名称exe: 'needle-server.exe', //在appDirectory寻找exe的名字noMsi: true, //不需要mis![这里写图片描述](https://img-blog.csdn.net/20180712225817503?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI2NjI2MTEz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)});resultPromise.then(() => console.log("It worked!"), (e) => console.log(`No dice: ${e.message}`));

7、执行后生成的文件在needle-server-win32-x64文件夹

npm run package

在这里插入图片描述
8、执行命令生成单个exe文件在installer64包下,双击直接可以打开。

node build.js

在这里插入图片描述

至此结束~


http://www.ppmy.cn/news/1078738.html

相关文章

Typescript的class语法[类]的操作和应用

TypeScript 是一种面向对象的编程语言,它扩展了 JavaScript,为其添加了类型系统和其他一些特性。TypeScript 的 class 语法可以让开发者更加方便地使用面向对象的编程方式。本文将详细介绍 TypeScript 的 class 语法的操作和应用,并提供代码案…

基于Django+node.js+MySQL+杰卡德相似系数智能新闻推荐系统——机器学习算法应用(含Python全部工程源码)+数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境node.js前端环境MySQL数据库 模块实现1. 数据预处理2. 热度值计算3. 相似度计算1)新闻分词处理2)计算相似度 4. 新闻统计5. API接口开发6. 前端界面实现1)运行逻辑2&#xff0…

什么是浏览器缓存(browser caching)?如何使用HTTP头来控制缓存?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 浏览器缓存和HTTP头控制缓存⭐ HTTP头控制缓存1. Cache-Control2. Expires3. Last-Modified 和 If-Modified-Since4. ETag 和 If-None-Match ⭐ 缓存策略⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击…

使用API调用获取商品数据的完整方案

在电子商务应用程序中,商品详情接口是不可或缺的一部分。它用于从电商平台或自己的数据库中获取商品数据,并将其提供给应用程序的其他部分使用。本文将详细介绍如何设计一个完整的商品详情接口方案,其中包括使用API调用来获取商品数据的过程。…

Mutation Observer 笔记(转)

Mutation Observer API Mutation Observer API 用来监视 DOM 变动。DOM 的任何变动,比如节点的增减、属性的变动、文本内容的变动,这个 API 都可以得到通知。 概念上,它很接近事件,可以理解为 DOM 发生变动就会触发 Mutation O…

算法通关村第9关【青铜】| 二分查找

一、基本查找 递增数组&#xff0c;从头往尾查找&#xff0c;O(n)的时间即可找到 public static int find(int[] nums,int target){for(int i 0;i<nums.length;i){if(nums[i] target){return nums[i];}}return -1; } 二、二分查找与分治 有序的数组从头到尾找效率未免…

《C和指针》笔记18:前缀++ 和后缀++

C 语言里有前缀 和后缀&#xff0c;使用还是有点不同的。对应的还有--操作符&#xff0c;但它们的工作原理与此相同&#xff0c;只是它所执行的是减值操作而不是增值操作。我们只要掌握的原理&#xff0c;--的原理也就知道了。 在这里我们把符号叫做操作符&#xff0c;把它操作…

Docker consul 容器服务自动发现和更新

目录 一、什么是服务注册与发现 二、Docker-consul集群 1.Docker-consul consul提供的一些关键特性 2.registrator 3.Consul-template 三、Docker-consul实现过程 以配置nginx负载均衡为例 先配置consul-agent &#xff0c;有两种模式server和client 四、Docker-cons…