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

uni-app Vue 项目的规范目录结构全解

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

文章目录

  • uni-app Vue 项目的规范目录结构全解
    • 引言
    • 📂 目录结构解析
    • 📌 每个模块的作用 + 示例代码
      • 1. `/api` —— 接口封装
      • 2. `/utils` —— 工具函数
      • 3. `/store` —— 全局状态(Pinia)
      • 4. `/components` —— 公共组件
      • 5. `/composables` —— 自定义 hooks
      • 6. `/pages` —— 页面目录
      • 7. `/styles` —— 全局样式
      • 8. `/types` —— 类型定义
      • 9. `main.ts` —— 入口文件
      • 10. `App.vue` —— 根组件
      • 11. `manifest.json`
      • 12. `pages.json`
      • 13. `uni.scss`
    • 🔄 串联起来的流程(箭头版)
    • 总结

在这里插入图片描述

uni-app Vue 项目的规范目录结构全解

引言

想象一下,如果你要盖一栋楼:

  • 你需要图纸(架构)
  • 你需要水泥和钢材(工具函数、组件)
  • 你需要电、水、管道系统(接口、路由、状态管理)

如果一切都堆在一起,现场就是个「大工地」,乱七八糟难以维护。
这就是为什么我们需要一个清晰的项目目录结构

首先,你需要去uniapp官方网站去安装一个基本目录:uniapp官方网站。注意:不管你是通过命令或是下载安装包的形式他都是一个最基本的目录(在真实项目中肯定是对其做以下扩展的)。我们接下来提到的文件功能模块更多的是要自己新建的,可以做到更多的模块化,让项目目录更加规范。

下面,我就带你逐个认识 /src 里的每个「部门」,让你理解它们各自的职责。


📂 目录结构解析

文件/文件夹作用解决了什么问题
/api接口封装层避免每次都手写 uni.request,统一管理请求
/assets静态资源存放图片、字体、icon,让资源集中管理
/components通用组件封装按钮、导航栏等公共模块,避免重复写代码
/composables自定义 hooks抽离逻辑复用,比如登录检测、主题切换
/pages业务页面每个页面就是一个独立功能模块
/router路由配置管理页面跳转,解耦 pages.json
/store状态管理(Pinia)全局数据共享,比如用户信息、token
/utils工具函数库封装格式化、加解密、校验等小工具
/styles全局样式存放主题色、通用 CSS,让全局风格统一
/typesTS 类型定义定义接口、数据结构,增强代码可维护性
main.ts项目入口挂载 App,初始化插件
App.vue根组件整个应用的“壳子”
manifest.jsonApp 配置应用的基本信息(小程序配置、权限等)
pages.json页面路由表配置页面路径、导航栏等
uni.scss全局样式变量定义全局样式变量,比如颜色、字体大小

📌 每个模块的作用 + 示例代码

1. /api —— 接口封装

作用:把 uni.request 封装成统一的调用方式,避免重复写请求逻辑。

// /src/api/user.ts
import request from "@/utils/request"// 获取用户信息
export function getUserInfo() {return request({url: "/user/info",method: "GET"})
}// 登录接口
export function login(data: { username: string; password: string }) {return request({url: "/auth/login",method: "POST",data})
}

2. /utils —— 工具函数

作用:抽离通用的小功能,比如请求封装、日期格式化。

// /src/utils/request.ts
export default function request(options: UniApp.RequestOptions) {return new Promise((resolve, reject) => {uni.request({...options,header: {Authorization: uni.getStorageSync("token") || "",...options.header,},success: (res) => resolve(res.data),fail: (err) => reject(err),})})
}

3. /store —— 全局状态(Pinia)

作用:存放用户信息、登录状态,任何页面都能访问。

// /src/store/user.ts
import { defineStore } from "pinia"export const useUserStore = defineStore("user", {state: () => ({token: "",userInfo: null as null | { name: string; avatar: string }}),actions: {setToken(token: string) {this.token = tokenuni.setStorageSync("token", token)},setUserInfo(info: any) {this.userInfo = info}}
})

4. /components —— 公共组件

作用:把常用 UI 提炼出来,方便复用。

<!-- /src/components/BaseButton.vue -->
<template><button class="btn" @click="$emit('click')"><slot></slot></button>
</template><style scoped>
.btn {padding: 10px 20px;background: var(--primary-color, #42b983);color: #fff;border-radius: 6px;
}
</style>

5. /composables —— 自定义 hooks

作用:逻辑复用,例如主题切换。

// /src/composables/useTheme.ts
import { ref } from "vue"const theme = ref<"light" | "dark">("light")export function useTheme() {function toggleTheme() {theme.value = theme.value === "light" ? "dark" : "light"document.documentElement.className = `${theme.value}-theme`}return { theme, toggleTheme }
}

6. /pages —— 页面目录

作用:一个页面一个文件夹,业务逻辑更清晰。

/pages/homeindex.vue/loginindex.vue
<!-- /src/pages/home/index.vue -->
<template><view><BaseButton @click="loadUser">获取用户信息</BaseButton><view v-if="user">{{ user.name }}</view></view>
</template><script setup lang="ts">
import { ref } from "vue"
import { getUserInfo } from "@/api/user"
import BaseButton from "@/components/BaseButton.vue"const user = ref<any>(null)
function loadUser() {getUserInfo().then(res => user.value = res)
}
</script>

7. /styles —— 全局样式

作用:统一主题。

/* /src/styles/variables.scss */
$primary-color: #42b983;
$text-color: #333;

8. /types —— 类型定义

作用:让接口数据结构更清晰。

// /src/types/user.ts
export interface User {id: numbername: stringavatar: string
}

9. main.ts —— 入口文件

作用:挂载应用、注册插件。

// /src/main.ts
import { createSSRApp } from "vue"
import { createPinia } from "pinia"
import App from "./App.vue"export function createApp() {const app = createSSRApp(App)app.use(createPinia()) // 挂载全局 storereturn { app }
}

10. App.vue —— 根组件

作用:定义全局结构。

<template><slot />
</template><script setup>
// 可以在这里定义全局逻辑,比如主题
</script>

11. manifest.json

作用:小程序/应用的配置,比如名字、appid、权限。


12. pages.json

作用:页面路由表。

{"pages": [{"path": "pages/home/index","style": { "navigationBarTitleText": "首页" }},{"path": "pages/login/index","style": { "navigationBarTitleText": "登录" }}]
}

13. uni.scss

作用:全局样式变量。

/* /src/uni.scss */
$uni-primary: #42b983;

🔄 串联起来的流程(箭头版)

main.ts (入口挂载)↓
App.vue (根组件)↓
pages.json (页面配置)↓
store (全局状态) ←→ api (接口) ←→ utils (工具)↓
pages (页面使用组件 & hooks)↓
components (通用组件)↓
styles / types (全局样式 & 类型)

总结

这个目录结构就像是一座「现代工厂」:

  • /api 是流水线接口
  • /components 是零件库
  • /composables 是工人的操作手册
  • /pages 是产品车间
  • /store 是仓库
  • /utils 是工具箱
  • /styles 是装修设计
  • /types 是产品说明书

掌握这些模块,你就能快速把一个 uni-app Vue 项目「从工地搭建成高楼大厦」。

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

相关文章:

  • 在线预约导游|基于SSM+vue的在线预约导游系统(源码+数据库+文档)
  • 网站你懂我意思正能量免费网站推广策划的流程
  • 信宜网站建设公司厦门 网站建设
  • 免费建立网站的平台wordpress简体中文版下载
  • 在小车上挂载nfs
  • C# 开发最新趋势:在性能与智能的浪潮中乘风破浪
  • EL817S1(C)(TU)-F 晶体管输出光耦合器 EVERLIGHT亿光 高隔离电压 电子解析
  • 河北建设厅录入业绩的网站营销方案100例
  • 品牌营销专家:为企业发展注入强劲动力
  • MS2107高性能USB 2.0视频信号和音频采集,支持NTSC/PAL制式,适用于低成本视频采集设备
  • 利用R绘制条形图
  • 解决Redis数据丢失难题:深入理解RDB与AOF持久化机制
  • 自己买一台服务器做自己的网站浙江省城乡建设厅官方网站
  • ARM处理器指令集
  • Day64 设备树与GPIO子系统驱动开发实践
  • 贝莱德终止收购云交所,YUNC暴跌风波
  • 源码网站php重庆观音桥网站建设
  • SWE-QA:语言模型能否回答仓库级代码问题?
  • 建功能网站有没有专业做效果图的网站
  • 做网站 教程做国外网站推广
  • k8s容器java应用频繁重启问题排查 OOM方向
  • 宁夏建设工程造价网站做pc端网站新闻
  • Spring Boot + Filebeat + ELK日志在线查看
  • 使用高性能流式的库SpreadCheetah创建EXCEL文件
  • 【西瓜播放器+Vue】前端实现网页短视频:上下滑动、自动播放、显示视频信息等
  • 软件下载网站模版html软件下载手机版
  • 哪些平台可以免费推广广州百度提升优化
  • Redis-缓存问题(穿透、击穿、雪崩)
  • Mysql数据库系统库数据恢复
  • 服务器数据恢复—RAID5硬盘掉线,热备盘未启用如何恢复raid5阵列数据?