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

uniApp H5项目从打包到上线:一站式解决跨域与Nginx部署

1. uniApp H5项目打包全流程解析第一次用uniApp打包H5项目时我对着空白页面和404错误整整折腾了两天。后来才发现问题出在基础路径配置这个看似简单的环节上。uniApp打包H5和传统Vue项目有些不同这里我把踩过的坑都总结成可复用的经验。打包前需要重点关注manifest.json中的H5配置模块。点击HBuilderX编辑器左侧的manifest.json文件切换到源码视图你会看到类似这样的结构h5: { router: { base: ./ }, publicPath: , template: public/index.html }这里router.base就是项目运行的根路径相当于Vue CLI中的publicPath。我建议在项目初期就确定好这个值通常有三种常见配置方案根目录部署比如直接放在nginx的html目录下配置为./子目录部署比如/usr/local/nginx/html/project_name/配置为/project_name/CDN部署需要配置完整的URL路径实际部署时最容易出错的是路径不一致问题。我遇到过最典型的情况是本地开发正常部署后静态资源加载404。这时候需要检查三个地方是否统一manifest.json中的router.base配置服务器上存放静态文件的目录名浏览器访问的URL路径打包操作本身很简单在HBuilderX顶部菜单选择发行→网站-H5手机版。但在网站域名栏要特别注意这里填的是生产环境访问地址比如https://yourdomain.com。如果填错会导致资源路径错误这个配置会直接影响打包生成的index.html中资源引用路径。2. 跨域问题的两种解决方案本地开发时最头疼的就是跨域问题。第一次对接后端API时我对着浏览器的CORS错误提示束手无策直到发现uniApp自带的代理配置方案。在manifest.json中添加devServer配置可以完美解决开发环境跨域h5: { devServer: { proxy: { /api: { target: http://your-api-server.com, changeOrigin: true, pathRewrite: {^/api: } } } } }这个配置的意思是把所有以/api开头的请求转发到target指定的服务器并去掉/api前缀。实际项目请求时这样写uni.request({ url: /api/user/login, method: POST, success: (res) { console.log(res.data) } })但要注意这仅适用于开发环境很多新手会误以为这样配置后生产环境也能用其实生产环境必须通过Nginx解决跨域。我曾犯过一个低级错误在测试环境正常后直接部署结果生产环境所有接口都报404就是因为没配置Nginx反向代理。3. Nginx生产环境配置详解第一次登录服务器配置Nginx时面对密密麻麻的配置项简直头皮发麻。后来我发现只需要关注几个关键配置就能让H5项目跑起来。找到Nginx配置文件通常在/etc/nginx/nginx.conf或/usr/local/nginx/conf/nginx.conf在server块中添加以下配置server { listen 80; server_name yourdomain.com; location / { root /usr/local/nginx/html/your-project; index index.html; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://api-server.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }这个配置做了三件重要的事将域名根目录指向你的H5项目文件夹配置history路由模式支持try_files指令设置/api前缀的接口代理到后端服务配置完成后执行nginx -s reload使配置生效。有个常见陷阱是文件权限问题——记得用chmod -R 755 /usr/local/nginx/html/your-project给项目目录赋权否则可能出现403 Forbidden错误。4. HTTPS安全部署最佳实践去年我接手的一个项目因为没配置HTTPS导致用户数据被劫持这个教训让我深刻认识到安全部署的重要性。用Certbot申请Lets Encrypt免费证书其实很简单sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d yourdomain.com然后在Nginx配置中强制HTTPS跳转server { listen 80; server_name yourdomain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name yourdomain.com; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # 其他配置... }配置HTTPS后记得在manifest.json中把请求协议都改为https否则会出现混合内容警告。有个容易忽略的细节是WebSocket连接也需要走wss协议我在实时聊天功能上就栽过跟头。5. 性能优化实战技巧项目上线后用户反馈页面加载慢通过Chrome DevTools分析发现主要瓶颈在静态资源加载。经过几轮优化总结出这些有效方案开启Nginx gzip压缩gzip on; gzip_types text/plain text/css application/json application/javascript text/xml;配置静态资源缓存location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; add_header Cache-Control public, no-transform; }在uniApp打包时开启代码压缩h5: { optimization: { treeShaking: true } }使用uni-app的subpackages分包加载功能subPackages: [ { root: pages/sub1, pages: [index, detail] } ]实测下来这些优化能让首屏加载时间减少60%以上。有个反直觉的发现过长的缓存时间反而会导致更新困难后来我们采用文件名hash策略解决了这个问题。6. 常见问题排查指南凌晨两点被紧急电话叫醒处理线上故障的经历让我养成了写问题排查手册的习惯。以下是几个高频问题的解决方案问题一页面刷新后404原因Nginx未配置history路由回退 解决确保有try_files配置location / { try_files $uri $uri/ /index.html; }问题二静态资源路径错误现象控制台报错找不到js/css文件 解决检查三步一致性manifest.json中的publicPath服务器实际文件路径Nginx配置的root路径问题三接口请求跨域现象生产环境接口报CORS错误 解决Nginx添加CORS头location /api { add_header Access-Control-Allow-Origin $http_origin; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; add_header Access-Control-Allow-Headers Content-Type; }问题四iOS白屏现象iOS Safari打开空白但Android正常 解决检查babel配置确保ES6语法正确转译并确认未使用iOS不支持的API每次部署新版本前我都会用这个检查清单走一遍流程线上事故率直接降了90%。特别提醒修改Nginx配置后一定要用nginx -t测试语法正确性有次我因为少了个分号导致整个服务不可用。

相关文章:

uniApp H5项目从打包到上线:一站式解决跨域与Nginx部署

1. uniApp H5项目打包全流程解析 第一次用uniApp打包H5项目时,我对着空白页面和404错误整整折腾了两天。后来才发现,问题出在基础路径配置这个看似简单的环节上。uniApp打包H5和传统Vue项目有些不同,这里我把踩过的坑都总结成可复用的经验。 …...

iOS开发效率提升:Xcode光标规则与编辑技巧全解析

1. 项目概述:一个iOS开发者的“光标规则”宝库 如果你是一名iOS开发者,或者对iOS应用开发感兴趣,那么你一定经历过这样的时刻:在Xcode里写代码,光标在屏幕上闪烁,你希望它能更“聪明”一点——比如&#xf…...

保姆级避坑指南:在Ubuntu 18.04上从零安装Carla 0.9.12/0.9.13(附版本选择与常见报错解决)

从零到精通:Ubuntu 18.04下Carla 0.9.12/0.9.13安装全攻略与深度排错手册 当自动驾驶开发者第一次打开Carla官方文档时,往往会被其丰富的功能所吸引——从多传感器融合到复杂交通场景模拟,这个开源的仿真平台几乎涵盖了自动驾驶研发的所有关…...

基于MCP协议构建个人AI助手:本地化读取Mac消息数据库实践

1. 项目概述:一个让AI助手“读懂”你Mac消息的桥梁如果你和我一样,是个重度依赖Mac原生“信息”应用(也就是iMessage)来沟通的人,同时又希望自己的AI助手(比如Claude、Cursor里的AI)能更深入地了…...

Ubuntu20.04上搞定向日葵远程控制:从下载到解决‘libwebkitgtk-3.0-0’依赖报错的全流程

Ubuntu 20.04 向日葵远程控制安装全攻略:从依赖报错到完美运行 在Linux桌面环境中,远程控制工具的选择往往让新手感到困扰。作为国内用户熟悉的远程协助解决方案,向日葵(SunloginClient)以其简洁的界面和稳定的连接性能…...

XR Interaction Toolkit实战:为HTC Vive Cosmos打造抓取、投掷与UI交互(Unity 2023教程)

XR Interaction Toolkit实战:为HTC Vive Cosmos打造抓取、投掷与UI交互(Unity 2023教程) 在VR开发领域,交互设计始终是决定用户体验的核心要素。当我们谈论HTC Vive Cosmos这样的高端头显时,如何利用Unity 2023和XR In…...

全链路监控与可观测性:Spring AI 应用的日志、追踪与告警体系

系列导读 你现在看到的是《Spring AI 企业级集成与场景实践:从零搭建智能应用》的第 10/10 篇,当前这篇会重点解决:教会读者如何像监控数据库一样监控 AI 调用,快速定位性能瓶颈和异常。 上一篇回顾:第 9 篇《安全防线:Spring AI 应用的输入过滤、输出审核与数据隐私保…...

性能调优与成本控制:Spring AI 的缓存、限流与模型降级策略

系列导读 你现在看到的是《Spring AI 企业级集成与场景实践:从零搭建智能应用》的第 8/10 篇,当前这篇会重点解决:提供一套完整的性能与成本优化工具箱,让 AI 应用在预算内高效运行。 上一篇回顾:第 7 篇《生产级部署:Spring AI 应用的 Docker 容器化与 Kubernetes 编排…...

ARM GICv3中断控制器架构与ICC_CTLR_EL3寄存器解析

1. ARM GICv3中断控制器架构概述在现代处理器架构中,中断控制器是连接外设与CPU核心的关键枢纽。ARM的通用中断控制器(Generic Interrupt Controller, GIC)经过多代演进,GICv3架构在虚拟化支持、多安全域管理和扩展性方面实现了显著提升。作为GICv3的核心…...

基于拓扑结构的多智能体协同系统:从概念到工程实践

1. 项目概述:从单体智能到协同网络的范式演进最近在开源社区里,一个名为agentopology/agentopology的项目引起了我的注意。乍一看这个名字,结合了“Agent”(智能体)和“Topology”(拓扑)&#x…...

开源协作团队实践:从零构建高效技术团队的“团队即代码”方法论

1. 项目概述:一个开源协作团队的诞生与运作最近在GitHub上看到一个挺有意思的项目,叫jefferyjob/openclaw-it-team。光看这个名字,可能有点摸不着头脑,它不像一个具体的软件工具或框架,更像是一个团队或组织的代号。没…...

Carapace:动态生成Shell补全,统一管理命令行工具参数提示

1. 项目概述:一个能“读懂”你心思的Shell补全神器如果你在终端里敲命令时,经常记不住某个复杂工具的参数,或者厌倦了反复按Tab却得不到想要的提示,那么今天聊的这个项目,你一定会感兴趣。它叫Carapace,一个…...

你以为路径不会回头?一道 Self Crossing 让无数人当场破防

你以为路径不会回头?一道 Self Crossing 让无数人当场破防 很多人第一次刷到 Self Crossing(路径交叉) 这道题时,都有一种错觉: “不就是判断线段相交吗?这能有多难?” 结果一写代码: 判断漏了 边界炸了 图形绕晕了 Case 全挂了 最后看题解的时候,人都沉默了。 因为…...

为AI应用构建低成本实时搜索能力:gpt-search开源项目实战指南

1. 项目概述与核心价值最近在折腾一些AI应用开发,发现一个挺有意思的现象:很多开发者想给自己的GPT应用加上联网搜索能力,但往往卡在第一步——如何高效、稳定且低成本地获取实时网络信息。自己从零搭建一个搜索引擎爬虫?光是处理…...

企业级文档自动化平台docmancer:架构解析与工程实践

1. 项目概述:从“文档魔法师”到企业级文档自动化最近在梳理团队内部的知识管理流程时,我一直在寻找一个能够打通文档创建、协作、版本管理和自动化分发的“一体化”解决方案。市面上的工具要么太重,像Confluence那样需要复杂的配置和团队迁移…...

25岁入行编程,30岁实现财务自由:我的4步进阶法

作为一名软件测试从业者,你是否曾在反复的功能验证、bug回归中感到职业瓶颈?是否羡慕身边程序员的高薪与灵活发展路径?我曾和你一样,在测试岗位上摸爬滚打三年,25岁才下定决心转行编程,如今30岁已实现被动收…...

基于Mayan EDMS的文档管理系统部署与优化实践

1. 项目概述:一个面向文档管理的开源解决方案如果你在寻找一个能够替代Confluence、SharePoint,甚至是Google Drive的开源自托管方案,那么joyozhang333-lgtm/mayan-kin这个项目值得你花时间研究。它不是一个全新的轮子,而是基于一…...

程序员的职业规划:到底是走技术路线还是管理路线

程序员职业规划:技术与管理的岔路口在软件测试行业深耕多年,你或许早已习惯在代码的迷宫中寻找漏洞,在数据的海洋里甄别异常。但当职业生涯的列车行至中途,一个现实的问题总会悄然浮现:是继续在技术的山峰上攀登&#…...

TI毫米波雷达的测距极限:带宽、采样率与最大探测距离到底什么关系?

TI毫米波雷达测距极限:从理论公式到工程实践的深度解析 在自动驾驶和工业传感领域,毫米波雷达因其全天候工作能力和精确测距特性成为核心传感器。德州仪器(TI)的AWR和IWR系列雷达芯片凭借高集成度和灵活配置,被广泛应用于无人机避障、智能停车…...

数据库内机器学习:用SQL调用AI模型,简化预测工作流

1. 项目概述:当数据库遇上机器学习最近在开源社区里,一个名为mindsdb/anton的项目引起了我的注意。乍一看,这像是一个普通的数据库项目,但深入了解后,你会发现它试图解决一个困扰了数据工程师和分析师很久的痛点&#…...

手把手教你用Keil调试LVGL的HardFault:从LR=0xFFFFFFF9到找到吃栈的‘元凶’

Cortex-M架构下LVGL的HardFault诊断方法论:从寄存器分析到堆栈优化 当LVGL在Cortex-M微控制器上运行时突然陷入HardFault死循环,许多开发者会条件反射地增大堆栈空间。这种"试错法"虽然可能暂时解决问题,却掩盖了真正的技术债务。本…...

AI应用分布式追踪系统GranClaw:从OpenTelemetry到微服务排障实战

1. 项目概述:一个为AI应用量身定制的分布式追踪系统如果你正在开发或维护一个涉及多个微服务、复杂调用链的AI应用,比如一个集成了大语言模型、向量数据库和多个数据处理服务的智能问答系统,那么你一定对“排障”这件事深有体会。当用户反馈“…...

OBS Multi RTMP插件:终极多平台直播同步解决方案

OBS Multi RTMP插件:终极多平台直播同步解决方案 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 在当今的多平台直播时代,内容创作者面临着同时向多个平台推送直…...

蓝牙广播帧实战解析:从ADV_IND到AUX_CHAIN_IND的报文拆解

1. 蓝牙广播帧入门:为什么需要这么多类型? 刚接触蓝牙协议栈的开发者,第一次看到ADV_IND、ADV_DIRECT_IND这些缩写时,往往会感到一头雾水。我自己最初调试蓝牙设备时,就曾经对着抓包工具里密密麻麻的广播数据发愣——为…...

基于微服务与Docker的自动化评测系统Recodex部署与应用指南

1. 项目概述:一个面向教育场景的自动化评测系统 如果你是一名计算机科学或相关专业的教师,或者参与过编程竞赛的组织工作,那么你一定对“收作业”和“判作业”这两件事的繁琐程度深有体会。学生提交的代码文件五花八门,运行环境依…...

企业级视频AI中台落地实录:从零部署ElevenLabs语音引擎+自定义TTS角色库+审核水印嵌入(含GDPR合规配置清单)

更多请点击: https://intelliparadigm.com 第一章:企业级视频AI中台落地实录:从零部署ElevenLabs语音引擎自定义TTS角色库审核水印嵌入(含GDPR合规配置清单) 在某跨国媒体集团的AI中台建设中,我们基于Kube…...

基于Swift与AppKit的macOS菜单栏AI工具聚合器开发实践

1. 项目概述:一个为Mac用户打造的AI助手集成工具如果你是一名Mac用户,同时又对当前层出不穷的AI工具感到眼花缭乱,那么你很可能和我一样,经历过这样的困扰:ChatGPT的对话窗口、Midjourney的Discord频道、Claude的网页界…...

macOS原生系统监控工具MeterBar:Swift开发与状态栏应用实践

1. 项目概述:一个桌面系统监控工具的诞生最近在折腾一个挺有意思的小玩意儿,叫 MeterBar。这名字听起来就挺直观的,meter(仪表) bar(状态栏),合起来就是一个能放在你电脑屏幕顶部的系…...

DeepSeek LeetCode 2376.统计特殊整数 public int countSpecialNumbers(int n)

这是 LeetCode 2376 题:统计特殊整数。题目理解特殊整数:十进制表示中每一位数字都不同的整数。例如:123、20、5 都是特殊的,但 11、121 不是。要求统计 [1, n] 范围内特殊整数的数量。解题思路数位 DP (Digit DP) 是标准解法&…...

车载以太网测试避坑指南:DoIP和DIVA测试中那些容易搞错的VLAN与地址配置

车载以太网测试避坑指南:DoIP和DIVA测试中那些容易搞错的VLAN与地址配置 在车载以太网测试领域,DoIP(Diagnostics over Internet Protocol)和DIVA(Diagnostic IP Vehicle Access)测试已成为现代车辆诊断和通…...