当前位置: 首页 > news >正文

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

目录(本项目基于vue2)

1、打包成功后的样子​

 2、开发环境

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

4、插件下载地址 

5、打包后的配置文件:

6、镜像


1、打包成功后的样子

 2、开发环境

node:14.18.1

electron:12.0.0

tips: 用13.6.9版本也可以,下面的文件中13.6.9的压缩包是通过electron镜像环境安装的

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

1、添加electron-builder

在项目目录下运行命令:vue add electron-builder 

 我这边输入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.jscontextIsolation: !process.env.ELECTRON_NODE_INTEGRATION,  // 是否隔离渲染进程webSecurity: false, // 关闭web安全策略 配置跨域allowRunningInsecureContent: false, // 不允许加载不安全的内容 },});// win.maximize(); //窗口最大化win.show(); // 显示窗口// 打开控制台// win.webContents.openDevTools()// 根据环境变量加载URLif (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/

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Netty 知识目录
  • vue2.0中axios请求配置
  • 数据治理学习笔记(二):在数仓建模过程中,数据治理要怎么做
  • Pinia 使用(一分钟了解)
  • 刷题记录-HOT 100(二)
  • 【C++11及其特性】智能指针——unique_ptr
  • 用 BigQuery ML 和 Google Sheets 数据预测电商网站访客趋势
  • Linux驱动开发MODULE_DEVICE_TABLE的作用
  • 【Spring Boot-IDEA创建spring boot项目方法】
  • EXCEL文件如何批量加密,有什么方法
  • 零基础学习Redis(7) -- hash类型命令使用
  • TCP的流量控制深入理解
  • 92. UE5 GAS RPG 使用C++创建GE实现灼烧的负面效果
  • 【操作系统】同步互斥与Golang互斥锁实现
  • 【TomCat】安装部署
  • [译]Python中的类属性与实例属性的区别
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 2017-09-12 前端日报
  • 4. 路由到控制器 - Laravel从零开始教程
  • Akka系列(七):Actor持久化之Akka persistence
  • C++入门教程(10):for 语句
  • GitUp, 你不可错过的秀外慧中的git工具
  • java中具有继承关系的类及其对象初始化顺序
  • linux学习笔记
  • MySQL数据库运维之数据恢复
  • Python语法速览与机器学习开发环境搭建
  • SpringBoot几种定时任务的实现方式
  • Spring框架之我见(三)——IOC、AOP
  • sublime配置文件
  • Vue.js 移动端适配之 vw 解决方案
  • 阿里研究院入选中国企业智库系统影响力榜
  • 入手阿里云新服务器的部署NODE
  • 我看到的前端
  • 无服务器化是企业 IT 架构的未来吗?
  • 线性表及其算法(java实现)
  • 06-01 点餐小程序前台界面搭建
  • 第二十章:异步和文件I/O.(二十三)
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​学习一下,什么是预包装食品?​
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #NOIP 2014# day.2 T2 寻找道路
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (9)目标检测_SSD的原理
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (杂交版)植物大战僵尸
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .Net Core中Quartz的使用方法
  • .NET Framework杂记
  • .Net Memory Profiler的使用举例
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .net生成的类,跨工程调用显示注释