Electron桌面应用打包现有的vue项目

news2024/11/22 15:50:25

1 环境准备

  • Node:v16.20.2(本地vue项目nodejs版本)
  • Electron:22.3.7
  • vue:2

版本管理

2 Vue项目准备

  • 更新相关依赖
  • npm install --registry https://registry.npmmirror.com/
  • npm run dev

3、引入Electorn

  • 安装指定版本Electron:npm install electron --save-dev
  • 查看Electron版本:npx electron --version
注意:切换成国内源以及设置
  • 切换国内源:npm config set registry https://registry.npmmirror.com
  • 配置环境变量
    • ELECTRON_MIRROR:https://npmmirror.com/mirrors/electron/
    • ELECTRON_CUSTOM_DIR:{{ version }}

4、修改项目

4.1 根目录创建main.js
const { app, BrowserWindow } = require('electron');
const path = require('path');

function createWindow() {
    const win = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            nodeIntegration: true,
            contextIsolation: false,
        },
    });

    win.loadFile(path.join(__dirname, 'dist/index.html')); // 修改为你的打包输出路径
    // 打开开发者工具
    win.webContents.openDevTools();
}

app.whenReady().then(createWindow);
app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') app.quit();
});
app.on('activate', () => {
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
});

4.2 修改 package.json

package.json 中添加 Electron 启动脚本:

"main": "main.js",
"scripts": {
    "electron": "electron .",
    "build": "vue-cli-service build" // 确保有这个构建命令
}
4.3 构建项目
npm run build

这将生成 dist 文件夹,包含生产环境的静态文件。

4.4 启动 Electron

npm run electron

5、使用内置web渲染vue

Electron 中启动一个内置的 Node.js Web 服务器来渲染用 Vue.js 编写的页面,可以使用 express 或其他类似的 Node.js Web 框架。以下是一个基本的实现步骤:

5.1 安装依赖

首先,确保您已安装 expressvue 相关的依赖。可以通过 npm 安装:

npm install express
5.2 设置 Express 服务器

在您的项目中创建一个新的文件,例如 server.js,并配置一个简单的 Express 服务器:

// server.js
const express = require('express');
const path = require('path');

const app = express();
const PORT = 3000;

// Serve static files from the Vue app
app.use(express.static(path.join(__dirname, 'dist')));

// Handle all requests to serve the index.html file
app.get('*', (req, res) => {
    res.sendFile(path.join(__dirname, 'dist', 'index.html'));
});

app.listen(PORT, () => {
    console.log(`Server is running at http://localhost:${PORT}`);
});
5.3 修改 main.js

在主进程中,启动该服务器,并在 BrowserWindow 中加载它:

// main.js
const { app, BrowserWindow } = require('electron');
const path = require('path');
const { exec } = require('child_process');

function createWindow() {
    const win = new BrowserWindow({
        width: 800,
        height: 600,
        webPreferences: {
            nodeIntegration: true,
            contextIsolation: false,
        },
    });

    // Load the local server
    win.loadURL('http://localhost:3000');
}

app.whenReady().then(() => {
    // Start the server
    exec('node server.js', (err, stdout, stderr) => {
        if (err) {
            console.error(`Error starting server: ${stderr}`);
            return;
        }
        console.log(stdout);
    });

    createWindow();
});

// Quit when all windows are closed
app.on('window-all-closed', () => {
    app.quit();
});
5.4 确保构建 Vue 应用

确保在启动 Electron 应用之前,您已经构建了 Vue 应用(例如运行 npm run build),以便生成 dist 文件夹。

5.5 启动项目

最后,启动 your Electron 应用:

npm start

6、打包项目

如果您想打包成可执行文件,可以使用 Electron Builder 或 Electron Packager。安装 Electron Builder:

npm install electron-builder --save-dev

然后在 package.json 中添加打包配置:

{
  "name": "your-app-name",
  "version": "1.0.0",
  "main": "main.js",
  "scripts": {
    "start": "electron .",
    "build": "vue-cli-service build", // 如果使用 Vue CLI
    "package": "electron-builder" // 如果使用 electron-builder
  },
  "devDependencies": {
    "electron": "^x.x.x", // 替换为您使用的版本
    "electron-builder": "^x.x.x" // 替换为您使用的版本
  }
}

打包命令:

npm run package

出错:

Get "https://github.com/electron/electron/releases/download/%7B%7B%20version%20%7D%7D/electron-v22.3.27-win32-ia32.zip": EOF
github.com/develar/app-builder/pkg/download.(*Downloader).follow.func1
        /Users/runner/work/app-builder/app-builder/pkg/download/downloader.go:206
github.com/develar/app-builder/pkg/download.(*Downloader).follow
        /Users/runner/work/app-builder/app-builder/pkg/download/downloader.go:234
github.com/develar/app-builder/pkg/download.(*Downloader).DownloadNoRetry
        /Users/runner/work/app-builder/app-builder/pkg/download/downloader.go:128
github.com/develar/app-builder/pkg/download.(*Downloader).Download
        /Users/runner/work/app-builder/app-builder/pkg/download/downloader.go:112
github.com/develar/app-builder/pkg/electron.(*ElectronDownloader).doDownload
        /Users/runner/work/app-builder/app-builder/pkg/electron/electronDownloader.go:203
github.com/develar/app-builder/pkg/electron.(*ElectronDownloader).Download
        /Users/runner/work/app-builder/app-builder/pkg/electron/electronDownloader.go:188
github.com/develar/app-builder/pkg/electron.downloadElectron.func1.1
        /Users/runner/work/app-builder/app-builder/pkg/electron/electronDownloader.go:73
github.com/develar/app-builder/pkg/util.MapAsyncConcurrency.func2
        /Users/runner/work/app-builder/app-builder/pkg/util/async.go:68
runtime.goexit
        /Users/runner/hostedtoolcache/go/1.21.12/arm64/src/runtime/asm_386.s:1363
  ⨯ D:\projects\qihangerp-weishop\app\node_modules\app-builder-bin\win\ia32\app-builder.exe process failed ERR_ELECTRON_BUILDER_CANNOT_EXECUTE

2024/10/2 00:22:26

在这里插入图片描述

原因分析:

  • 1、第一个错误是electron下载地址找错了。解决方案是:

    • 方案一:修改package.json修改正确的下载地址

        "build": {
          "electronDownload": {
            "mirror": "https://github.com/electron/electron/releases/download/"
          }
        },
      
    • 方案二:手动下载electron对应的版本包,放在C:\Users\qilip\AppData\Local\electron\Cache(直接将zip压缩包放进去)

  • 2、electron-builder打包需要的三个关键文件下载失败问题:

winCodeSign-2.6.0.7z
nsis-resources-3.4.1.7z
Get nsis-3.0.4.1.7z

解决方案:

  • 手动下载这三个包(https://github.com/electron-userland/electron-builder-binaries/releases?page=1)放到一下3个文件夹
    • C:\Users\qilip\AppData\Local\electron-builder\Cache\nsis\nsis-3.0.4.1
    • C:\Users\qilip\AppData\Local\electron-builder\Cache\nsis\nsis-resources-3.4.1
    • C:\Users\qilip\AppData\Local\electron-builder\Cache\winCodeSign\winCodeSign-2.6.0

最后顺利打包成功

在这里插入图片描述

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

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

相关文章

基于C语言的排序

排序的概念 : 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录&#xff0c…

Hadoop大数据入门——Hive-SQL语法大全

Hive SQL 语法大全 基于语法描述说明 CREATE DATABASE [IF NOT EXISTS] db_name [LOCATION] path; SELECT expr, ... FROM tbl ORDER BY col_name [ASC | DESC] (A | B | C)如上语法,在语法描述中出现: [],表示可选,如上[LOCATI…

课堂点名系统小程序的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,论坛信息管理,基础数据管理,课程信息管理,课程考勤管理,轮播图信息 微信端账号功能包括:系统首页,论坛信…

【深度强化学习】DDPG+popart技巧(最详解)

文章目录 前言遇到的困难参考最后实现情况 一、popart 是什么?(论文解读)具体的理解关于mappo原代码中debiasing_term 二、复刻popart主要进行了什么操作?1.art:2.pop:3.算法理解4.上述未考虑的部分(关键) 三、代码实现…

传感器模块编程实践(三)舵机+超声波模块融合DIY智能垃圾桶模型

文章目录 一.概要二.实验模型原理1.硬件连接原理框图2.控制原理 三.实验模型控制流程四.智能感应垃圾桶模型程序五.实验效果视频六.小结 一.概要 随着科技的飞速发展和环保意识的日益增强,智能垃圾桶成为了城市生活的新宠,智能垃圾桶人们无需接触垃圾桶…

【Linux系统编程】第二十八弹---构建基础文件操作库与理解标准错误流(stderr)在C与C++中的应用

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、封装简单的库 1.1、定义文件结构 1.2、打开文件 1.3、刷新缓冲区 1.4、写文件 1.5、关闭文件 1.6、各文件代码 2、s…

医院管理新趋势:Spring Boot技术引领

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…

Github优质项目推荐 - 第五期

文章目录 Github优质项目推荐 - 第五期一、【localsend】,47.5k stars - 附近设备文件互传二、【Pake】,29.9k stars - 网页变成桌面应用三、【laravel-crm】,10.7k stars - CRM 解决方案四、【localstack】,55.7k stars - 本地 A…

【C++】二叉搜索树+变身 = 红黑树

🚀个人主页:小羊 🚀所属专栏:C 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 前言一、定义与性质二、红黑树节点的定义三、新增节点插入四、验证红黑树五、AVL树和红黑树比较 前言 本文仅适合了…

【算法】DFS系列之 FloodFill 算法

【ps】本篇有 7 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1)图像渲染 .1- 题目解析 .2- 代码编写 2)岛屿数量 .1- 题目解析 .2- 代码编写 3)岛屿的最大面积 .1- 题目解析 .2- 代码编写 4)被围绕的区域 .1-…

allegro精确画圆形边框

1.显示原点位置: 2.class-subclass依次选择Board Geometry-Outline 3.菜单ADD---Circle,右侧option,依次设置如下,如图可设置为圆心(0,0),半径为42mm的边框,不要忘了右键Done,完成绘…

海量数据去重的hash,布隆过滤器Bloom Filter,一致性hash

文章目录 一、⭐hash函数如何选取hash函数?冲突处理 二、⭐海量数据去重布隆过滤器**布隆过滤器介绍**布隆过滤如何应用 三、⭐一致性哈希基本原理: 四、⭐一道面试题 一、⭐hash函数 hash函数的作⽤:避免插⼊的时候字符串的⽐较&#xff0c…

怎么把店铺地址弄上高德地图?

随着互联网的高度普及,如今的营销方式也发生了巨大的变化。以前的商家要想提高店铺销售额,只需要在线下举办促销活动就可以吸引周边的顾客上门消费,但现在,商家如果想获取更多客流量,就必须在网上进行曝光,…

性能测试学习6:jmeter安装与基本配置/元件

一.JDK安装 官网:https://www.oracle.com/ 二.Jmeter安装 官网:http://jmeter.apache.org/download_jmeter.cgi 下载zip包,zip后缀那个才是Windows系统的jmeter 三.Jmeter工作目录介绍 四.Jmeter功能 1)修改默认配置-汉化 2&am…

市场价值99的likeyun付费进群插件

市场价值99的likeyun付费进群插件 这款是引流宝的付费插件 要搭配引流宝使用 多模版 最近发现好多人再倒卖大佬的付费插件 为了减少这种情况,在征得大佬的同意下决定免费发出来 此版本是付费进群最新1.0版本 不提供后续更新服务,有能力的还是建议支持…

每日OJ题_牛客_乒乓球筐_哈希_C++_Java

目录 牛客_乒乓球筐_哈希 题目解析 C代码 Java代码 牛客_乒乓球筐_哈希 乒乓球筐__牛客网 (nowcoder.com) 描述: nowcoder有两盒(A、B)乒乓球,有红双喜的、有亚力亚的……现在他需要判别A盒是否包含了B盒中所有的种类&#…

深入理解 Spring Cache 的工作原理及集成其它第三方缓存

目录 1、Spring Cache 简介2、常用注解2.1、常用注解介绍2.2、常用注解的主要参数 3、缓存注解上 SPEL 表达式可使用的元数据4、入门案例4.1、引入依赖4.2、开启缓存功能4.3、使用缓存4.3.1、新建一个 UserServiceImpl4.3.2、新建一个 UserController 5、工作原理5.1、缓存自动…

Java建筑行业智能化管理系统源码,PC端、手机端、大屏端源码,智慧工地管理平台源码,智慧建设平台 智慧住建平台

智慧工地平台全套源码合作 智慧工地是指运用现代信息技术,如物联网(IoT)、大数据、人工智能(AI)、云计算、移动互联网等,对传统建筑工地进行智能化改造和管理的新型工地。它通过高度集成的系统和设备&#…

GeoCue与Xer Technologies合作推动无人机测绘技术革新

GeoCue与Xer Technologies合作推动无人机测绘技术革新 近期,LiDAR测绘硬件和软件开发商GeoCue与瑞士长航时混合动力无人机制造商Xer Technologies AG携手合作,成功将GeoCue的TrueView 720 LiDAR和图像传感器集成至Xer X8无人机平台。这一里程碑式的合作不仅标志着无人机测绘技…