vue后台项目打包成桌面应用程序(.exe)

news2024/9/24 7:24:33

目录(本项目基于vue2)

1、打包成功后的样子​

 2、开发环境

3、开发流程(serve + build + 基础设置 + 系统托盘)

4、插件下载地址 

5、打包后的配置文件:

6、镜像


1、打包成功后的样子

 2、开发环境

node:14.18.1

electron:12.0.0

3、开发流程(serve + build + 基础设置 + 系统托盘)

1、添加electron-builder

在项目目录下运行命令:vue add electron-builder 
注:(node版本14-16推荐选择12.0.0、16以上可以试着选择13.0.0、不过我没有试过。。。不知道可不可行)

 我这边输入vue add electron-builder  提示没有vue的命令

解决办法

vue/cli卸载重装 再运行vue add electron-builder

  1. 卸载命令:npm uninstall -g @vue/cli

  2. 安装命令:npm install -g @vue/cli

vue add electron-builder下载electron时可能会失败 

1、推荐使用淘宝镜像下载: npm i electron

 2、也可以设置electron仓库进行安装

npm config set electron_mirror=https://registry.npmmirror.com/-/binary/electron/

2、运行:npm run electron:serve

如下图:

3、打 包:npm run electron:build

打包报错

报错原因:

 其他插件存放位置

 

4、插件下载地址 

网络因素导致无法下载到的插件可以在下面地址进行手动下载

tips: 插件下载icon-default.png?t=N7T8https://mirrors.huaweicloud.com/electron-builder-binaries/

接下来就打包成功啦!!

如果打包出现以下跨域情况请细看下面的配置文件

5、打包后的配置文件:

background.js

"use strict";

import { app, protocol, Menu, BrowserWindow, ipcMain } from "electron";
import { createProtocol } from "vue-cli-plugin-electron-builder/lib";
import installExtension, { VUEJS_DEVTOOLS } from "electron-devtools-installer";
const isDevelopment = process.env.NODE_ENV !== "production";

// Scheme must be registered before the app is ready
protocol.registerSchemesAsPrivileged([
  {
    scheme: "app",
    privileges: {
      secure: true,
      standard: true,
    },
  },
]);

async function createWindow() {
  // 获取可执行文件位置
  const ex = process.execPath;
  // 创建浏览器窗口
  Menu.setApplicationMenu(null); //隐藏菜单栏
  const win = new BrowserWindow({
    width: 1900, //最大宽高 不设置则自适应
    height: 1600,
    fullscreen: false, // 非全屏
    show: false, // 初始化不显示窗口
    webPreferences: {
      nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION, // 是否集成Node.js
      contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION,  // 是否隔离渲染进程
      webSecurity: false, // 关闭web安全策略 配置跨域
      allowRunningInsecureContent: false, // 不允许加载不安全的内容 
    },
  });
  // win.maximize(); //窗口最大化
  win.show(); // 显示窗口
  // 打开控制台
  // win.webContents.openDevTools()
  // 根据环境变量加载URL
  if (process.env.WEBPACK_DEV_SERVER_URL) {
    await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL);
    if (!process.env.IS_TEST) win.webContents.openDevTools(); //调试工具
  } else {
    createProtocol("app"); // 使用自定义协议加载文件
    win.loadURL("app://./index.html"); 
    // win.loadURL('http://192.168.0.84:8086/index.html');
    // 窗口准备好之后,再显示
    win.once("ready-to-show", function() {
      win.show(); // 初始化后再显示
    });
  }
  // 开启开机自启动
  ipcMain.on("openAutoStart", () => {
    app.setLoginItemSettings({
      openAtLogin: true,
      path: ex,
      args: [],
    });
  });
  //检查更新
  // handleUpdate(win, "http://192.168.2.9:9700/")
}
// 监听Electron事件
app.on("window-all-closed", () => {
  if (process.platform !== "darwin") {
    app.quit();
  }
});

app.on("activate", () => {
  if (BrowserWindow.getAllWindows().length === 0) createWindow();
});

app.on("ready", async () => {
  if (isDevelopment && !process.env.IS_TEST) {
    try {
      await installExtension(VUEJS_DEVTOOLS);
    } catch (e) {
      console.error("Vue Devtools failed to install:", e.toString());
    }
  }
  createWindow();
});

if (isDevelopment) {
  if (process.platform === "win32") {
    process.on("message", (data) => {
      if (data === "graceful-exit") {
        app.quit();
      }
    });
  } else {
    process.on("SIGTERM", () => {
      app.quit();
    });
  }
}

vue.config.js

module.exports = {
    pluginOptions: {
        electronBuilder: {
            externals: [  // 外部依赖的模块列表
                'ws',
                "clipboard",
                "core-js",
                "electron-log" ,
                "qrcode",
                "soap",
                "view-design",
                "vue",
                "vue-router",
                "vuex",
                "x2js"
            ],
            nodeIntegration: true, // 允许在渲染进程中使用 Node.js 功能
            builderOptions: {
                nsis: {
                    allowToChangeInstallationDirectory: true, //允许选择安装目录
                    oneClick: false, // 非一键安装,需手动点击下一步
                },
                win: {
                    icon: './public/icon.png', // 设置应用图标
                    extraResources: "./static/*.html", // 额外资源
                    publish: [{
                        provider: 'generic', // 通用
                        url: 'http://192.168.0.84:8086/' // 跨域地址
                    }]
                },
                productName: 'xxx系统'  // 应用名称
            }
        },
    },
}

6、镜像

#最新 淘宝 NPM 镜像
npm config set registry https://registry.npmmirror.com

#查看当前使用镜像

npm config get registry

#electron镜像

npm config set electron_mirror=https://registry.npmmirror.com/-/binary/electron/

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

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

相关文章

“等保”??到底保什么?简单了解信息安全等级保护

若已部署了畅云管家的企业需要做“等保”, 我们可提供注册等保所需材料 若有需求请咨询所属服务商 等级保护(简称“等保”) 简单总结:等保就是信息安全等级保护,网络安全法要求网络运营者应当按照网络安全等级保护…

告别复杂编程,低代码平台如何简化列表页多模型数据配置

在现代企业管理和信息系统建设中,随着业务复杂度的不断提升,单一数据模型往往难以满足复杂的数据展示需求。特别是在构建企业级应用或管理平台时,经常需要在一个界面上综合展示来自多个数据模型的信息,以便用户能够更全面地理解业…

OCR智能合同比对工具——快速比对合同差异点

在现代商业活动中,合同是确保交易双方权益和责任的重要法律文件。随着商业活动的复杂性增加,合同版本更新和修订变得越来越频繁。法务、采购等合同经办部门在处理合同时,往往面临着以下挑战: 1.版本一致:随着合同的不…

操作系统面试真题总结(一)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 什么是用户态和内核态 用户态和内核态是操作系统的两种运行状态。…

Redis_AOF持久化

AOF持久化 在AOF持久化的过程中,会以日志的方式记录每个redis“写”命令,并且redis服务器重启时重新执行AOF日志文件中的命令,从而达到“恢复数据”的效果 AOF故障恢复 当redis因发生故障而重启时,redis服务器会按照如下步骤根据…

演绎法推理

cp规则:给前提集合,给结论,要求推导前提推导结论。把结论化成蕴含式,里面的蕴含前件为真拿下来做补充条件,再和前提集合里面那么多条件一起推,最后推出那个结论为真。

【吊打面试官系列-Redis面试题】Redis 的数据类型?

大家好,我是锋哥。今天分享关于 【Redis 的数据类型?】面试题,希望对大家有帮助; Redis 的数据类型? 答:Redis 支持五种数据类型:string(字符串),hash&#x…

常见的服务器容器和漏洞类型汇总

常见的服务器容器和漏洞有哪些?常见的服务器容器包括KubeSphere、Tomcat、Nginx、Apache等,它们在提供便捷的服务部署和灵活的网络功能的同时,也可能存在着一定的安全风险。这些容器的漏洞可能导致数据泄露、权限被非授权访问甚至系统被完全控…

深入京东API世界:商品详情返回值的秘密

京东API世界中的商品详情返回值是一个复杂而精细的数据体系,它承载着商品的全面信息,对于商家、用户以及开发者而言,都具有极高的价值。下面,我们将深入探索京东商品详情API返回值的秘密。 基本结构概述 京东商品详情API的返回值…

【工控】线扫相机小结 第二篇

背景 上一篇中《线扫相机小结》中介绍了一些基础知识和注意事项,这一篇是对上一篇的进一步补充。 会介绍线扫相机的一些调试技巧。 如何在线调试? 我们知道,线扫相机不能像面阵相机一样实时的呈现图像,只能一行行的扫描&#x…

谷歌的搜索语法

谷歌搜索常用语法 谷歌提供了多种搜索语法,帮助用户更精确地查找所需内容。以下是一些常用语法的介绍和示例: 1. 精确匹配:使用双引号 " " 在搜索内容时,如果需要精确匹配某个词组,可以将其放在双引号内。 …

BaseCTF 高校联合新生赛 Week1

Week1 Web [Week1] HTTP BaseCTF{4248fc3d-a280-4de0-b5e6-6ff0ecaa1fca} [Week1] 喵喵喵•ﻌ• [Week1] md5绕过欸 [Week1] A Dark Room [Week1] upload 什么过滤都没有,上传一句话木马即可 [Week1] Aura 酱的礼物 卡在SSRF那里, 我想用…

SpringCloud之二注册中心(Eureka)

一、Eureka概述 Eureka是Netflix公司开源的一个服务注册与发现的中间组件。 在微服务架构系统之中,我们经常提三个角色:注册中心 (Register)、服务提供者(Provider)、服务消费者(Consumer)。 1.注册中心:服务提供者可以将服务发布到注册中心…

亚马逊aws的弹性与可扩展性解析

欢迎来到雲闪世界。可以使用各种服务和工具在 AWS 上实现可扩展性和弹性。例如,AWS Application Auto Scaling 是一种可以自动调整容量以低成本实现出色应用程序性能的服务。这允许轻松设置跨多个服务的多个资源的应用程序扩展。让我们来谈谈弹性和可扩展性之间的区…

数据结构基础详解(C语言): 树与二叉树的基本类型与存储结构详解

文章目录 1.树2.二叉树2.1 二叉树的基本概念2.2 满二叉树2.3 完全二叉树2.4 二叉排序树2.5 平衡二叉树 3.二叉树的存储结构3.1 二叉树的顺序存储3.2 二叉树的链式存储 1.树 树的基本概念 结点的度:指该结点的分支个数,如结点A的度为2 树的度:…

DHU 二维数组 暗恋

思路及代码 蛮力算法 验证是否是正方形的方法是简单的 但是蛮力下来写的不优雅 第一版超时了&#xff0c;第二版改了一点点&#xff0c;把一个循环换成了加加减减 #include<iostream> using namespace std;int main(){ //input R,C int 1< <200 //input R*C矩阵…

ceph-rgw zipper的设计理念(1)

0.前言 RGW在ceph存储中的主要作用是提供S3和Swift的协议访问支持。Zipper工作主要是将RGW分为协议部分和后端部分。协议部分还是支持S3和Swift协议&#xff0c;包括身份认证、协议参数解析和op操作解析等等&#xff1b;后端部分主要是对接不同的存储&#xff0c;比如rados&am…

利用OpenCV根据图片识别环境的亮度

一、前言 在当代数字化转型的浪潮中&#xff0c;计算机视觉技术无疑占据了举足轻重的地位&#xff0c;其应用范围之广&#xff0c;影响力之深&#xff0c;已成为推动社会进步的关键力量之一。而OpenCV&#xff0c;作为计算机视觉领域的佼佼者&#xff0c;凭借其卓越的性能与广…

强推!必看!!由中国信通院发布的汇聚99个大模型优秀应用案例集!附219页PDF文件下载

2024 年是大模型深入赋能千行百业&#xff0c;融入实体经济&#xff0c;助力科技创新的一年。截至今年5月&#xff0c;我国国产大模型的数量已经超过 300个&#xff0c;预示着大模型在各行业场景的创新应用和深度拓展&#xff0c;对培育新质生产力、高水平赋能新型工业化、推动…

第100+23步 ChatGPT学习:概率校准 Sigmoid Calibration

基于Python 3.9版本演示 一、写在前面 最近看了一篇在Lancet子刊《eClinicalMedicine》上发表的机器学习分类的文章&#xff1a;《Development of a novel dementia risk prediction model in the general population: A large, longitudinal, population-based machine-learn…