uniapp h5 生成 ubuntu桌面程序 并运行方法

uniapp h5 生成 ubuntu桌面程序 并运行方法,在window环境下开发,发布到ubuntu桌面,并运行

1、安装Nodejs

安装包官方下载地址:https://www.nodejs.com.cn/

安装完后cmd,如图,即安装成功

2、通过Nodejs安装 electron

window的cmd命令下执行

官方推荐的如下命令

npm install --save-dev electron

报错

网络问题,国外的东西

改用以下方法

npm install -g cnpm --registry=https://registry.npm.taobao.org

使用 cnpm 进行安装

cnpm i electron --save-d
cnpm install electron-packager -g

这样就成功了

二、uniapp发布

1、修改项目运行路径./

2、发布程序

3、发布后的目录

F:\vue\HBuilderProjects\IotTouchScreen_PM1001\unpackage\dist\build\h5

在下面新建两个文件,main.js和package.json

package.json 写入内容

{  "name"    : "exam",  "version" : "0.1.0",  "main"    : "main.js"}

main.js写入内容

const {
app,
BrowserWindow,
ipcMain
} = require('electron')
const fs = require('fs')
const electron = require('electron')
const path = require('path')
const url = require('url')// ipcMain.on('asynchronous-message', function(event, arg) {
//    // arg是从渲染进程返回来的数据
//   console.log(arg,1);//   // 这里是传给渲染进程的数据C:/Users/Administrator/Desktop/test.txt
//   fs.readFile(path.join(__dirname,"./test.txt"),"utf8",(err,data)=>{
//    if(err){
// event.sender.send('asynchronous-reply', "读取失败");
// }else{
// event.sender.send('asynchronous-reply', data);
// }//   })
// });// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
let win
const Menu = electron.Menufunction createWindow() {
// Create the browser window.
// Menu.setApplicationMenu(null)//解决点击窗口最大化样式整体过大问题
const WIDTH = 1860
const HEIGHT = 900
const aspectRatio = WIDTH / HEIGHT // 窗口宽高比win = new BrowserWindow({
fullscreen: true,//(设置默认打开满屏)
// width: 800,
// height: 600,
// width: WIDTH,
// height: HEIGHT,
frame: false, // 无边框窗口
webPreferences: {
nodeIntegration: true, // 使渲染进程拥有node环境},
icon: path.join(__dirname, 'icon.ico') // 设置ico})win.once('ready-to-show', () => {
// 限制窗口最小尺寸(int整形), 无边框模式下,不考虑标题栏高度
win.setMinimumSize(WIDTH / 2, HEIGHT / 2)
win.show()
})// 控制等比缩放
win.on('will-resize', resizeWindow)function resizeWindow(event, newBounds) {
const wins = event.sender
event.preventDefault() // 拦截,使窗口先不变
const currentSize = wins.getSize()
const widthChanged = currentSize[0] !== newBounds.width // 判断是宽变了还是高变了,两者都变优先按宽适配
// ! 虽然搞不懂为何有1px偏差,但是可以解决问题(Windows 10)
if (widthChanged) {
wins.setContentSize(newBounds.width - 1, parseInt(newBounds.width / aspectRatio + 0.5) - 1)
} else {
wins.setContentSize(parseInt(aspectRatio * newBounds.height + 0.5) - 1, newBounds.height - 1)
}
}// and load the index.html of the app.
win.loadURL(url.format({
pathname: path.join(__dirname, 'index.html'),
protocol: 'file:',
slashes: true
}))
//cpu// Open the DevTools.
// win.webContents.openDevTools()
// Emitted when the window is closed.
win.on('closed', () => {
// Dereference the window object, usually you would store windows
// in an array if your app supports multi windows, this is the time
// when you should delete the corresponding element.
win = null
})// ipcMain.on('asynchronous-message', function(event, arg) {
//    // arg是从渲染进程返回来的数据
//   console.log(arg,2);//   // 这里是传给渲染进程的数据C:/Users/Administrator/Desktop/test.txt
//   fs.readFile(path.join(__dirname,"./test.txt"),"utf8",(err,data)=>{
//    if(err){
// event.sender.send('asynchronous-reply', "读取失败");
// }else{
// event.sender.send('asynchronous-reply', data);
// }//   })
// });
}// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)// Quit when all windows are closed.
app.on('window-all-closed', () => {
// On macOS it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
if (process.platform !== 'darwin') {
app.quit()
}
})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 (win === null) {
createWindow()
}
})// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.

4、打包到目录运行平台win x64(玩熟了修改目标平台即可发到ubuntu),用window的cmd命令下执行指令

1.electron-packager . 可执行文件的文件名 --win --out 打包成的文件夹名 --arch=x64位还是32位 --electron-version版本号(不是你的h5版本号,是electron版本号,上面第一步安装的electron的版本号) --overwrite --ignore=node_modules
例如:

electron-packager . myAPP --win --out appDist --arch=x64 --electron-version 28.1.4 --overwrite --ignore=node_modules

也是网络问题,timeout问题

解决方法

发布到win x64

electron-packager . appName --platform=win32 --electron-version=28.1.4  --arch=x64 --download.mirrorOptions.mirror=https://npm.taobao.org/mirrors/electron/ --asar --app-version=0.0.0 --build-version=0.0.0 --out=outName --overwrite --no-package-manager --ignore="(.git)" --icon=logo.ico
 

发布到ubuntu arm64

electron-packager . appName --platform=linux --electron-version=28.1.4  --arch=arm64 --download.mirrorOptions.mirror=https://npm.taobao.org/mirrors/electron/ --asar --app-version=0.0.0 --build-version=0.0.0 --out=outName --overwrite --no-package-manager --ignore="(.git)" --icon=logo.ico

会在当前目录下生成一个 outName 文件夹,下面就是发布后的程序

三、ubuntu arm64环境上运 行

把程序通过ssh复制到ubuntu上面  如: /usr/app/

通过桌面运行指令

cd /usr/app/

权限

chmod 777 appName

运行

./appName

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

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

相关文章

[flutter]GIF速度极快问题的两种解决方法

原因: 当GIF图没有设置播放间隔时间时,电脑上会默认间隔0.1s,而flutter默认0s。 解决方法一: 将图片改为webp格式。 解决方法二: 为图片设置帧频率,添加播放间隔。例如可以使用GIF依赖组件设置每秒运行…

【音视频】基于NGINX如何播放rtmp视频流

背景 现阶段直播越来越流行,直播技术发展也越来越快。Webrtc、rtmp、rtsp是比较火热的技术,而且应用也比较广泛。本文通过实践来展开介绍关于rtmp如何播放。 概要 本文重点介绍基于NGINX如何播放rtmp视频流 正文 1、构造rtsp视频流 可以参考上一篇…

Cacti 前台SQL注入漏洞复现(CVE-2023-39361)

0x01 产品简介 Cacti 是一套基于 PHP,MySQL,SNMP 及 RRDTool 开发的网络流量监测图形分析工具。 0x02 漏洞概述 该漏洞存在于graph_view.php文件中。默认情况下,访客用户无需身份验证即可访问graph_view.php,在启用情况下使用时会导致SQL注入漏洞。 攻击者可能利用此漏洞…

HCIP-7

IPV6: 为什么使用IPV6: V4地址数量不够V4使用NAT,破坏了端到端原则 IPV6的优点: 全球单播地址聚合性强(IANA组织进行合理的分配)多宿主----一个接口可以配置N个地址--且这些地址为同一级别自动配置---1)…

IPhone、IPad、安卓手机、平板以及鸿蒙系统使用惠普无线打印教程

演示机型:惠普M281fdw,测试可行机型:惠普M277,惠普M452、惠普M283 点击右上角图标。 点击WI-FI Direct 开,(如果WI-FI Direct关闭,请打开!) 记录打印机的wifi名称(SSID)和密码。 打开IPhone、I…

django后台进行加密手机号字段,加密存储,解密显示

需求: 1 :员工在填写用户的手机号时,直接填写,在django后台中输入 2:当员工在后台确认要存储到数据库时,后台将会把手机号进行加密存储,当数据库被黑之后,手机号字段为加密字符 3:员…

AD导出BOM表 导出PDF

1.Simple BOM: 这种模式下,最好在pcb界面,这样的导出的文件名字是工程名字,要是在原理图界面导出,会以原理图的名字命名表格。 直接在菜单栏 报告->Simple BOM 即可导出物料清单,默认导出 comment pattern qu…

253:vue+openlayers 加载HERE多种地图(v2软件版本)

第253个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中添加HERE地图,并且含多种的表现形式。包括地图类型,文字标记的设置、语言的选择、PPI的设定。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果图配置方式示例源…

2023年移远车载全面开花,智能座舱加速进击

作为汽车智能化的关键组件,车载模组正发挥着越来越重要的作用。 移远通信进入车载模组领域近十年,已形成了完善的车载产品队列,不但在5G/4G车载通信、智能座舱、C-V2X车路协同等领域打造了一枝独秀的产品线,也推出了车规级Wi-Fi/蓝…

LaWGPT安装和使用教程的复现版本【细节满满】

文章目录 前言一、下载和部署1.1 下载1.2 环境安装1.3 模型推理 总结 前言 LaWGPT 是一系列基于中文法律知识的开源大语言模型。该系列模型在通用中文基座模型(如 Chinese-LLaMA、ChatGLM等)的基础上扩充法律领域专有词表、大规模中文法律语料预训练&am…

【FastAPI】请求体

在 FastAPI 中,请求体(Request Body)是通过请求发送的数据,通常用于传递客户端提交的信息。FastAPI 使得处理请求体变得非常容易。 请求体是客户端发送给 API 的数据。响应体是 API 发送给客户端的数据 注:不能使用 …

2024年回炉计划之排序算法(一)

算法是计算机科学和信息技术中的重要领域,涉及到问题求解和数据处理的方法。要学习算法,你可能需要掌握以下一些基本知识: 基本数据结构: 了解和熟练使用各种数据结构,如数组、链表、栈、队列、树和图等。数据结构是算…

Java导出Excel并合并单元格

需求:需要在导出excel时合并指定的单元格 ruoyi excel 项目基于若伊框架二次开发,本着能用现成的就不自己写的原则,先是尝试了Excel注解中needMerge属性 /*** 是否需要纵向合并单元格,应对需求:含有list集合单元格)*/public boolean needMer…

4人遇难,北京突发火情 富维烟火识别防止悲剧再次发生

在北京一处居民区,一场突如其来的火灾夺走了四条宝贵的生命。火情迅速蔓延,烟雾弥漫,居民们猝不及防。这一悲剧再次提醒我们,火灾预防和早期识别的重要性不容忽视。 在这样的背景下,北京富维图像公司开发的FIS智能图像…

搭建自己的媒体矩阵-关于三微一端的媒体矩阵最简方案

引言 随着互联网的快速发展,媒体矩阵已成为品牌宣传的重要战略。通过搭建自己的媒体矩阵,企业、品牌和个人能够更有效地触达目标受众,传递信息、建立品牌形象,并与用户进行深度互动。本文将深入探讨如何制定一个有效的三微一端媒…

高光谱分类论文解读分享之Grid Network: 基于各向异性视角下特征提取的高光谱影像分类

IEEE GRSL 2023:Grid Network: 基于各向异性视角下特征提取的高光谱影像分类 题目 Grid Network: Feature Extraction in Anisotropic Perspective for Hyperspectral Image Classification 作者 Zhonghao Chen , Student Member, IEEE, Danfeng Hong , Senior …

【H3C】配置AAA认证和Telnet远程登陆,S5130 Series交换机

AAA配置步骤为: 1.开启telent远程登陆服务 2.创建用户,设置用户名、密码、用户的服务类型 3.配置终端登录的数量 4.配置vlan-if的ip地址,用来远程登陆 5.允许对应的vlan通过 1.开启telent远程登陆服务 sys …

【驱动】I2C驱动分析(四)-关键API解析

简介 在Linux内核源代码中的driver目录下包含一个i2c目录 i2c-core.c这个文件实现了I2C核心的功能以及/proc/bus/i2c*接口。   i2c-dev.c实现了I2C适配器设备文件的功能,每一个I2C适配器都被分配一个设备。通过适配器访设备时的主设备号都为89,次设备号…

PBR材质纹理下载

03:10 按照视频里的顺序 我们从第6个网站开始倒数 点击本行文字或下方链接 进入查看 6大网站地址 网址查看链接: http://www.uzing.net/community_show-1962-48-48-35.html 06 Tectures Wood Fence 001 | 3D TEXTURES 简介:最大的纹理网站之一&#x…

机器学习:BootStrapping(Python)

import numpy as np import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.decomposition import PCA # 主成分分析 from sklearn.preprocessing import LabelEncoder, StandardScaler # 类别标签编码,标准化处理 import matplo…