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

uni-app 系统学习,从入门到实战(二)—— 项目结构解析

全篇大概 2000 字(含代码),建议阅读时间 10min

一、UniApp 目录结构详解

        UniApp 基于 Vue.js 开发,其目录结构遵循约定大于配置的原则,以下是一个标准项目的核心目录结构:

pages # 页面目录(核心)
index # 首页
index.vue # 页面组件
index.scss # 页面样式
static # 静态资源(图片、字体等)
components # 自定义组件
uni_modules # 插件市场安装的模块
common # 公共工具(JS、CSS)
App.vue # 应用入口组件
main.js # 应用入口脚本
pages.json # 全局页面配置(核心)
manifest.json # 应用发布配置(核心)
uni.scss # 全局样式变量
1.1 核心目录说明
  1. pages 目录

    • 每个子目录对应一个页面,必须包含 .vue 文件。

    • 页面路径需在 pages.json 中注册后才能访问。

  2. static 目录

    • 存放静态资源(如图片、字体),通过绝对路径 /static/logo.png 引用。

    • 打包时会直接复制到输出目录,不建议存放大型文件

  3. components 目录

    • 存放全局复用组件,通过 @/components/xxx.vue 引入。


二、pages.json:页面路由与全局样式配置

        pages.json 是 UniApp 的核心配置文件,负责管理页面路由、导航栏样式、底部 TabBar 等全局设置。

2.1 基本结构示例
{"pages": [{"path": "pages/index/index","style": {"navigationBarTitleText": "首页","enablePullDownRefresh": true}}],"globalStyle": {"navigationBarTextStyle": "black","navigationBarBackgroundColor": "#FFFFFF"},"tabBar": {"list": [{"pagePath": "pages/index/index","text": "首页"}]}
}
2.2 核心配置项解析
  • pages 数组

    • path: 页面路径(相对于项目根目录)

    • style: 页面独有样式配置(覆盖全局配置)

  • globalStyle

    • 全局导航栏、背景色、下拉刷新等样式配置。

  • tabBar

    • 底部导航栏配置,最多支持 5 个 Tab。

2.3 最佳实践
  • 使用 condition 字段实现动态路由(如根据用户权限显示不同页面)。

  • 通过 easycom 配置自动引入组件,避免手动注册。


三、manifest.json:应用发布与多端适配

    manifest.json 是应用的发布配置文件,用于配置应用名称、图标、启动页、权限等平台相关设置。

3.1 基本结构示例
{"name": "MyApp","appid": "__UNI__XXXXXX","versionName": "1.0.0","mp-weixin": {"appid": "wx1234567890","permission": {"scope.userLocation": {"desc": "需要获取您的位置信息"}}},"h5": {"title": "My H5 App","router": {"mode": "history"}}
}
3.2 多平台配置策略
  • 公共配置nameversionNameappid 等全局生效。

  • 平台专属配置:如 mp-weixin(微信小程序)、h5app(原生 App)等节点。

3.3 关键配置项
  • 图标与启动页

    "icons": {"android": "/static/logo.png","ios": "/static/logo.png"
    },
    "splashscreen": {"alwaysShowBeforeRender": false
    }
  • 权限声明(微信小程序)

    "mp-weixin": {"permission": {"scope.userLocation": {"desc": "获取位置用于导航功能"}}
    }
     

四、开发与发布流程优化

  1. 环境区分

    • 通过 process.env.NODE_ENV 区分开发与生产环境。

    • 在 manifest.json 中配置不同环境的 API 地址。

  2. 性能优化

    使用 分包加载 减少首屏体积:
// pages.json
"subPackages": [{"root": "subpages","pages": [ ... ]}
]
  1. 多平台发布

    • 通过 HBuilderX 的 发行菜单 一键生成各平台代码包。

    • 针对不同平台调整 manifest.json 中的配置(如微信小程序的 appid)。


五、常见问题与解决方案

  1. 页面白屏

    • 检查 pages.json 中的路径是否正确。

    • 确保页面组件包含 <template><script><style> 标签。

  2. 静态资源加载失败

    • 使用绝对路径 /static/...,避免相对路径。

    • 检查文件是否被正确复制到 dist 目录。

  3. 跨平台样式兼容

    • 使用 uni.scss 定义全局样式变量。

    • 通过条件编译实现平台差异化样式:

/* #ifdef H5 */
.header { height: 44px; }
/* #endif */

总结

掌握 UniApp 的目录结构与核心配置文件(pages.json 和 manifest.json)是开发跨平台应用的关键。通过合理配置,可以实现:

  • 高效路由管理

  • 多平台差异化适配

  • 一键打包发布

相关文章:

uni-app 系统学习,从入门到实战(二)—— 项目结构解析

全篇大概 2000 字&#xff08;含代码&#xff09;&#xff0c;建议阅读时间 10min 一、UniApp 目录结构详解 UniApp 基于 Vue.js 开发&#xff0c;其目录结构遵循约定大于配置的原则&#xff0c;以下是一个标准项目的核心目录结构&#xff1a; pages # 页面目录&#xff08;核…...

滴水逆向_引用_友元函数_运算符重载

作业&#xff1a; 运算符号重载实现。 struct Person { public:int x;int y; public:Person(){this->x 10;this->y 20;}Person(int x, int y){this->x x;this->y y;}//申明友元函数void Printf(const Person& p){printf("%d %d",p.x,p.y);}/…...

java医院多维度综合绩效考核源码,医院绩效管理系统,支持一键核算和批量操作,设有审核机制,允许数据修正

医院绩效考核管理系统&#xff0c;java医院绩效核算系统源码&#xff0c;采用多维度综合绩效考核的形式&#xff0c;针对院内实际情况分别对工作量、KPI指标、科研、教学、管理等进行全面考核。医院可结合实际需求&#xff0c;对考核方案中各维度进行灵活配置&#xff0c;对各维…...

科普:HTTP端口80和HTTPS端口443

你会发现&#xff0c;有的网址不带端口号&#xff0c;怎么回事&#xff1f; HTTP协议默认端口&#xff1a;HTTP协议的默认端口是80。当用户在浏览器中输入一个没有指定端口的以http://开头的网址时&#xff0c;浏览器会自动使用80端口与服务器建立连接&#xff0c;进行超文本数…...

uniapp打包生产证书上架IOS全流程

第一步&#xff1a;生成生产证书 上传CSR文件&#xff0c;windows系统电脑无法上传csr文件可以参考这个&#xff1a; windows下创建ios打包证书的详细流程_香蕉云编 下载生产证书 下载下来的cer生产证书在香蕉云编cer文件上传栏上传&#xff0c;然后生成p12文件 生成p12文件…...

山东大学软件学院nosql实验一环境配置

环境&#xff1a;前端vue后端springboot 软件环境&#xff1a; MongoDB MongoDBCompass 实验步骤与内容&#xff1a; 在官网下载安装包&#xff08;最新版&#xff09; 配置环境环境变量 在“高级系统设置-环境变量”中&#xff0c;可以将MongoDB添加到环境变量Path中(D:\…...

【2024 CSDN博客之星】大学四年,我如何在CSDN实现学业与事业的“双逆袭”?

前言&#xff1a; Hello大家好&#xff0c;我是Dream。不知不觉2024年已经过去&#xff0c;自己也马上迈入23岁&#xff0c;感慨时间飞快&#xff0c;从19岁刚入大学加入CSDN&#xff0c;到现在大学毕业已经整整四年了。CSDN陪伴我走过了最青涩的四年大学时光&#xff0c;在这里…...

【Windows 同时安装 MySQL5 和 MySQL8 - 详细图文教程】

目录 建议 8.0的版本用图形化工具安装 0.下载 1.安装 2.配置环境变量 1. 下载 mysql8.0 和 mysql5.7的压缩包 2. 解压到本地 3. 安装MySQL8.xx.xx 第一步 配置环境变量 第二步 新建配置文件 第三步 MySQL 数据库初始化 第四步 临时密码 第五步 安装并开启mysql80服…...

[Python学习日记-83] 操作系统的介绍

[Python学习日记-83] 操作系统的介绍 简介 操作系统介绍 简介 本篇开始我们要学习网络编程的进阶知识&#xff0c;即并发编程&#xff08;多进程编程&#xff09;&#xff0c;从字面意思可以看出&#xff0c;进程就是正在执行的一个过程&#xff0c;也就是说进程是对正在运行…...

软考——WWW与HTTP

1.万维网&#xff08;world wide web&#xff09; 是一个规模巨大的、可以资源互联的资料空间。由URL进行定位&#xff0c;通过HTTP协议传送给使用者&#xff0c;又由HTML来进行文件的展现。 它的主要组成部分是&#xff1a;URL、HTTP、HTML。 &#xff08;1&#xff09;URL…...

算法-数据结构-图-邻接表构建

邻接表的基本概念 顶点&#xff08;Vertex&#xff09;&#xff1a; 图中的每个顶点用一个节点表示。 每个顶点存储一个链表或数组&#xff0c;用于记录与该顶点直接相连的其他顶点。 边&#xff08;Edge&#xff09;&#xff1a; 如果顶点 A 和顶点 B 之间有一条边&#xf…...

Docker(Nginx)部署Vue

简介&#xff1a;目标使用docker将vue生成的dist文件&#xff0c;结合nginx生成镜像&#xff0c;然后运行&#xff1b; 1、首选确保vue项目正确运行&#xff0c;并能正确打包dist文件&#xff1b; 2、查看已经生成的dist文件 3、将dist文件打包为rar文件或者zip文件&#xf…...

ubuntu22.04的docker容器中安装ssh服务

ubuntu22.04的docker容器中安装ssh服务&#xff0c;以便外部可以连接到容器中操作。 rootnode15:~# cat /etc/issue Ubuntu 22.04.5 LTS \n \l rootnode15:~# docker ps|grep qwen 7d3c36c37d36 vllm/vllm-openai:v0.7.3 "python3 -m …...

卷积这个词在卷积神经网络中应该怎么理解

卷积的定义 数学概念&#xff1a; 在数学上&#xff0c;卷积是一种操作&#xff0c;通常用于两个函数之间的运算。对于图像处理而言&#xff0c;这些函数通常是输入图像和一个称为“卷积核”或“滤波器”的小矩阵。 在CNN中的应用&#xff1a; 卷积操作是通过滑动窗口&#xf…...

设计模式教程:迭代器模式(Iterator Pattern)

迭代器模式&#xff08;Iterator Pattern&#xff09;是设计模式中的一种行为型模式&#xff0c;它允许顺序访问一个集合对象中的元素&#xff0c;而无需暴露集合对象的内部结构。换句话说&#xff0c;迭代器模式提供了一个方法&#xff0c;能让你遍历集合中的元素&#xff0c;…...

C语言学习【1】C语言关于寄存器的封装

目录 1.封装寄存的C语言的语法volatile&#xff1a;unsigned int:*pGpiobOdrvolatile unsigned int * 2.进一步C语言的封装 在嵌入式中&#xff0c;底层一定是操作寄存器&#xff0c;我有一个理念&#xff0c;凡事一定要想清楚&#xff0c;把任何知识点融入自己的理解之中&…...

鸿蒙app 开发中的 == 和 === 的区别

在鸿蒙 App 开发中&#xff0c;如果你使用 JavaScript 或 TypeScript 进行编码&#xff0c; 和 是用于比较值的运算符&#xff0c;它们的主要区别在于比较的严格程度&#xff0c;下面为你详细介绍&#xff1a; 1. &#xff08;宽松相等运算符&#xff09; 比较规则&#xff1…...

【算法】冒泡排序

目录 一、算法概述 二、算法原理 1. 核心思想 2. 排序过程演示 三、标准实现代码 四、时间复杂度分析 五、优化策略 1. 提前终止优化 2. 记录最后交换位置 六、算法特性 七、实际应用 八、扩展思考 九、总结 一、算法概述 冒泡排序&#xff08;Bubble Sort&#xff0…...

R Excel 文件:高效数据处理的利器

R Excel 文件:高效数据处理的利器 在数据分析领域,R语言因其强大的统计分析和可视化功能而备受推崇。而R Excel文件,作为R语言与Excel的桥梁,使得数据在R和Excel之间的高效转换成为可能。本文将详细介绍R Excel文件的概念、应用场景以及操作方法。 一、R Excel文件的概念…...

数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(一).创建基础表

一. 使用工具和命令 1.1 使用的工具 Navicat Premium 17 &#xff1a;“Navicat”是一套可创建多个连接的数据库管理工具。 MySQL版本8.0.39 。 1.2 使用的命令 Navicat中使用的命令 命令 命令解释 SHOW DATABASES&#xff1b; 展示所有的数据库 CREATE DATABASE 数据…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化

iOS 应用的发布流程一直是开发链路中最“苹果味”的环节&#xff1a;强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说&#xff0c;这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发&#xff08;例如 Flutter、React Na…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...

flow_controllers

关键点&#xff1a; 流控制器类型&#xff1a; 同步&#xff08;Sync&#xff09;&#xff1a;发布操作会阻塞&#xff0c;直到数据被确认发送。异步&#xff08;Async&#xff09;&#xff1a;发布操作非阻塞&#xff0c;数据发送由后台线程处理。纯同步&#xff08;PureSync…...

Appium下载安装配置保姆教程(图文详解)

目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...

VSCode 使用CMake 构建 Qt 5 窗口程序

首先,目录结构如下图: 运行效果: cmake -B build cmake --build build 运行: windeployqt.exe F:\testQt5\build\Debug\app.exe main.cpp #include "mainwindow.h"#include <QAppli...

手动给中文分词和 直接用神经网络RNN做有什么区别

手动分词和基于神经网络&#xff08;如 RNN&#xff09;的自动分词在原理、实现方式和效果上有显著差异&#xff0c;以下是核心对比&#xff1a; 1. 实现原理对比 对比维度手动分词&#xff08;规则 / 词典驱动&#xff09;神经网络 RNN 分词&#xff08;数据驱动&#xff09…...