说下你的vue项目的目录结构,该怎么划分?
myzbx 2025-03-26 14:24 166 浏览
使用vue构建项目,项目结构清晰会提高开发效率,熟悉项目的各种配置同样会让开发效率更高
在划分项目结构的时候,需要遵循一些基本的原则:
- 文件夹和文件夹内部文件的语义一致性
- 单一入口/出口
- 就近原则,紧耦合的文件应该放到一起,且应以相对路径引用
- 公共的文件应该以绝对路径的方式从根目录引用
- /src 外的文件不应该被引入
文件夹和文件夹内部文件的语义一致性
我们的目录结构都会有一个文件夹是按照路由模块来划分的,如pages文件夹,这个文件夹里面应该包含我们项目所有的路由模块,并且仅应该包含路由模块,而不应该有别的其他的非路由模块的文件夹
这样做的好处在于一眼就从 pages文件夹看出这个项目的路由有哪些
单一入口/出口
举个例子,在pages文件夹里面存在一个seller文件夹,这时候seller 文件夹应该作为一个独立的模块由外部引入,并且 seller/index.js 应该作为外部引入 seller 模块的唯一入口
// 错误用法
import sellerReducer from 'src/pages/seller/reducer'
// 正确用法
import { reducer as sellerReducer } from 'src/pages/seller'
这样做的好处在于,无论你的模块文件夹内部有多乱,外部引用的时候,都是从一个入口文件引入,这样就很好的实现了隔离,如果后续有重构需求,你就会发现这种方式的优点
就近原则,紧耦合的文件应该放到一起,且应以相对路径引用
使用相对路径可以保证模块内部的独立性
// 正确用法
import styles from './index.module.scss'
// 错误用法
import styles from 'src/pages/seller/index.module.scss'
举个例子
假设我们现在的 seller 目录是在 src/pages/seller,如果我们后续发生了路由变更,需要加一个层级,变成 src/pages/user/seller。
如果我们采用第一种相对路径的方式,那就可以直接将整个文件夹拖过去就好,seller 文件夹内部不需要做任何变更。
但是如果我们采用第二种绝对路径的方式,移动文件夹的同时,还需要对每个 import 的路径做修改
公共的文件应该以绝对路径的方式从根目录引用
公共指的是多个路由模块共用,如一些公共的组件,我们可以放在src/components下
在使用到的页面中,采用绝对路径的形式引用
// 错误用法
import Input from '../../components/input'
// 正确用法
import Input from 'src/components/input'
同样的,如果我们需要对文件夹结构进行调整。将 /src/components/input 变成 /src/components/new/input,如果使用绝对路径,只需要全局搜索替换
再加上绝对路径有全局的语义,相对路径有独立模块的语义
/src 外的文件不应该被引入
vue-cli脚手架已经帮我们做了相关的约束了,正常我们的前端项目都会有个src文件夹,里面放着所有的项目需要的资源,js, css, png, svg 等等。src 外会放一些项目配置,依赖,环境等文件
这样的好处是方便划分项目代码文件和配置文件
单页面目录结构
project
│ .browserslistrc
│ .env.production
│ .eslintrc.js
│ .gitignore
│ babel.config.js
│ package-lock.json
│ package.json
│ README.md
│ vue.config.js
│ yarn-error.log
│ yarn.lock
│
├─public
│ favicon.ico
│ index.html
│
|-- src
|-- components
|-- input
|-- index.js
|-- index.module.scss
|-- pages
|-- seller
|-- components
|-- input
|-- index.js
|-- index.module.scss
|-- reducer.js
|-- saga.js
|-- index.js
|-- index.module.scss
|-- buyer
|-- index.js
|-- index.js
多页面目录结构
my-vue-test:.
│ .browserslistrc
│ .env.production
│ .eslintrc.js
│ .gitignore
│ babel.config.js
│ package-lock.json
│ package.json
│ README.md
│ vue.config.js
│ yarn-error.log
│ yarn.lock
│
├─public
│ favicon.ico
│ index.html
│
└─src
├─apis //接口文件根据页面或实例模块化
│ index.js
│ login.js
│
├─components //全局公共组件
│ └─header
│ index.less
│ index.vue
│
├─config //配置(环境变量配置不同passid等)
│ env.js
│ index.js
│
├─contant //常量
│ index.js
│
├─images //图片
│ logo.png
│
├─pages //多页面vue项目,不同的实例
│ ├─index //主实例
│ │ │ index.js
│ │ │ index.vue
│ │ │ main.js
│ │ │ router.js
│ │ │ store.js
│ │ │
│ │ ├─components //业务组件
│ │ └─pages //此实例中的各个路由
│ │ ├─amenu
│ │ │ index.vue
│ │ │
│ │ └─bmenu
│ │ index.vue
│ │
│ └─login //另一个实例
│ index.js
│ index.vue
│ main.js
│
├─scripts //包含各种常用配置,工具函数
│ │ map.js
│ │
│ └─utils
│ helper.js
│
├─store //vuex仓库
│ │ index.js
│ │
│ ├─index
│ │ actions.js
│ │ getters.js
│ │ index.js
│ │ mutation-types.js
│ │ mutations.js
│ │ state.js
│ │
│ └─user
│ actions.js
│ getters.js
│ index.js
│ mutation-types.js
│ mutations.js
│ state.js
│
└─styles //样式统一配置
│ components.less
│
├─animation
│ index.less
│ slide.less
│
├─base
│ index.less
│ style.less
│ var.less
│ widget.less
│
└─common
index.less
reset.less
style.less
transition.less
相关推荐
- 06Ni9DR容器板,06Ni9DR钢板切割,06Ni9DR钢板规格尺寸
-
06Ni9DR容器板,06Ni9DR钢板切割,06Ni9DR钢板规格尺寸06Ni9DR是低温容器钢板,含有9%Ni的钢板,06Ni9DR因为钢板Ni含量在百分之0.9左右又被叫作9镍钢或9Ni钢,06...
- TOS5系统命令行部署Docker版网心云
-
Docker版网心云也就官主叫做容器魔方,由网心云推出的一款docker容器镜像软件,目前支持:铁威马TOS、koolshare、群晖、树莓派等支持docker的设备(arm32、aarch64、...
- 诞生比航母还早,能造的国家屈指可数
-
蒸汽弹射器是航空母舰上的飞机起飞装置,用于舰载机蒸汽弹射起飞,使用一个平的甲板作为飞机跑道。起飞时一个蒸汽驱动的弹射装置带动飞机在两秒钟内达到起飞速度。蒸气弹射器是一个非常复杂的系统工程,是由起飞系统...
- S550QL high strength steel plate、S550QL相当于国内什么材质
-
S550QLhighstrengthsteelplate、S550QL相当于国内什么材质S550QLhighstrengthsteelplate调质高屈服强度结构钢。S550QL相当于...
- 特别关注|中垂变形对VLCC油轮载货量的影响
-
VLCC油轮营运过程中,在船抵达装运港之前,船长需要计算和申报本航次的最大装货量,影响货物最大装货量的各相关因素主要有:●该轮在装货港所允许的最大吃水;●货舱舱容和油品密度;●VLCC航线通常...
- 南海车改装音响奥迪S5升级弗莱德FP-6A功放—永日汽车音响
-
奥迪S5的原车音响效果也比较普通的,其实跟其他日产国产车好不了多少,整体表现含糊不清;所以很难满足今天来的奥迪车主聆听需求,为了享受到更好的音乐,为爱车进行音响升级。奥迪S5音响升级配置:前声场:弗莱...
- 奥迪S5轿跑:354马力+3.0T奥迪进口车,落地近70万,选它还是A7?
-
前几天我们介绍了奥迪S5,今天我们拿到的是奥迪的S5,可谓是A5的性能版本,往上还有RS5,S5落地近70万,和4缸的奥迪A7同一价位,相当于2台进口A5低配的价格,而这个价位,可供选择的余地太多了...
- S5定时器与IEC定时器差异巨大,资料分散难入门,你真的懂了吗?
-
你有没有想过,小小的定时器,在工业自动化里竟然扮演着如此重要的角色?它就像一位精准的指挥家,掌控着生产线的节奏。今天,我们就来聊聊PLC编程里两种常见的定时器:S5定时器和IEC定时器。它们看起来差不...
- LOL英雄联盟S5新赛季季前赛野区入门手册
-
本文摘要:随着S5季前赛的到来,LOL各个方面都做了不小的改动,而其中改动最明显的莫过于野区,现在从各方面来带大家认识一下改版后的野区。首先是野怪的伤害有了非常大的提升并且惩戒的CD时间被提高到了一分...
- 六个重点 搞懂全新Audi A5 Coupe改在哪
-
由于Audi正式进入新一世代后的车款各个都有著令人印象深刻的亮眼表现,品牌旗下的双门轿跑车系A5Coupe的改款同样让人期待不已,也就在2016年6月3日,全新一代AudiA5以及S5终于正式的与...
- 入门级视频拍摄设备该如何选?(拍视频设备推荐性价比)
-
如今的年轻人都很热衷于视频制作,B站各种领域的up主层出不穷,而短视频领域,大家也开始倾向于使用专业的设备去拍摄。对于很多想要开启自己视频拍摄生涯的小伙伴来说,如何选择一台入门级的视频拍摄设备很关键,...
- pb管规格及用途这么多,你知道多少?
-
导语:谈到PB管,估计大家都只知其一不知其二,pb管在生活中到底扮演着什么样的角色呢?它给我们的生活带来了那些便利呢?下面让小编带领大家来一块了解pb管的奥秘!pb管的材料是聚丁烯(PB)树脂,开始工...
- Bcup S5今日开赛,Life又复出了(b05赛制)
-
由知名电竞解说BBC(直播间抖音搜索:BBC张宏圣)主办的Bcup魔兽争霸赛S5将于2024年1月3日20点正式开战。目前,S5分组已经全部出炉,下面让我们一起看下。S5最大的亮点莫过于前职业选手Li...
- 无主之地2:仍然可用的SHiFT代码(2023年1月15日)
-
兑换方式需要首先注册SHiFT账号,可以在SHiFT网站注册,也可以在游戏中注册。SHiFT网址:https://shift.gearboxsoftware.com游戏中注册:主菜单>...
- 三年LOL资深玩家,教你在S5玩转VN
-
做为一个资深的LOL玩家,我已经玩了有几年了,从12年那会就已经开始玩了。在LOL当中我最喜欢的adc就是薇恩没有之一。每次玩LOL,最后一盘必定是薇恩。在这说说个人玩VN的经验跟大家一起分享下,不认...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 基础教程 (29)
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 选择器 (30)
- CSS 轮廓 (30)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 中级教程 (30)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)