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

Uni-App(Vue3 + TypeScript)项目结构详解 ------ 以 Lighting-UniApp 为例,提供源代码

Uni-App(Vue3 + TypeScript)项目源代码在最后

在本文中,我们将详细解析一个完整的 Uni-App + Vue3 + TypeScript
工程结构。 以项目 Lighting-UniApp
为示例,带你了解每个文件、目录的用途与作用。


📁 项目结构总览

LIGHTING-UNIAPP/
├─ .idea/                  # VSCode / WebStorm 项目配置文件
├─ dist/                   # 打包输出目录(编译后的文件)
├─ node_modules/           # 第三方依赖库(由 npm 自动生成)
├─ src/                    # 核心源代码目录
│  ├─ api/                 # 与后端通信的接口封装
│  ├─ components/          # 自定义 Vue 组件
│  ├─ hooks/               # 封装的组合式函数(Composition API)
│  ├─ pages/               # 应用页面(每个文件夹代表一个页面)
│  ├─ static/              # 静态资源(图片、音频、字体等)
│  ├─ store/               # 全局状态管理(Pinia 或 Vuex)
│  ├─ utils/               # 工具函数模块(时间格式化、节流、防抖等)
│  ├─ App.vue              # 应用根组件
│  ├─ env.d.ts             # 环境类型声明文件(用于全局类型补充)
│  ├─ main.ts              # 应用入口文件(创建 Vue 应用实例)
│  └─ manifest.json        # Uni-App 运行配置文件(App 权限、启动图等)
│
├─ pages.json              # 页面配置文件(页面路径与导航栏)
├─ shime-uni.d.ts          # Uni-App 全局类型声明文件(为 `uni.*` 提供类型提示)
├─ uni.scss                # 全局样式变量文件(颜色、字体、间距)
├─ .gitignore              # Git 忽略文件列表
├─ eslint.config.mjs       # ESLint 代码规范配置
├─ index.html              # Web 平台入口 HTML 文件(H5 编译时使用)
├─ package-lock.json       # npm 依赖锁定文件(自动生成)
├─ package.json            # 项目信息与依赖声明(最核心的配置)
├─ README.md               # 项目说明文档
├─ shims-uni.d.ts          # 兼容不同平台的 Uni 类型声明
├─ tsconfig.json           # TypeScript 编译配置文件
└─ vite.config.ts          # Vite 构建工具配置文件

🧩 各目录与文件详解

1️⃣ .idea/

由 JetBrains(WebStorm、PhpStorm)自动生成,保存 IDE
工程设置,不参与构建。

2️⃣ dist/

项目打包后生成的产物目录。
通常不会手动编辑,发布或部署时使用。

3️⃣ node_modules/

项目依赖安装后生成的模块目录,包含所有 npm 包。

4️⃣ src/ ------ 项目核心代码目录

📁 api/

用于封装与后端通信的接口模块,示例:

import request from '@/utils/request'export const getUserList = () => request.get('/user/list')
📁 components/

放置全局或局部可复用的 Vue 组件,例如:

<MyButton />
<UserCard />
📁 hooks/

自定义组合式函数目录,用于抽离通用逻辑:

export function useCounter() {const count = ref(0)const increment = () => count.value++return { count, increment }
}
📁 pages/

每个文件夹代表一个独立页面,例如:

pages/
├─ index/
│  └─ index.vue
├─ login/
│  └─ login.vue
📁 static/

放置不会被 Webpack/Vite 处理的静态资源(如图片、音频)。

📁 store/

用于状态管理,可采用 Pinia:

import { defineStore } from 'pinia'export const useUserStore = defineStore('user', {state: () => ({ name: '张三', token: '' })
})
📁 utils/

封装项目常用工具函数:

export function formatTime(date: Date) {return date.toLocaleString()
}
🧩 App.vue

应用根组件,是整个项目的启动入口(类似 React 的 App.js)。

🧩 main.ts

项目启动文件,挂载 App 并创建应用实例:

import { createSSRApp } from 'vue'
import App from './App.vue'export function createApp() {const app = createSSRApp(App)return { app }
}
🧩 manifest.json

App 端运行配置文件,控制应用图标、启动页、权限等。


5️⃣ pages.json

定义页面路径与导航栏外观,是 UniApp 的"路由表"。

{"pages": [{"path": "pages/index/index","style": { "navigationBarTitleText": "首页" }}]
}

6️⃣ uni.scss

全局样式变量文件,例如:

$primary-color: #3b82f6;
$text-color: #333;

所有 .vue 页面都可直接使用这些变量。


7️⃣ vite.config.ts

Vite 构建配置文件,定义插件与路径别名:

import { defineConfig } from 'vite'
import uni from '@dcloudio/vite-plugin-uni'
import { fileURLToPath, URL } from 'node:url'export default defineConfig({resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) } },plugins: [uni()]
})

8️⃣ tsconfig.json

TypeScript 的核心配置文件,控制类型检查、语法支持和路径解析:

{"compilerOptions": {"target": "ESNext","strict": true,"baseUrl": ".","paths": { "@/*": ["./src/*"] }}
}

9️⃣ .eslintrc.cjs / eslint.config.mjs

代码规范配置文件,控制 ESLint 行为,比如是否允许多余空格、未使用变量等。


🔟 其他文件说明

文件 说明


.gitignore 控制哪些文件不提交到 Git
index.html H5 运行入口
package.json 项目依赖、脚本命令
package-lock.json 锁定依赖版本
README.md 项目说明文档
shims-uni.d.ts / env.d.ts 提供 UniApp、环境变量的类型声明


📘 路由封装(和vue用法一致)

该路由系统基于 Uni-App 与 Vue3 构建,统一封装了页面跳转与参数管理逻辑。
它自动解析 URL 中的参数(支持多层 JSON 与编码),并提供类型安全的路由对象。
开发者通过 useRouter() 即可在任意页面中获取参数、执行跳转、重定向或返回,简化页面通信与导航流程。

分别负责 URL 拼接 → 参数传递 → 参数解析 → 页面 Hook

🧱 基础工具 utils/params.ts 负责把参数对象拼接或解析成 URL
🧭 路由核心类 utils/router.ts 封装 uni.navigateTo / redirectTo 等操作
🔍 参数解析Hook useQuery/index.ts 负责在页面加载时解析 URL 参数并返回响应式对象
🔗 路由Hook useRouter/index.ts 将 Router 与 useQuery 结合,实现页面级路由对象

🧱 1️⃣ params.ts —— URL 参数工具

    功能:拼接或解析 URL 参数。提供函数:setParams(url, params):把对象转成 ?a=1&b=2。getParams(url):从 URL 提取参数对象。服务对象:被 router.ts 调用,用来生成跳转链接。

🧭 2️⃣ router.ts —— 路由核心类

    功能:封装 uni.navigateTo、redirectTo、switchTab、back。核心点:统一参数处理(调用 setParams() 拼接)。维护当前 path 与 query。提供生命周期回调 ready() / runReady()。服务对象:被 useRouter.ts 实例化,用来操作页面跳转。

🔍 3️⃣ useQuery —— 参数解析 Hook

    功能:在页面加载时自动解析 URL 参数。特性:两次 decodeURIComponent 解码。自动识别 JSON 并递归解析。支持合并默认值。输出:返回响应式对象 query。服务对象:被 useRouter.ts 调用,用于读取当前页参数。

🔗 4️⃣ useRouter —— 页面路由 Hook(整合层)

    功能:把 Router + useQuery 结合成页面可直接使用的路由对象。逻辑:创建 query = useQuery();创建响应式 router = new Router();在 onLoad 时写入 query 和当前路径;页面渲染完成后执行 router.runReady() 回调。输出:一个带跳转功能、含当前参数的 router 实例。

🔄 四者协作流程

    页面加载↓useRouter()├─ 调用 useQuery() → 解析 URL 参数├─ 创建 Router() → 管理跳转与状态├─ 写入 query/path└─ nextTick → runReady() 触发回调

✅ 一句话总结:

params.ts 负责拼接,router.ts 负责跳转,
useQuery 负责解析,useRouter 负责整合。
页面通过 useRouter() 一步即可完成「参数解析 + 路由操作」。

📘 总结

Lighting-UniApp 是一个基于 Vue3 + TypeScript + Uni-App
的跨平台项目, 通过 vite 构建、tsconfig.json
提供类型支持、pages.json 控制页面结构、manifest.json 管理应用权限。

这一结构清晰、模块划分明确的项目架构,非常适合前端工程化与移动端多端开发。


✨ 作者建议:写项目时,保持 apistoreutils 的独立性;保持
pages.json 的整洁,可以让你的 UniApp 项目结构清晰、易维护。

源代码

https://gitee.com/yinerjie/uniapp_vue3_ts.git

http://www.dtcms.com/a/523925.html

相关文章:

  • 如何帮网站广州广告推广公司
  • EPLAN电气设计常见报错与解决方案(一)
  • Unity TextMeshPro 输入表情
  • php简易企业网站源码nodejs网站开发
  • 《打破数据孤岛:3D手游角色表情骨骼协同的实践指南》
  • 【数据结构】数据结构核心考点:AVL树删除操作详解(附平衡旋转实例)
  • 当“Make”坏了,我们该如何“Make”
  • 【北京迅为】iTOP-4412精英版使用手册-第六十七章 USB鼠标驱动详解
  • 基于Three.js在Vue中实现3D模型交互与可视化
  • 网站功能分析门户网站建设招标公告
  • 【计算机网络】HTTP协议(二)——超文本传输协议
  • ip开源网站FPGA可以做点什么网站开发一般用哪个浏览器
  • Hive数据仓库:架构原理与实践指南
  • Azure OpenAI PTU 自动化运维完整指南
  • iOS 架构设计全解析 从MVC到MVVM与使用 开心上架 跨平台发布 免Mac
  • 深度学习-176-知识图谱技术之langchain与neo4j的嵌入向量Neo4jVector
  • Azure OpenAI PTU 容量自动调整方案:基于历史使用模式的智能伸缩
  • F033 vue+neo4j图书智能问答+知识图谱推荐系统 |知识图谱+neo4j+vue+flask+mysql实现代码
  • 深度学习-177-知识图谱技术之langchain与neo4j完整的RAG系统示例
  • seo网站平台wordpress自动生成网站地图
  • 《图解技术体系》Wonderful talk AI ~~人“涌现”
  • 浅谈ColchisFM地震正演分析在地震资料解释中的作用(六)
  • 动态规划or分治法——力扣53.最大子数组和
  • 【解决】蚁剑下载插件过慢、下载插件无法安装等问题
  • 在dify平台智能体工作流中迭代和循环如何选择?
  • UE5 蓝图-13:HUD蓝图的 beginPlay里创建了 mainUI 蓝图对象,蓝图函数库里的函数 getMainUI 以及 getPawn
  • 11.盛最多水的容器
  • 【C++】stack和queue:优先级队列的使用及底层原理
  • 兰州营销型网站建设优化游戏的软件
  • 廊坊做网站的公司专门做孕婴用品的网站