【教程】将Vue项目打包为exe项目的教程-我的第一个原生Vue项目

文章目录

    • 前言
    • 项目介绍
    • 正文:Vue打包exe过程及注意事项
        • 1. (重要)进入我们自己的项目,修改公共路径为相对路径
        • 2. (重要)关于VueRouter的必要修改
        • 3. 前端打包
        • 4. 拉取`electron-quick-start`项目
        • 5. 修改配置文件
        • 6. 启动项目
        • 7. 安装打包依赖
        • 8. 修改配置文件
        • 9. 打包!
    • 致谢

前言

最近给朋友写了个客户Web端的点餐系统,觉得如果是Web端的话有诸多不便,因此将该项目打包成了Windows可执行文件,在这里记录一下。

打包后的项目运行如下(由于担心Gif大小有限,一些细节无法展示,大家将就看下吧):

Gif

项目介绍

项目背景:甲方(我的朋友)的爸爸开了一家店,但是综合考虑觉得美团等点单系统较贵,所以想开发一个点单系统。叔叔我也认识,正好想练手一下CSS,所以无偿开发啦~

项目需求:甲方只给了一句话“要一个点单系统”,其它的UI等全是自己便开发边修改的,功能也是一边开发一边追加。

UI:模拟了一下“新拟态”风格,觉得这种风格很好看!

技术栈:Vue2、JS、CSS3、Spring Boot、MyBat、MySQL等

这个项目十分简单,只有一个页面(后面还会继续追加功能),但是却是我的第一个原生Vue项目(没有用任何UI、纯CSS),所以还是满满的成就感。

因为是给朋友写的,且目前还不是很成熟,暂时不准备开放源码,等项目继续完善一段时间后会考虑进行开放(大家点点关注啦~要是粉丝量多我直接开!)




正文:Vue打包exe过程及注意事项


1. (重要)进入我们自己的项目,修改公共路径为相对路径

如果是Vue3项目的话,可以在项目目录下执行vue ui,在浏览器进入控制面板后,进行如下修改:

在这里插入图片描述

如果是Vue2或webpack项目,可以在项目根目录下创建vue.config.js文件,并在文件内添加如下内容:

module.exports = {
    lintOnSave: undefined,
    // 下面一行一定要有
    publicPath: './',
    outputDir: undefined,
    assetsDir: undefined,
    runtimeCompiler: undefined,
    productionSourceMap: undefined,
    parallel: undefined,
    css: undefined
}

这一部分的修改并不是直接插入进入就可以,如果你本身使用了vue.config.js文件做代理之类的,那么你可以直接将publicPath: './'粘贴到module.exports={}中去,就比如我的文档内容如下:

let proxy={}

proxy['/']={
    // WebSocket
    ws:false,
    // Target
    target:'http://127.0.0.1:8080',
    // Header: Host -> Target
    changeOrigin:true,
    // 不重写请求地址
    pathRewrite: {
        '^/': '/'
    }
}

module.exports={
    devServer:{
        host:'localhost',
        port:3000,
        proxy: proxy
    },
    lintOnSave: false,
    publicPath:'./'
}




2. (重要)关于VueRouter的必要修改

如果你的项目使用了VueRouter,那么切记:VueRouter一定不能是History模式

如果你的VueRouter采用的是History模式或不确定,可以打开/router/index.js文件,检查是否有以下原代码,如果有请进行修改:

/* 原代码 */
const router = new VueRouter({
   mode: 'history',
   base: process.env.BASE_URL,
   routes
 })


/* 修改后 */
const router =  new VueRouter({
  mode: 'hash',
  routes: routes
})

这一步骤是为了将Router修改为hash模式,如果不修改的话打开APP后将会只看一个空白的页面,那是public下的index.html文件中的body




3. 前端打包

在项目根目录下,执行以下命令进行打包:

npm run build

打包结束后,项目根目录下会出现一个dist文件夹,这就是打包完成后的内容,留着一会儿要用。




4. 拉取electron-quick-start项目

在任意目录下,执行以下命令拉取electron-quick-start项目示例代码:

git clone https://github.com/electron/electron-quick-start 

拉取成功后,我们进入electron-quick-start文件夹,删除里面的index.html文件,并将我们刚才打包得到的dist文件夹拷贝到当前目录下。




5. 修改配置文件

我们在electron-quick-start文件夹下,打开main.js文件,并做如下修改:

/* 修改前 */
mainWindow.loadFile('index.html')

/* 修改后 */
mainWindow.loadFile('./dist/index.html')




6. 启动项目

在electron-quick-start文件夹下,执行以下两条命令:

// 国内网络下载electron可能很慢,建议设置
// npm config set registry https://registry.npm.taobao.org/
// npm config set ELECTRON_MIRROR http://npm.taobao.org/mirrors/electron/


npm install
npm run start

两条命令都执行结束后,就可以看到一个窗口,这个是打包预览,如果没有问题的话就可以继续向下执行了,如果有问题请仔细检查第一步与第二步。




7. 安装打包依赖

如果步骤6没有问题,就可以(在electron-quick-start文件夹下)执行以下命令安装打包所需的依赖了:

npm install electron-packager --save-dev 




8. 修改配置文件

在electron-quick-start文件夹下,打开package.json文件,如下添加一行内容:

"scripts": { 
"start": "electron .", 
"packager": "electron-packager ./ App --platform=win32 --arch=x64 --overwrite"//此处为添加的内容
} 

如果你想修改最后打包出来的exe文件图标,类似于favicon,或者EXE的名字,可以设置 packager 的指令内容为,icon的路径自己调整下哦,更多配置内容请查阅文档:

"packager": "electron-packager ./ YOUR_APP_NAME --platform=win32 --arch=x64 --icon=./dist/favicon.ico --overwrite" 




9. 打包!

历经重重,终于来到了打包步骤,在electron-quick-start文件夹下,执行以下命令:

npm run packager 

命令执行结束后,就会多出来一个文件夹,进入文件夹,双击xxx.exe就可以启动你的项目啦~




致谢


非常感谢知乎网友Chuion的文章,本文是在参考其文章的基础上增加了一些自己遇到的问题以及解决方案,再次感谢!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Excel】使用VBA宏简单自定义Excel软件界面

改行做经济师学习Excel,偶有心得,摘录于此,备忘。 言简意赅,仅供自用。 1 实现效果 在Excel的左上角可添加按钮,该按钮的功能可由我们自己通过编写代码定义,能实现特定功能,并且在所有打开的…

Java算法之时间复杂度和空间复杂度的概念和计算

1. 算法效率 如何去衡量一个算法的好坏? 通常我们从时间效率和空间效率两个方面去分析算法的好坏。时间效率即时间复杂度,空间效率被称为空间复杂度。时间复杂度主要是衡量一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间…

业务与数据的终极对决:如何让大数据成为企业的超能力?

在数字化转型的浪潮中,企业如同在茫茫数据海洋中航行的船只,而数据资产管理就是指引航向的罗盘。但是,当业务需求与数据脱节、数据孤岛林立、业务流程与数据流程不同步、以及业务增长带来的数据管理挑战成为阻碍,我们该如何突破重…

transformer上手(7)—— 快速分词器

1 快速分词器 Hugging Face 共提供了两种分分词器: 慢速分词器:Transformers 库自带,使用 Python 编写;快速分词器:Tokenizers 库提供,使用 Rust 编写。 特别地,快速分词器除了能进行编码和解…

单链表链表专题

1 链表的概念 概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表的结构跟⽕⻋⻋厢相似,淡季时⻋次的⻋厢会相应减少,旺季时⻋次的⻋厢会额外增加⼏节。只 需要…

Redis实现延迟任务的几种方案

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 目录 1.前言 2.Redis如何实现延迟任务? 3.代码实现 3.1. 过期键通知事…

技术速递|为 .NET iOS 和 .NET MAUI 应用程序添加 Apple 隐私清单支持

作者:Gerald Versluis 排版:Alan Wang Apple 正在推出一项隐私政策,将隐私清单文件包含在针对 App Store 上的 iOS、iPadOS 和 tvOS 平台的新应用程序和更新应用程序中。请注意,至少目前 macOS 应用程序被排除在外。 隐私清单文件…

这部经典之作,时隔六年迎来重磅升级!

🍅 作者简介:哪吒,CSDN2021博客之星亚军🏆、新星计划导师✌、博客专家💪 🍅 哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师 🍅 技术交流:定期更新…

Niobe WiFi IoT开发板OpenHarmony内核编程开发——Semaphore

本示例将演示如何在Niobe WiFi IoT开发板上使用cmsis 2.0 接口进行信号量开发 Semaphore API分析 osThreadNew() osThreadId_t osThreadNew(osThreadFunc_t func, void *argument,const osThreadAttr_t *attr )描述: 函数osThreadNew通过将线程添加到活动线程列表…

TG-12F使用SDK对接阿里生活物联网平台

文章目录 前言一、注意二、准备1. 安装Ubuntu(版本20.04 X64)程序运行时库。按顺序逐条执行命令:2. 安装Ubuntu(版本20.04 X64)依赖软件包。按照顺序逐条执行命令:3. 安装Python依赖包。按照顺序逐条执行命…

vscode 打代码光标特效

vscode 打代码光标特效 在设置里面找到settings 进入之后在代码最下方加入此代码 "explorer.confirmDelete": false,"powermode.enabled": true, //启动"powermode.presets": "fireworks", // 火花效果// particles、 simple-rift、e…

FFmpeg: 自实现ijkplayer播放器--04消息队列设计

文章目录 播放器状态转换图播放器状态对应的消息: 消息对象消息队列消息队列api插入消息获取消息初始化消息插入消息加锁初始化消息设置消息参数消息队列初始化清空消息销毁消息启动消息队列终止消息队列删除消息 消息队列,用于发送,设置播放…

eclipse导入maven项目与配置使用本地仓库

前言 本人润国外了,发现不能用收费软件IDEA了,需要使用eclipse,这个免费。 但是早忘了怎么用了,在此总结下。 一、eclipse导入本地项目 1.选这个:open projects from file system… 2.找到项目文件夹,…

如何编写易于访问的技术文档 - 最佳实践与示例

当你为项目或工具编写技术文档时,你会希望它易于访问。这意味着它将为全球网络上的多样化受众提供服务并可用。 网络无障碍旨在使任何人都能访问网络内容。设计师、开发人员和撰写人员有共同的无障碍最佳实践。本文将涵盖一些创建技术内容的最佳实践。 &#xff0…

KIVY 学习1

环境 python 3.6 3.7 对应Kivy 1.11.1版本各依赖 python -m pip install docutils pygments pypiwin32 kivy_deps.sdl20.1.22 kivy_deps.glew0.1.12 这是一个用于安装Python包的命令,它会安装一些特定的包。具体来说,这个命令会安装以下包: …

Python的国际化和本地化【第162篇—国际化和本地化】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 随着全球化的发展,多语言支持在软件开发中变得越来越重要。Python作为一种流行的…

Springboot+Vue项目-基于Java+Mysql的网上订餐系统(附源码+LW+演示录像)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

游戏实践:扫雷

一.游戏介绍 虽然很多人玩过这个游戏,但还是介绍一下。在下面的格子里,埋的有10颗雷,我们通过鼠标点击的方式,点出你认为不是雷的地方,等到把所有没有雷的格子点完之后,及视为游戏胜利。 上面的数字的意思…

Linux第90步_异步通知实验

“异步通知”的核心就是信号&#xff0c;由“驱动设备”主动报告给“应用程序”的。 1、添加“EXTI3.c” #include "EXTI3.h" #include <linux/gpio.h> //使能gpio_request(),gpio_free(),gpio_direction_input(), //使能gpio_direction_output(),gpio_get_v…

数据资产管理制度探索——浙江篇

在行政事业单位数据资产管理领域&#xff0c;浙江省以创新性思维与高质量发展的战略眼光&#xff0c;积极探索并构建了具有前瞻性和实效性的数据资产管理制度。作为财政部数据资产管理试点省份&#xff0c;浙江省财政厅与省标准化研究院强强联合&#xff0c;充分运用数据溯源、…