uniapp 打包生成上位机软件及去除顶部导航栏和menu后自定义

一、安装electron

【打包慢,无反应】

更换为阿里镜像源 命令行下输入

arduino 复制代码
npm config set ELECTRON_MIRROR http://npm.taobao.org/mirrors/electron/

1、在控制台安装electron

cnpm install electron -g

2、在控制台安装electron-packager

cnpm install electron-packager -g

3、uniapp的manifest.json修改

运行的基础路径修改为:./ 不然打包出来会出现白屏,读取不到,因为打包出来的h5默认加载地址为/static/

去掉启用https协议: 不然会出现网络无法加载,去掉https不影响你请求后端的https协议。

​编辑

二、创建electron文件并去除顶部导航栏和menu

​编辑

1、创建 Electron 主进程文件

在 UniApp 项目的静态文件目录下创建一个 electron 文件夹,并在其中创建 main.js 文件,作为 Electron 的主进程文件。

main.js 文件内容

javascript 复制代码
const {
	app,
	BrowserWindow,
	ipcMain
} = require('electron'); //引入electron
const path = require('node:path');
let win;
let windowConfig = {
	width: 1400,
	height: 787,
	frame: false, // 去除顶部导航栏和menu
	webPreferences: {
		preload: path.join(__dirname, 'preload.js'), // 加载 preload.js
		contextIsolation: true, // 启用上下文隔离
		nodeIntegration: false, // 禁用 nodeIntegration
	}
}; //窗口配置程序运行窗口的大小

function createWindow() {
	win = new BrowserWindow(windowConfig); //创建一个窗口
	win.loadURL(`file://${__dirname}/index.html`); //在窗口内要展示的内容index.html 就是打包生成的index.html
	// win.webContents.openDevTools(); //开启调试工具
	win.on('close', () => {
		//回收BrowserWindow对象
		win = null;
	});
	win.on('resize', () => {
		win.reload();
	})
	//处理serialApi
	serialApiHandle(win)
	// 监听渲染进程的最小化请求
	ipcMain.on('minimize-window', () => {
		win.minimize();
	});
    // 监听渲染进程的关闭请求
	ipcMain.on('close-window', () => {
		win.close();
	});
    // 监听渲染进程的最大化请求
	// ipcMain.on('maximize-window', () => {
	// 	if (win.isMaximized()) {
	// 		win.unmaximize();
	// 	} else {
	// 		win.maximize();
	// 	}
	// });
}

app.on('ready', createWindow);
app.on('window-all-closed', () => {
	app.quit();
});
app.on('activate', () => {
	if (win == null) {
		createWindow();
	}
});

2.创建package.json

electron 文件夹中创建 package.json文件,存储项目信息

package.json 文件内容:

json 复制代码
{
  "name"    : "app-name",
  "version" : "0.1.0",
  "main"    : "main.js"
}

3. 创建 preload.js 文件

electron 文件夹中创建 preload.js 文件,用于在渲染进程和主进程之间安全地暴露方法。

preload.js 文件内容

javascript 复制代码
const {
	contextBridge,
	ipcRenderer
} = require('electron');

// 将方法暴露给渲染进程
contextBridge.exposeInMainWorld('electronAPI', {
	minimizeWindow: () => ipcRenderer.send('minimize-window'), // 最小化
	// maximizeWindow: () => ipcRenderer.send('maximize-window'), // 最大化
	closeWindow: () => ipcRenderer.send('close-window'), // 关闭
});

4. 修改 UniApp 页面代码,增加自定义标题栏按钮及功能

在 UniApp 的页面中添加按钮,并通过 window.electronAPI 调用函数。

给标题栏增加样式-webkit-app-region: drag;让标题栏可拖拽, -webkit-app-region: no-drag;让按钮可点击但不能拖拽

示例代码

xml 复制代码
<template>
  <view>
    <view class="title-bar">
      <button @click="minimizeWindow">最小化</button>
      <button @click="maximizeWindow">最大化</button>
      <button @click="closeWindow">关闭</button>
    </view>
  </view>
</template>

<script>
export default {
  methods: {
    minimizeWindow() {
      if (window.electronAPI) {
        window.electronAPI.minimizeWindow();
      }
    },
    maximizeWindow() {
      if (window.electronAPI) {
        window.electronAPI.maximizeWindow();
      }
    },
    closeWindow() {
      if (window.electronAPI) {
        window.electronAPI.closeWindow();
      }
    },
  },
};
</script>

<style>
.title-bar {
  -webkit-app-region: drag; /* 允许拖动 */
  height: 30px;
  background-color: #333;
  color: white;
  display: flex;
  align-items: center;
  padding: 0 10px;
}

.title-bar button {
  -webkit-app-region: no-drag; /* 禁止拖动 */
  background: none;
  border: none;
  color: white;
  cursor: pointer;
  margin-right: 10px;
}
</style>

三、 打包 Electron 应用

1、uniapp H5打包

​编辑

​编辑

2.点击打包后的路径打开文件夹

​编辑

3.进入static\electron文件夹将这三个文件剪切到index.html同级下

​编辑

4.打开cmd

​编辑

5.输入打包命令

css 复制代码
electron-packager . MyApp --win --out MyApp --arch=x64 --electron-version 12.0.7 --overwrite --ignore=node_modules

参数说明:

MyApp:你将要生成的exe文件的名称

--platform=win32:确定了你要构建哪个平台的应用,可取的值有 darwin, linux, mas, win32

--arch=x64:决定了使用 x86 还是 x64 还是两个架构都用

--icon=自定义.ico:自定义设置应用图标

--out=./out:指定打包文件输出的文件夹位置,当前指定的为项目目录下的out文件夹

--asar:该参数可以不加,如果加上,打包之后应用的源码会以.asar格式存在

--app-version=1.0.0:生成应用的版本号

--overwrite:覆盖原有的build,让新生成的包覆盖原来的包

--ignore=node_modules:如果加上该参数,项目里node_modules模块不会被打包进去

--electron-version 12.0.7:指定当前要构建的electron的电子版本(不带"v"),需要和当前的版本一致,具体可以在 控制台输入electron -v查看

打包成功后,根目录会生成一个新的文件夹,点进去,找到 exe 文件,双击就可以看到网页变成了一个桌面应用啦!

相关推荐
野生的程序媛9 分钟前
重生之我在学Vue--第8天 Vue 3 UI 框架(Element Plus)
前端·vue.js·ui
前端付杰37 分钟前
从Vue源码解锁位运算符:提升代码效率的秘诀
前端·javascript·vue.js
然后就去远行吧38 分钟前
小程序 wxml 语法 —— 37 setData() - 修改对象类型数据
android·前端·小程序
用户32035783600239 分钟前
高薪运维必备Prometheus监控系统企业级实战(已完结)
前端
黄天才丶1 小时前
高级前端篇-脚手架开发
前端
乐闻x1 小时前
React 如何实现组件懒加载以及懒加载的底层机制
前端·react.js·性能优化·前端框架
小鱼冻干1 小时前
http模块
前端·node.js
悬炫1 小时前
闭包、作用域与作用域链:概念与应用
前端·javascript
jiaHang1 小时前
小程序中通过IntersectionObserver实现曝光统计
前端·微信小程序
打野赵怀真1 小时前
前端资源发布路径怎么实现非覆盖式发布(平滑升级)?
前端·javascript