第一部分:Vue 3 基础入门
第5集:项目结构深度解析
在上一集中,我们创建了第一个Vue 3项目,并了解了基本的项目结构。在本集中,我们将深入解析Vue 3项目的各个文件和目录,了解它们的作用和配置选项,以便更好地管理和开发Vue 3应用。
5.1 项目根目录
项目根目录包含了项目的配置文件、依赖管理文件和其他重要文件:
5.1.1 index.html
作用:HTML模板文件,是Vue应用的入口HTML文件。
特点:
- 与传统的HTML文件不同,Vite的index.html位于项目根目录,而不是public目录
- 包含一个id为"app"的div元素,Vue应用将挂载到这个元素上
- 使用
<script type="module">引入JavaScript模块 - 支持模板变量替换(如
%VITE_APP_TITLE%)
示例:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>%VITE_APP_TITLE%</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>5.1.2 package.json
作用:项目配置文件,包含项目依赖、脚本命令、元数据等。
核心配置项:
name:项目名称version:项目版本type:模块类型("module"表示ES模块)scripts:脚本命令dependencies:生产依赖devDependencies:开发依赖
示例:
{
"name": "my-vue3-app",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"vue": "^3.3.8"
},
"devDependencies": {
"@vitejs/plugin-vue": "^4.5.0",
"vite": "^5.0.0"
}
}5.1.3 vite.config.js
作用:Vite配置文件,用于配置Vite的各种选项。
常用配置项:
plugins:插件配置server:开发服务器配置build:构建配置resolve:模块解析配置css:CSS配置
示例:
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
export default defineConfig({
plugins: [vue()],
server: {
port: 3000,
open: true
},
build: {
outDir: 'dist',
assetsDir: 'assets',
sourcemap: false
},
resolve: {
alias: {
'@': resolve(__dirname, 'src')
}
}
})5.1.4 .gitignore
作用:Git忽略文件,指定Git不追踪的文件和目录。
常用忽略项:
dist
node_modules
.env
.env.local
.env.*.local
.vscode/
.idea/
*.log5.1.5 README.md
作用:项目说明文件,包含项目介绍、安装步骤、使用方法等。
5.2 public目录
作用:静态资源目录,存放不需要经过构建处理的静态资源。
特点:
- 目录下的文件会被直接复制到构建输出目录的根目录
- 可以通过绝对路径访问,如
/favicon.ico - 适合存放如favicon、robots.txt、第三方库等静态资源
5.3 src目录
作用:源代码目录,包含应用的所有源代码。
5.3.1 main.js(或main.ts)
作用:应用入口文件,负责创建Vue应用实例并挂载到DOM上。
核心功能:
- 导入Vue的createApp函数
- 导入根组件App.vue
- 导入全局样式
- 创建Vue应用实例
- 注册全局组件、指令、插件等
- 将应用挂载到DOM元素上
示例:
import { createApp } from 'vue'
import App from './App.vue'
import './style.css'
const app = createApp(App)
// 注册全局组件
// app.component('MyComponent', MyComponent)
// 注册全局指令
// app.directive('my-directive', myDirective)
// 使用插件
// app.use(myPlugin)
app.mount('#app')5.3.2 App.vue
作用:根组件,是应用的顶层组件。
结构:
<template>:组件模板<script setup>:组件逻辑(使用组合式API)<style>:组件样式
示例:
<template>
<div class="app">
<Header />
<main>
<router-view />
</main>
<Footer />
</div>
</template>
<script setup>
import Header from './components/Header.vue'
import Footer from './components/Footer.vue'
</script>
<style>
/* 全局样式 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
}
</style>5.3.3 components目录
作用:存放自定义组件。
组织方式:
- 按功能模块组织,如
components/user/、components/admin/ - 通用组件放在
components/common/或components/ui/目录 - 每个组件通常是一个独立的.vue文件
组件命名规范:
- 采用 PascalCase 命名(如HelloWorld.vue)
- 文件名与组件名保持一致
- 复杂组件可以拆分为多个子组件
5.3.4 assets目录
作用:存放静态资源,如图片、字体、图标等。
特点:
- 目录下的资源会经过Vite的构建处理
- 支持多种资源格式(jpg、png、svg、gif、woff2等)
- 可以通过相对路径或别名导入
示例:
// 导入图片
import logo from './assets/logo.png'
// 在模板中使用
<img :src="logo" alt="Logo" />5.3.5 style.css
作用:全局样式文件。
内容:
- 重置样式(如margin、padding)
- 全局变量(如颜色、字体)
- 全局布局样式
- 通用工具类
示例:
/* 重置样式 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* CSS变量 */
:root {
--primary-color: #42b883;
--secondary-color: #35495e;
--text-color: #333;
--background-color: #f5f5f5;
}
/* 全局样式 */
body {
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
color: var(--text-color);
background-color: var(--background-color);
}5.4 其他常用目录
根据项目需求,我们还可以添加以下目录:
5.4.1 views(或pages)目录
作用:存放页面级组件,通常与路由对应。
示例:
src/
└── views/
├── Home.vue
├── About.vue
├── Contact.vue
└── User/
├── List.vue
├── Detail.vue
└── Edit.vue5.4.2 router目录
作用:存放路由配置文件。
示例:
// router/index.js
import { createRouter, createWebHistory } from 'vue-router'
import Home from '../views/Home.vue'
const routes = [
{
path: '/',
name: 'Home',
component: Home
},
{
path: '/about',
name: 'About',
component: () => import('../views/About.vue')
}
]
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes
})
export default router5.4.3 store目录
作用:存放状态管理相关文件(如Pinia或Vuex)。
示例:
src/
└── store/
├── index.js
└── modules/
├── user.js
└── product.js5.4.4 api目录
作用:存放API请求相关文件。
示例:
src/
└── api/
├── index.js # API客户端配置
├── user.js # 用户相关API
└── product.js # 产品相关API5.4.5 utils目录
作用:存放工具函数和工具类。
示例:
src/
└── utils/
├── request.js # 请求工具
├── format.js # 格式化工具
└── storage.js # 存储工具5.4.6 composables目录
作用:存放组合式函数(composables),用于复用组件逻辑。
示例:
src/
└── composables/
├── useCounter.js
├── useApi.js
└── useStorage.js5.4.7 hooks目录
作用:存放自定义钩子(与composables类似,通常用于React项目,但Vue项目也可使用)。
5.5 项目结构最佳实践
- 按功能模块组织:将相关的组件、页面、API等放在同一个功能目录下
- 合理使用别名:配置路径别名(如@),简化导入路径
- 保持单一职责:每个组件、函数只负责一个功能
- 使用TypeScript:提高代码质量和开发体验
- 添加README文件:为每个目录添加README,说明目录用途
- 遵循命名规范:组件使用PascalCase,文件使用kebab-case,函数使用camelCase
本集小结
在本集中,我们深入解析了Vue 3项目的各个文件和目录:
- 根目录文件:index.html、package.json、vite.config.js等
- public目录:存放不需要构建的静态资源
- src目录:包含应用的所有源代码
- main.js:应用入口文件
- App.vue:根组件
- components目录:存放自定义组件
- assets目录:存放需要构建的静态资源
- style.css:全局样式文件
- 其他常用目录:views、router、store、api、utils、composables等
了解项目结构是开发Vue应用的基础,合理的项目结构可以提高代码的可维护性和可扩展性。在下一集中,我们将学习Vue 3的单文件组件(SFC),深入了解组件的结构和特性。