Electron 桌面应用打包(npm run build)简述(windows + mac)

最近一段时间在用electron+vue做内部项目的一键构建发布系统的桌面应用,现就其中打包流程写个备注,以示记录。

Windows环境打包:
1.首先贴一下package.json。

{
"name": "******",//隐藏项目名
"version": "**.**.**",//隐藏版本号
"author": "*** <***>",//隐藏作者信息
"description": "***",//隐藏应用描述
"license": "MIT",
"main": "./dist/electron/main.js",
"scripts": {
"build": "node .electron-vue/build.js && electron-builder",
"build:dir": "node .electron-vue/build.js && electron-builder --dir",
"build:clean": "cross-env BUILD_TARGET=clean node .electron-vue/build.js",
"build:web": "cross-env BUILD_TARGET=web node .electron-vue/build.js",
"dev": "node .electron-vue/dev-runner.js",
"pack": "npm run pack:main && npm run pack:renderer",
"pack:main": "cross-env NODE_ENV=production webpack --progress --colors --config .electron-vue/webpack.main.config.js",
"pack:renderer": "cross-env NODE_ENV=production webpack --progress --colors --config .electron-vue/webpack.renderer.config.js",
"postinstall": ""
},
"build": {
"productName": "***",//隐藏包名
"appId": "org.***.electron-vue",//隐藏appid
"directories": {
"output": "build"
},
"publish": [
{
"provider": "generic",
"url": "http://**.**.**.**:3001/download/"//隐藏自动更新存包服务器IP
}
],
"files": [
"dist/electron/**/*"
],
"dmg": {
"contents": [
{
"x": 410,
"y": 150,
"type": "link",
"path": "/Applications"
},
{
"x": 130,
"y": 150,
"type": "file"
}
]
},
"mac": {
"icon": "build/icons/icon.icns",
"artifactName": "${productName}_setup_${version}.${ext}"
},
"win": {
"icon": "build/icons/icon.ico",
"artifactName": "${productName}_setup_${version}.${ext}"
},
"linux": {
"icon": "build/icons",
"artifactName": "${productName}_setup_${version}.${ext}"
}
},
"dependencies": {
"electron-updater": "^2.18.2",
"jenkins-api": "^0.3.1",
"socket.io": "^2.0.4",
"socket.io-client": "^2.0.4",
"vue": "^2.3.3",
"vue-electron": "^1.0.6",
"vue-router": "^2.5.3",
"xml2js": "^0.4.19"
},
"devDependencies": {
"babel-core": "^6.25.0",
"babel-loader": "^7.1.1",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-env": "^1.6.0",
"babel-preset-stage-0": "^6.24.1",
"babel-register": "^6.24.1",
"babili-webpack-plugin": "^0.1.2",
"cfonts": "^1.1.3",
"chalk": "^2.1.0",
"copy-webpack-plugin": "^4.0.1",
"cross-env": "^5.0.5",
"css-loader": "^0.28.4",
"del": "^3.0.0",
"devtron": "^1.4.0",
"electron": "^1.7.5",
"electron-builder": "^19.19.1",
"electron-debug": "^1.4.0",
"electron-devtools-installer": "^2.2.0",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^0.11.2",
"html-webpack-plugin": "^2.30.1",
"less": "^3.0.0-alpha.3",
"less-loader": "^4.0.5",
"multispinner": "^0.2.1",
"node-loader": "^0.6.0",
"style-loader": "^0.18.2",
"url-loader": "^0.5.9",
"vue-html-loader": "^1.2.4",
"vue-loader": "^13.0.5",
"vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.4.2",
"webpack": "^3.5.2",
"webpack-dev-server": "^2.7.1",
"webpack-hot-middleware": "^2.18.2"
}
}

2.项目打包

一件构建系统打包命令,根目录执行npm run build;
3.打包依赖安装

electron打包,执行npm run build命令,速度很慢,无论翻墙与否,均无法顺利下载打包相关依赖(electron-v1.7.9-win32-x64electron-builder-19.19.1winCodeSign-1.9.0 nsis-3.0.1.13 nsis-resources-3.3.0),执行打包操作。
0001.png
0002.png
执行npm run build之前先设置淘宝镜像

set ELECTRON_MIRROR=https://npm.taobao.org/mirrors/electron/

electron-v1.7.9-win32-x64: 首先卸载其他版本,然后指定安装1.7.9版本到开发依赖中;

npm uninstall electron && npm install electron@”1.7.9” –save-dev;

electron-builder-19.19.1: 解决方法同electron-v1.7.9-win32-x64;

winCodeSign-1.9.0:Warning: Cannot download winCodeSign, attempt #1: Error: Request timed out,多次下载均无法完成,参照electron-builder项目中的issues地址:https://github.com/electron-u...;首先下载https://github.com/electron-u...;然后解压到相应的缓存目录中;

nsis-3.0.1.13:翻墙后可以下载成功;

nsis-resources-3.3.0:翻墙后下载两次可以成功。
Cache目录最终文件:
0003.png

4.打包应用

解决以上问题之后,打包即可正常完成,打包后.exe(windows安装包)、.yml(windows自动更新配置)文件存放于./build文件夹中。

注意:打包中出现个奇怪的问题,同样的package.json,我这边打包正常,在我同事电脑上打包报错,或者是打包后安装文件报错(相关依赖找不到)。最后发现问题出现在npm依赖安装上,我是使用的yarn安装的node_modules,我同事是用npm install安装的node_modules,所以如果打包之后出现相关依赖找不到的话,不妨把node_modules删掉重新使用yarn安装试试。
特别注意:目前npm5存在安装新库时会删除其他库的问题,导致项目无法正常运行。请尽量使用yarn代替npm操作。

MAC环境打包:
1.依赖安装
mac下依赖安装要比windows环境快的多,打包依赖一般都是mac环境特有的platform=darwin。安装比较顺利,也就不啰嗦了。
2.代码签名
mac打包和windows打包最大的不同就是代码签名,mac上进行代码签名请移步这篇文章Electron 打包Mac安装包代码签名问题解决方案

注意:mac上不签名也可以打包成功,但是涉及到自动更新等需要身份认证的功能则不能用,也不能发布到mac app store中。所以说经过代码签名的MAC包才是完整的包。

未经代码签名的MAC打包过程:

clipboard.png

经过代码签名的MAC打包过程:

clipboard.png

3.打包应用。
mac打包后会生成包括.dmg和latest-mac.yml的安装文件。

clipboard.png

如果这篇文章对你的工作或者学习有帮助的话,请收藏或点个赞。如果对其中有什么不明白的或者报错,可以留言或者加QQ群140455228交流。

注意:请支持原创,本文谢绝转载,确有需要可链接到本文。本文链接地址:https://segmentfault.com/a/11...

<think>首先,用户的问题是关于Spring和Vue整合项目部署后登录时出现"Failed to load resource: 404"错误。我需要基于系统级指令和用户可见层的要求来构建回答。 系统级指令: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 引用的段落末尾自然地添加引用标识,如[^1]。 用户可见层: - 回答结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠。 参考的引用内容: - [^1]:前端资源加载404错误,可能路径问题。 - [^2]:网络超时错误,建议清缓存、检查网络。 - [^3]:Electron打包问题,publicPath设置。 - [^4]:端口号不一致导致连接拒绝。 用户的问题具体是:在部署Spring和Vue整合项目后,登录时出现"Failed to load resource: 404"错误。我需要诊断这个错误。 常见原因: 1. **资源路径错误**:前端资源(如JS、CSS文件)在部署后路径不正确。 2. **后端API路径错误**:登录请求的API路径可能不正确。 3. **端口不一致**:前端和后端运行在不同端口,导致跨域或路径问题。 4. **构建配置问题**:Vue构建时的publicPath设置错误。 5. **部署方式问题**:静态资源没有正确放置或服务器配置错误。 基于引用: - [^1]提到资源加载404,可能是路径问题。 - [^4]提到端口不一致导致连接拒绝。 - [^3]提到publicPath设置影响资源加载。 回答结构: 1. **分析问题**:解释错误原因。 2. **逐步解决**:提供解决方案步骤。 3. **生成相关问题**:在末尾添加相关问题。 确保使用中文。 生成相关问题: - 基于主题,生成2-3个相关问题。 回答大纲: 1. **引言**:简述问题。 2. **可能原因**: - 资源路径错误。 - API路径错误。 - 端口不一致。 - publicPath设置问题。 3. **解决方案步骤**: - 检查静态资源路径。 - 确认API路径。 - 检查端口配置。 - 调整Vue的publicPath。 - 部署配置建议。 4. **结尾**:总结。 5. **相关问题**:生成相关问题。 添加引用标识:在引用参考内容时添加,如[^1]、[^2]等。 数学表达式:由于主题是Spring和Vue,可能不需要数学表达式,但如果有数字或路径,可以视为行内变量,如$8080$端口。但保持自然。 最终回答: - 使用中文。 - 结构清晰。</think>### Spring Vue项目部署后登录时出现"Failed to load resource: 404"错误的解决方案 在Spring Boot和Vue整合项目部署后,登录时出现`Failed to load resource: 404`错误,通常是由于资源加载路径或API请求路径配置不当导致的。这个错误表示浏览器无法找到前端资源(如JS、CSS文件)或后端API接口,尤其是在登录过程中涉及身份验证请求时。以下我将基于常见原因,逐步提供解决方案。问题可能源于静态资源部署路径错误、API端口不一致、Vue构建配置问题等[^1][^4]。请按照步骤检查和调整您的项目配置。 #### 步骤1: 检查静态资源路径是否正确 Spring Boot默认将静态资源放在`src/main/resources/static`目录下。部署后,如果Vue构建的静态文件(如`index.html`、JS、CSS)未正确放置或路径不匹配,就会引发404错误。 - **操作步骤**: 1. 确保在Vue项目中运行构建命令:`npm run build`,生成`dist`文件夹。 2. 将`dist`文件夹中的内容复制到Spring Boot项目的`src/main/resources/static`目录下(如果使用JAR部署)。或者,如果使用WAR部署到Tomcat等服务器,将`dist`内容放在Web服务器的静态资源根目录(如Tomcat的`webapps/ROOT`)。 3. 检查Spring Boot的`application.properties`文件,确保静态资源路径未覆盖: ```properties spring.mvc.static-path-pattern=/** spring.web.resources.static-locations=classpath:/static/ ``` 4. 部署后,访问前端页面(如`http://localhost:8080`),查看浏览器开发者工具(F12)的Network标签,确认资源加载路径是否正确。如果路径错误,调整Vue的`publicPath`设置(见步骤3)。 #### 步骤2: 确认API请求路径和端口一致性 登录功能通常涉及向后端发送API请求(如`/api/login`)。如果前端请求的API端口或路径与后端不匹配,会导致404错误[^4]。 - **操作步骤**: 1. 检查前端代码(通常在Vue的`src/api`或`src/utils`目录中的请求文件),确认API基础URL。例如,在`axios`请求中: ```javascript // 在src/utils/request.js中 const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // 确保这里指向正确的后端地址 timeout: 5000 }); ``` 2. 在Vue项目的`.env.production`文件中设置生产环境变量: ```env VUE_APP_BASE_API = 'http://your-server-domain:8080/api' # 端口必须与后端一致 ``` 3. 检查Spring Boot的`application.properties`文件,确认后端端口: ```properties server.port=8080 # 确保此端口与前端请求端口一致 ``` 4. 如果部署在同一个域名下但不同端口(如前端80端口,后端8080端口),需配置Spring Boot处理跨域(CORS): ```java // 在Spring Boot配置类中添加 @Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") // 允许所有来源,生产环境可指定域名 .allowedMethods("GET", "POST"); } } ``` 5. 测试登录请求:使用Postman发送相同API请求,确认后端是否正常响应(状态码200)。如果后端返回404,检查Spring Controller的路径映射是否匹配。 #### 步骤3: 调整Vue的publicPath配置 Vue构建时的`publicPath`设置会影响资源加载路径。如果设置为相对路径(如`./`),在部署到子路径或Spring Boot中时可能引发404错误[^3]。 - **操作步骤**: 1. 打开Vue项目的`vue.config.js`文件,修改`publicPath`: ```javascript module.exports = { publicPath: process.env.NODE_ENV === 'production' ? '/' : '/', // 改为绝对路径'/' // 其他配置... }; ``` 2. 重新构建Vue项目:`npm run build`,并重新部署到Spring Boot的`static`目录。 3. 如果项目部署在子路径下(如`http://example.com/my-app`),设置`publicPath`为`/my-app/`。 #### 步骤4: 检查网络和缓存问题 有时,浏览器缓存或网络问题会误报404错误[^2]。 - **操作步骤**: 1. 清空浏览器缓存:Chrome中按Ctrl+Shift+R强制刷新。 2. 检查网络连接:确保服务器可访问,无防火墙阻挡。 3. 在服务器上运行`curl -I http://localhost:8080/static/js/app.js`(替换为您的资源路径),确认资源是否可访问。 #### 步骤5: 部署验证 完成以上调整后,重新部署项目: 1. 构建Vue:`npm run build`。 2. 复制`dist`内容到Spring Boot的`static`目录。 3. 启动Spring Boot:`mvn spring-boot:run`或打包为JAR运行。 4. 访问登录页面,观察浏览器控制台错误是否消失。如果仍有问题,查看Spring Boot日志(如`tail -f logs/application.log`)排查后端错误。 ### 总结 此错误通常由前端资源路径错误或API端口不一致引起。通过逐步检查静态资源部署、API路径、Vue配置和端口设置,90%以上的问题可以解决。如果问题持续,提供更多错误日志(如浏览器Network截图或Spring Boot日志)以便进一步分析[^1][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值