将Vue项目打包为Windows应用(.exe)
2021年1月9日更新:
新增:解决国内用户下载electron速度太慢的问题
调整:由于electron版本升级,删除原文中对electron版本限制在2.0的命令行语句
背景
朋友是做商品零售,每月都需要将销售数据汇总至年度销售表格中,在这个过程中存在很多重复性的工作,无奈中。在一次聊天中,我了解到他的需求,就用 Vue 做了一个页面,可以实现 Excel 转成 JSON 进行操作,最后再将 JSON 转成 Excel ,虽然后来了解到用 Python应该会更高效,待日后来研究!
不过咱好歹有个图形界面,用户体验好!(自我安慰一波~)
接下来问题便来了,朋友完全不懂编程,每次都准备开发环境也挺麻烦,便想着能不能做成可执行文件.exe,直接双击安装,生成快捷方式,直接就能用,人性化点赞!
1. Vue 项目打包为桌面应用
在网上看了下,常用的解决方案有 Electron 和 nw.js 等,广大群众都采用的 Electron ,鄙人就跟个风吧~
在学习的过程中,发现关于 Electron ,常见的有两种打包方法:
第一种:将自己的 vue 项目打包,放到官方的 demo 文件中,改变打包路径
第二种:在自己的 vue 的项目中引入插件,然后打包
经过一番尝试,我决定采用第一种,原因是: 特!别!简!单!
下面详细介绍下第一种方法:
第一步: 把electron的官方例子扒下来,下面简称A,留着待用:
git clone https://github.com/electron/electron-quick-start
第二步: 进入我们自己的项目(下面简称B), 修改公共路径为相对路径(很多同学都是这步出了问题,导致 npm run build 后出现白屏情况) :
- 如果你是 vue-cli3 构建的项目:
执行下列指令,打开vue-cli图形配置界面,选择配置,修改公共路径为 ./ , 保存即可:
vue ui
或者你可以点击上图中右上角的 打开 vue 配置, 或者在项目的根目录中创建 vue.config.js, 设置以下内容:
module.exports = {
lintOnSave: undefined,
publicPath: './',
outputDir: undefined,
assetsDir: undefined,
runtimeCompiler: undefined,
productionSourceMap: undefined,
parallel: undefined,
css: undefined
- 如果你是vue-cli2 或者 webpack 创建的项目:
进入config文件夹下的 index.js ,将其中的 assetsPublicPath 修改为相对路径 ./ ,保存即可:
第三步: 打包你的项目,我相信这步你已经轻车熟路了~,将打包出来的 dist 文件夹复制到之前下载的A文件夹中
npm run build
第四步: 进入刚才下载的A项目,删除项目根目录下的 index.html 文件。
第五步: 在A项目中找到入口文件 main.js ,修改打包的文件路径为我们的index.html:
// main.js 原始内容
mainWindow.loadFile('index.html')
// 修改后的内容
mainWindow.loadFile('./dist/index.html')
第六步: 在A项目中检查 package.json 的命令,正常情况下,运行下列指令即可进行打包效果预览:
// 国内网络下载electron可能很慢,建议设置
// npm config set registry https://registry.npm.taobao.org/
// npm config set ELECTRON_MIRROR http://npm.taobao.org/mirrors/electron/