如何用uniapp打包桌面客户端exe包,vue或者uni项目如何打包桌面客户端之electron开发-优雅草央千澈以开源蜻蜓AI工具为例子演示完整教程-开源代码附上

简介: 如何用uniapp打包桌面客户端exe包,vue或者uni项目如何打包桌面客户端之electron开发-优雅草央千澈以开源蜻蜓AI工具为例子演示完整教程-开源代码附上

如何用uniapp打包桌面客户端exe包,vue或者uni项目如何打包桌面客户端之electron开发-优雅草央千澈以开源蜻蜓AI工具为例子演示完整教程-开源代码附上

问题

通常我们都用uniapp开发安卓和苹果客户端,还有小程序客户端,但是如果要打包桌面exe是否可行?

答案是可行的。

具体步骤

以本项目为例子,这是前端开源地址:

https://gitee.com/youyacao/youyacao-ai-uniapp

可以先下载好。

1. 安装 Node.js 和 Electron

首先,确保你已经安装了 Node.js(既然在使用uniapp做客户端开发,这个是必需品,这里不单独讲了)。

但是有一点,切记,node 对版本管理很麻烦,开发环境是什么版本,一定要记下来 v21.1.0 这是蜻蜓AI智能工具前端的node版本,如果版本不对应一定会有很多问题导致运行不起来,因此我们nvm安装这个版本。

执行:

nvm install v21.1.0

然后,通过 npm(Node.js 的包管理器)全局安装 Electron:

npm install electron -g

扩展知识:

Electron是一个由GitHub开发的开源框架,它允许开发者使用JavaScript、HTML和CSS构建跨平台的桌面应用程序。通过将Chromium和Node.js嵌入到同一个运行时环境中,Electron使得开发者能够使用Web技术来创建可以在Windows、macOS和Linux上运行的应用程序,而无需为每个平台编写特定的原生代码。以下是关于Electron的详细介绍:

Electron的主要特点

  • 跨平台兼容性:支持Windows、macOS和Linux。
  • 基于Web技术:使用HTML、CSS和JavaScript进行应用开发。
  • 内置Node.js和Chromium:提供强大的UI渲染能力和访问操作系统底层功能的API。
  • 多进程架构:包含主进程和渲染进程,通过IPC机制实现进程间通信。

Electron的应用场景

Electron广泛应用于需要跨平台支持的桌面应用开发,如企业内部工具、数据可视化工具、代码编辑器、媒体播放器等。

Electron与其他跨平台开发框架的对比

与Qt等传统跨平台开发框架相比,Electron在开发效率、技术栈统一性、社区支持等方面具有优势,但在性能、内存占用等方面可能存在劣势。选择哪个框架取决于具体的项目需求和开发团队的熟悉程度。

大家看到扩展知识的描述了吗,对的,支持Windows、macOS和Linux,那么核心就是如果开发桌面端,我们可以优先考虑Electron。

2. 导入 UniApp 项目

导入uniapp项目,直接在gitee可以下载

3. 配置main.js

写入以下代码 给大家解释下

const { app, BrowserWindow } = require('electron')
function createWindow () {
  const win = new BrowserWindow({
    width: 720,
    height: 1280,
    webPreferences: {
      nodeIntegration: true
    }
  })
  win.loadURL('http://localhost:8080')
}
app.whenReady().then(createWindow)
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})
app.on('activate', () => {
  if (BrowserWindow.getAllWindows().length === 0) {
    createWindow()
  }
})

这里得宽度 width: 720,高度 height: 1280,就是优雅草央千澈要打包出的客户端的尺寸呢,因为我们蜻蜓AI智能工具本身是为移动端造的,所以这是我们的尺寸,你们打包其他应用按照自己的来。

4. 配置package.json

"build": {
  "productName": "MyApp", 
  "directories": {
    "output": "dist"
  },
  "files": [
    "dist/electron/**/*"
  ],
  "win": {
    "target": "nsis"
  },
  "mac": {
    "target": "dmg"
  },
  "linux": {
    "target": "AppImage"
  }
}

这里是示范代码,给大家说明下,然后优雅草央千澈改为自己的内容

"build": {
    "productName": "优雅草蜻蜓AI桌面客户端", //产品名字
    "directories": {
      "output": "dist" //输出目录
    },
    "files": [
      "dist/electron/youyacao/" //输出目录具体路劲 
    ],
    "win": {
      "target": "nsis" // 不改 看扩展知识
    },
    "mac": {
      "target": "dmg" // 不改 看扩展知识
    },
    "linux": {
      "target": "AppImage" // 不改 看扩展知识
    }
  }

这里又有扩展知识了,

扩展知识:

NSIS、DMG和AppImage分别是Windows、macOS和Linux操作系统中用于分发软件的不同格式。以下是对这三种格式的详细介绍:

NSIS (Nullsoft Scriptable Install System)

  • 定义和用途:NSIS是一个免费、开源的Windows安装程序制作工具,通过脚本语言描述安装程序的行为和逻辑,允许用户完全控制安装程序的每个部分。
  • 特点:支持多语言、高度可定制、小巧且兼容性好。它广泛应用于需要创建Windows安装程序的场景,无论是软件发布、数据库打包还是其他需要自定义安装流程的场景。

DMG (Disk Image)

  • 定义和用途:DMG是macOS系统中用于分发软件的一种格式,通常以.dmg文件扩展名出现,用于创建可启动的磁盘镜像,方便用户安装和运行应用程序。
  • 特点:提供用户友好的安装界面,直接将应用程序拖拽到“应用程序”文件夹中即可完成安装,适用于Mac平台。DMG文件通常包含应用程序的可执行文件、必要的资源文件和启动器,使得用户可以轻松运行和卸载软件。

AppImage

  • 定义和用途:AppImage是一种用于Linux操作系统的应用程序打包格式,它允许开发者创建一个独立的、自包含的应用程序文件,用户下载后即可运行,无需安装过程。
  • 特点:具有便携性和可移植性,不依赖于特定的Linux发行版,用户可以在不同的Linux发行版之间轻松移动和使用AppImage文件。AppImage文件通常可以通过赋予执行权限后直接运行,无需额外的安装步骤。

NSIS、DMG和AppImage都是各自操作系统中广泛使用的软件分发格式,它们各自具有独特的特点和优势,选择哪种格式取决于用户的特定需求和操作系统环境。

我们一定更要对很多事物的基本概念要清楚,不然的话做什么都是蒙的,反正优雅草央千澈就是这样的,不管做什么要知道其基础概念,有必要的情况会究其原理。

现在我们执行

npm run build 已经生效,但是报错

> my-electron-app@1.0.0 build
> electron-builder
'electron-builder' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

此时,是因为我们还没有安装electron-builder,下一步

4. 安装 Electron Builder

Electron Builder 是一个用于构建和发布 Electron 应用程序的工具。通过 npm 安装它:

npm install electron-builder --save-dev

完成,

5. 打包客户端

完成,再次执行,又报错。

• electron-builder  version=25.1.8 os=10.0.19045
  • loaded configuration  file=package.json ("build" field)
  • author is missed in the package.json  appPackageFile=G:\clone\youyacao-ai-uniapp\package.json
  ⨯ Cannot compute electron version from installed node modules - none of the possible electron modules are installed.
See https://github.com/electron-userland/electron-builder/issues/3984#issuecomment-504968246

根据报错 这个错误表明 electron-builder 无法从你的项目中找到 electron 模块。为了解决这个问题,查阅资料,有可能是因为没有添加环境变量,

这个不太可能因为我们执行

electron -v

看到我们版本v33.2.1,因此我们可以指定我们的版本号,指定

"electronVersion": "33.2.1"

再次运行 npm run build

> my-electron-app@1.0.0 build
> electron-builder
  • electron-builder  version=25.1.8 os=10.0.19045
  • loaded configuration  file=package.json ("build" field)
  • author is missed in the package.json  appPackageFile=G:\clone\youyacao-ai-uniapp\package.json
  • writing effective config  file=dist\electron\builder-effective-config.yaml
  • installing production dependencies  platform=win32 arch=x64 appDir=G:\clone\youyacao-ai-uniapp
  • executing @electron/rebuild  electronVersion=33.2.1 arch=x64 buildFromSource=false appDir=./
  • installing native dependencies  arch=x64
  • completed installing native dependencies
  • packaging       platform=win32 arch=x64 electron=33.2.1 appOutDir=dist\electron\win-unpacked
  • downloading     url=https://github.com/electron/electron/releases/download/v33.2.1/electron-v33.2.1-win32-x64.zip size=115 MB parts=8
  • downloaded      url=https://github.com/electron/electron/releases/download/v33.2.1/electron-v33.2.1-win32-x64.zip duration=11.009s
  • updating asar integrity executable resource  executablePath=dist\electron\win-unpacked\MyElectronApp.exe
  ⨯ Application entry file "main.js" in the "G:\clone\youyacao-ai-uniapp\dist\electron\win-unpacked\resources\app.asar" does not exist. Seems like a wrong configuration.  failedTask=build stackTrace=Error: Application entry file "main.js" in the "G:\clone\youyacao-ai-uniapp\dist\electron\win-unpacked\resou
rces\app.asar" does not exist. Seems like a wrong configuration.
    at error (D:\soft\nvm\v21.1.0\node_modules\electron-builder\node_modules\app-builder-lib\src\asar\asarFileChecker.ts:7:12)
    at checkFileInArchive (D:\soft\nvm\v21.1.0\node_modules\electron-builder\node_modules\app-builder-lib\src\asar\asarFileChecker.ts:31:11)
    at WinPackager.checkFileInPackage (D:\soft\nvm\v21.1.0\node_modules\electron-builder\node_modules\app-builder-lib\src\platformPackager.ts:527:7)
    at WinPackager.sanityCheckPackage (D:\soft\nvm\v21.1.0\node_modules\electron-builder\node_modules\app-builder-lib\src\platformPackager.ts:575:5)
    at WinPackager.doPack (D:\soft\nvm\v21.1.0\node_modules\electron-builder\node_modules\app-builder-lib\src\platformPackager.ts:329:5)
    at WinPackager.pack (D:\soft\nvm\v21.1.0\node_modules\electron-builder\node_modules\app-builder-lib\src\platformPackager.ts:138:5)
    at Packager.doBuild (D:\soft\nvm\v21.1.0\node_modules\electron-builder\node_modules\app-builder-lib\src\packager.ts:459:9)
    at executeFinally (D:\soft\nvm\v21.1.0\node_modules\electron-builder\node_modules\builder-util\src\promise.ts:12:14)
    at Packager.build (D:\soft\nvm\v21.1.0\node_modules\electron-builder\node_modules\app-builder-lib\src\packager.ts:393:31)
    at executeFinally (D:\soft\nvm\v21.1.0\node_modules\electron-builder\node_modules\builder-util\src\promise.ts:12:14)
PS G:\clone\youyacao-ai-uniapp>

这回报错太多了 要仔细看看呢,看起来一大堆 其实在main.js 部分就错了。

⨯ Application entry file “main.js” in the “G:\clone\youyacao-ai-uniapp\dist\electron\win-unpacked\resources\app.asar” does not exist. Seems like a wrong configuration. failedTask=build stackTrace=Error: Application entry file “main.js” in the “G:\clone\youyacao-ai-uniapp\dist\electron\win-unpacked\resou

这里核心问题应该是;

这个错误表明在 “G:\clone\youyacao-ai-uniapp\dist\electron\win-unpacked\resources\app.asar” 文件中找不到应用程序入口文件 “main.js”。这看起来像是配置错误。

5. 配置main.js入口

我们对main.js文件进行改造,对入口文件main.js进行改造。

const { app, BrowserWindow } = require('electron');
const path = require('path');
const url = require('url');
let mainWindow;
function createWindow() {
  mainWindow = new BrowserWindow({
    width: 720,  //宽度 
    height: 1280,  //高度
    webPreferences: {
      nodeIntegration: true,
      contextIsolation: false,
    },
  });
  // 加载UniApp应用的index.html
  mainWindow.loadURL(
    url.format({
      pathname: path.join(__dirname, 'dist/index.html'),
      protocol: 'file:',
      slashes: true
    })
  );
  mainWindow.on('closed', function () {
    mainWindow = null;
  });
}
app.on('ready', createWindow);
app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit();
});
app.on('activate', function () {
  if (mainWindow === null) createWindow();
});

另外我们在main.js代码中可以看到 #ifndef VUE3 和// #endif 包含在一起,这是什么意思呢?

扩展知识:

#ifndef VUE3 是一个C/C++预处理器指令,用于条件编译。它的作用是检查是否已经定义了 VUE3 宏。如果没有定义,则编译器会包含接下来的代码块;如果已经定义了,则编译器会跳过这部分代码。

#ifdef VUE3
#endif
#ifdef VUE2
 #endif

这个宏可以用来根据不同的Vue版本包含不同的代码。

改造如下,我们再次执行npm run build还是报错,在研究下发现,我应该把main.js和package.json 分开,因为原先我们app的配置太多了,对吧!

优雅草央千澈突然灵机一闪,对啊 引入我们的入口文件的内容总要把内容放进去把。

6. 打包H5

打包h5,打包好以后我在根目录下建立H5文件夹,然后我再把所有配置文件和内容都放进去

那么我们的配置路径也改下吧:

__dirname, ‘H5/index.html

并且我们h5文件目录下的配置文件 仅仅只有打包客户端的配置,其他配置统统删掉。

清晰

7. 继续打包客户端

npm run build 启动!

又报错,因为这个报错

⨯ Application entry file “main.js” in the “G:\clone\youyacao-ai-uniapp\H5\dist\electron\win-unpacked\resources\app.asar” does not exist. Seem

s like a wrong configuration. failedTask=build stackTrace=Error: Application entry file “main.js” in the “G:\clone\youyacao-ai-uniapp\H5\dist\

electron\win-unpacked\resources\app.asar” does not exist. Seems like a wrong configuration.

跟app.asar 非常有关系,因此优雅草央千澈又去外网搜索下相关知识,在谷歌得到

“asar”: true,加入 main.js入口,测试了下,还是失败

然后 ,然后 又得到一个方法重装一下,也试过了 不行

• electron-builder  version=25.1.8 os=10.0.19045
  • loaded configuration  file=package.json ("build" field)
  • author is missed in the package.json  appPackageFile=G:\clone\youyacao-ai-uniapp\H5\package.json
  • writing effective config  file=dist\electron\builder-effective-config.yaml
  • installing production dependencies  platform=win32 arch=x64 appDir=G:\clone\youyacao-ai-uniapp\H5
  • executing @electron/rebuild  electronVersion=33.2.1 arch=x64 buildFromSource=false appDir=./
  • installing native dependencies  arch=x64
  • completed installing native dependencies
  • packaging       platform=win32 arch=x64 electron=33.2.1 appOutDir=dist\electron\win-unpacked
  • updating asar integrity executable resource  executablePath=dist\electron\win-unpacked\youyacaoAI.exe
  ⨯ Application entry file "main.js" in the "G:\clone\youyacao-ai-uniapp\H5\dist\electron\win-unpacked\resources\app.asar" does not exist. Seem
    at Packager.doBuild (D:\soft\nvm\v21.1.0\node_modules\electron-builder\node_modules\app-builder-lib\src\packager.ts:459:9)
    at executeFinally (D:\soft\nvm\v21.1.0\node_modules\electron-builder\node_modules\builder-util\src\promise.ts:12:14)
    at Packager.build (D:\soft\nvm\v21.1.0\node_modules\electron-builder\node_modules\app-builder-lib\src\packager.ts:393:31)
    at executeFinally (D:\soft\nvm\v21.1.0\node_modules\electron-builder\node_modules\builder-util\src\promise.ts:12:14)

也就是说目前,到这一步,进行不下去了, 我们可以看到 完整的客户端有打包成功,但是有错误,youyacaoAI.exe

由于现在要赶时间 做另一件事,因此这里先搁置,等优雅草央千澈解决完后再来更新下本文即可,代码和配置文件都推上去了,其他同学可以下载试试,如果有解决了可以联系我更新。

相关文章
|
10天前
|
人工智能 自然语言处理 Java
【100%好礼】诚邀体验SoFlu-JavaAl开发助手,重塑AI编码价值
在这个数字化时代,软件开发任务繁重,飞算科技推出SoFlu-JavaAl开发助手,诚邀您体验AI编码新境界。它不仅生成代码,还通过自然语言理解需求,精准生成完整工程源码,大幅缩短设计工期,提升效率。SoFlu-JavaAl支持一键构建Java Maven工程,轻松合并老项目,快速响应需求变更。参与体验还有机会获多重好礼!
|
1天前
|
存储 人工智能 开发框架
Eliza:TypeScript 版开源 AI Agent 开发框架,快速搭建智能、个性的 Agents 系统
Eliza 是一个开源的多代理模拟框架,支持多平台连接、多模型集成,能够快速构建智能、高效的AI系统。
27 8
Eliza:TypeScript 版开源 AI Agent 开发框架,快速搭建智能、个性的 Agents 系统
|
21天前
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
129 15
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
10天前
|
人工智能 前端开发 Java
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
本文介绍了如何使用Spring AI Alibaba开发一个简单的AI对话应用。通过引入`spring-ai-alibaba-starter`依赖和配置API密钥,结合Spring Boot项目,只需几行代码即可实现与AI模型的交互。具体步骤包括创建Spring Boot项目、编写Controller处理对话请求以及前端页面展示对话内容。此外,文章还介绍了如何通过添加对话记忆功能,使AI能够理解上下文并进行连贯对话。最后,总结了Spring AI为Java开发者带来的便利,简化了AI应用的开发流程。
195 0
|
4天前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
|
22天前
|
机器学习/深度学习 人工智能 自然语言处理
MMAudio:开源 AI 音频合成项目,根据视频或文本生成同步的音频
MMAudio 是一个基于多模态联合训练的高质量 AI 音频合成项目,能够根据视频内容或文本描述生成同步的音频。该项目适用于影视制作、游戏开发、虚拟现实等多种场景,提升用户体验。
80 7
MMAudio:开源 AI 音频合成项目,根据视频或文本生成同步的音频
|
18天前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十七、如何识别用户上传视频中的人体、运动、动作、姿态?
【云智AI运动识别小程序插件】提供人体、运动、姿态检测的AI能力,支持本地原生识别,无需后台服务,具有速度快、体验好、易集成等优点。本文介绍如何使用该插件实现用户上传视频的运动识别,包括视频解码抽帧和人体识别的实现方法。
|
19天前
|
人工智能 小程序 数据处理
uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!
近期,多家康复机构咨询AI运动识别插件是否适用于肢力运动受限患者的康复锻炼。本文介绍该插件在康复锻炼中的应用场景,包括康复运动指导、运动记录、恢复程度记录及过程监测。插件集成了人体检测、姿态识别等功能,支持微信小程序平台,使用便捷,安全可靠,帮助康复治疗更加高效精准。
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
师资研修|AI技术赋能教材建设和课程开发——乌鲁木齐某教育部门
近日,TsingtaoAI派出AI专家为乌鲁木齐中职院校的教师团队,举办“AI技术赋能教材建设与课程开发”的师资研修。此次培训由TsingtaoAI的AI专家高寒和教育专家刘建老师亲自授课,面对的是来自乌鲁木齐的教育工作者,特别是中职院校的教学骨干。整个活动不仅涉及人工智能技术本身的深度解析,还深入探讨了如何将这些前沿技术高效应用于教材和课程体系的创新。
29 0
|
6天前
|
机器学习/深度学习 人工智能 自动驾驶
企业内训|AI大模型在汽车行业的前沿应用研修-某汽车集团
本课程是TsingtaoAI为某汽车集团高级项目经理设计研发,课程全面系统地解析AI的发展历程、技术基础及其在汽车行业的深度应用。通过深入浅出的理论讲解、丰富的行业案例分析以及实战项目训练,学员将全面掌握机器学习、深度学习、NLP与CV等核心技术,了解自动驾驶、智能制造、车联网与智能营销等关键应用场景,洞悉AI技术对企业战略布局的深远影响。
135 97

热门文章

最新文章