公司的一个项目需求,需要技术上采用C/S的技术架构,因此我就开始了将vue项目打包为exe程序的旅途~~~
exe文件是C/S桌面应用程序,
web项目是B/S结构,服务器/客户端程序,它们是两个不同的东西
此文章针对于有一定基础的vue前端工作者。
打包初体验
- 第一步 将自己的vue项目进行打包
npm run build
可以看到打包后的dist文件
- 第二步 安装electron
npm install electron
安装成功之后,可以看到electron安装后的版本
此时表明安装成功
- 第三步 创建主程序的入口文件main.js和相关配置package.json文件,将以下两个文件放入dist文件夹中
main.js
const {app, BrowserWindow} =require('electron');//引入electron
let win;
let windowConfig = {
width:800,
height:600
};//窗口配置程序运行窗口的大小,可自行设置
function createWindow(){
win = new BrowserWindow(windowConfig);//创建一个窗口
win.loadURL(`file://${__dirname}/index.html`);//在窗口内要展示的内容index.html 就是打包生成的index.html
win.webContents.openDevTools(); //开启调试工具
win.on('close',() => {
//回收BrowserWindow对象
win = null;
});
win.on('resize',() => {
win.reload();
})
}
app.on('ready',createWindow);
app.on('window-all-closed',() => {
app.quit();
});
app.on('activate',() => {
if(win == null){
createWindow();
}
});
package.json
{
"name": "demo",
"productName": "项目名称", //这些名称都可以随意命名,不影响
"author": "作者",
"version": "1.0.4",//版本号
"main": "main.js",//主文件入口
"description": "项目描述",
"scripts": {
"pack": "electron-builder --dir",
"dist": "electron-builder",
"postinstall": "electron-builder install-app-deps"
},
"build": {
"electronVersion": "1.8.4",
"win": {
"requestedExecutionLevel": "highestAvailable",
"target": [
{
"target": "nsis",
"arch": [
"x64"
]
}
]
},
"appId": "demo",//程序id
"artifactName": "demo-${version}-${arch}.${ext}",
"nsis": {
"artifactName": "demo-${version}-${arch}.${ext}"
},
"extraResources": [
{
"from": "./static/xxxx/",//需要打包的静态资源
"to": "app-server",//静态资源存放路径
"filter": [
"**/*"//打包静态资源文件夹内的所有文件 如果没有静态资源要打包进去,extraResources 这段代码去掉
]
}
],
"publish": [
{
"provider": "generic",
"url": "http://xxxxx/download/"//自动更新的安装包地址,初步使用publish这段代码不需要
}
]
},
"dependencies": {
"core-js": "^2.4.1",
"electron-packager": "^12.1.0",//不打包成exe程序可以去掉
"electron-updater": "^2.22.1",//不打包成exe程序可以去掉
}
}
配置好之后,dist文件里面是这样的
- 第四步 此时可以直接运行了(要在dist目录下运行)
electron .
这时候你运行出来的窗口可能是个空白,会显示静态资源加载错误
这说明在第一步打包有问题,我们需要做完以下三个步骤再进行打包(因为使用electron之前需要打包之后的dist文件中index.html可以直接在浏览器中访问,如果index.html运行是空白的话,用electron运行出来的也会是空白)
正式打包
- (1)找到build文件下的webpack.prod.conf.js中的大概25行的output对象里面添加一行代码 publicPath:’./’
- (2)找到build文件下的utils.js,在 第47行左右 有一个if判断为 if (options.extract),在这里面增加一行代码 publicPath:’../../’
- (3)找到config/index.js第46行左右 修改assetsPublicPath 路径为 ‘./’
完成以上三步骤之后再对vue项目进行打包(注意:cd..可以进行路径的回退)
打包之后再次运行
可以看到出来页面了
此时项目里面所调用的接口什么的也是可以正常访问的,如果接口地址出现file:///D:xxx/xxx/这种文件路径,正确的应该是http://xxx或者https://xxx,是因为electron中设置了win.loadURL访问了本地index.html文件导致,就可以在main.js文件中进行修改
将mian.js的这一行代码
改为
复制出来就是
if (process.env.WEBPACK_DEV_SERVER_URL) {// dev环境
win.loadURL(process.env.WEBPACK_DEV_SERVER_URL)
} else {// 打包环境
// createProtocol('app')
win.loadURL(`file://${__dirname}/index.html`);
}
// win.loadURL(`file://${__dirname}/index.html`);//在窗口内要展示的内容index.html 就是打包生成的index.html
win.webContents.openDevTools(); //开启调试工具
此时你的接口就可以正常请求。
如果还是不行,可能是因为你在vue里面使用了反向代理解决跨域,打包为exe程序的接口访问是不能使用vue里面的反向代理,可以设置直接访问接口url,不然也会出现接口地址编程file:///D:xxx/xxx/这种情况!
- 最后一步就是打包为exe程序了
先安装electron-builder,直接在dist目录下安装
npm install electron-builder --save-dev
执行npm run dist进行打包,由于我们package.json中将打包命令electron-builder,定义为了dist,因此我们只需执行npm run dist即可打包
此时可能报错了,说需要将electron-updater版本设置为4.0.0
那么我们按照步骤设置版本
完成之后再次执行打包命令,可以看到,打包完毕
此时可以看到,在我们原本vue项目打包后的dist文件夹下,又出现一个dist
进去之后,就发现了这个exe程序
直接双击即可执行安装
还可以直接生成桌面快捷方式,这个项目名称,我没有设置,你可以在dist里面的package.json中进行设置
双击之后的打开结果,一切正常
vue项目打包为exe桌面应用程序到此就结束了,打包之后的exe程序文件大小差不多40M吧,以上内容仅供大家学习,有什么不足之处,欢迎大家指正~~~~~
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/149608.html