前言
命名规范是为了提高代码的可读性和维护性
命名规则
一般用小写英文 、 数字、 - 这些字符,命名最好是通用英文,尽量不用或者少用拼音。
项目命名
全部采用小写方式, 以中划线分隔。
例:element-plus, ant-design, vue3-vite-admin
目录结构命名
目录结构的命名应语义清晰,一目了然。在常见的命名规范中,我建议采用短横线命名(Kebab Case),全部以小写的形式在目录中展示出来,更具有直观性。在团队中保持统一,提高一致性和可读性,不要几种命名方式混着用
- 全部采用小写方式
- 单词语义明确,严禁使用拼音与英文混合的方式
- 多个单词使用短横线分隔,建议不超过3个单词
- 目录结构层级,建议不超过4层
src 源码目录
|-- api 所有 API 接口
|-- assets 静态资源,包括 images、icons、styles 等
|-- components 公共组件
|-- table table公用组件
|-- index.vue table入口文件
|-- base-search.vue 搜索组件
|-- base-table.vue table组件
|-- base-pagination.vue 分页组件
|-- config 配置信息
|-- router 路由,统一管理
|-- views 视图目录
|-- role role 模块
|-- components role 模块通用组件文件夹
|-- role-list.vue role 列表页面
|-- role-add.vue role 新建页面
|-- role-update.vue role 更新页面
|-- common role 模块通用工具方法
|-- api.ts 业务api
|-- hooks.ts 业务hooks
|-- employee employee 模块
...
业务目录命名
首先在结构上要划分好,组件统一放在components文件下,此组件用到的公用的工具方法放在common或者shared下,不要全部放在一个目录下,导致混乱,打开目录,应一目了然
有时候不明确哪些工具方法需要提到全局的hook/utils/api,我的建议是在写的时候先放置在当前组件目录下,如果后续在其他组件再使用到这个方法,再考虑提到全局的公用目录,写一个不常用,且关联性不强的代码在公用目录,公用文件和方法多了之后,你就知道这是对公用代码的一种污染
|- 组件目录
|- components 组件
|- xxx.vue 业务组件
|- common 该组件下的工具方法
|- hooks.ts
|- utils.ts
|- config.ts
|- types.ts
|- constants.ts
|- api.ts
为什么api.ts业务接口请求不是放在公共api目录下,而是推荐放在业务代码目录下? 我们看大部分的前端开源管理系统项目的api接口请求都是放在公共的api目录下, 但是在业务越来越复杂的项目中,api目录可变得非常庞大,难以维护,出现以下情况:
- api目录下的业务api请求ts文件过于庞大,如果文件夹语意不明确,根本无法知道是属于哪个业务的
- api目录下的业务api请求js,正常情况都是与业务紧密关联的,统一放在API目录下降低了代码的可读性
单独放在业务目录下的好处:
方便跳转,在该业务目录下即可直达业务api请求ts文件,方便维护
我在A业务目录下就能找到A业务的接口文件,随时修改,虽然vscode提供方便的跳转,但是如果开发到一半,整个业务不做了,或者该业务废弃,那剔除业务代码是很方便的,删掉该目录即可
api接口与业务联系更紧密,提高了代码可读性
组件名称的命名
以Vue为例,组件名建议始终由多个单词组成,这样做可以避免与现有和未来的 HTML 元素冲突,因为所有 HTML 元素名称都是由单个单词组成的。
官方有两种推荐的命名方式,大驼峰(PascalCase)以及短横线(kebab-case),因为在使用上,PascalCase是兼容kebab-case命名的,大多数人,在目录结构上会使用PascalCase,但是我认为应该要保持目录结构的统一性和直观性,应该使用kebab-case命名,为了解决使用上的兼容性,我们可以在组件的name配置上使用PascalCase作为组件名
// vue2
export default {
name: 'TodoItem'
};
// vue3
defineOptions({
name:'TodoItem',
})
1. 紧密耦合的组件名称:
与其父组件紧密耦合的子组件应包含父组件名称作为前缀。 命名规则: 父组件名称+子组件名称
好处:
关系更紧密,通过看组件名即可知道2个组件的联系
编辑器友好,例如VsCode,通常按字母顺序组织文件,因此这也使这些相关文件彼此相邻;
components/
|- todo-list.vue
|- todo-list-item.vue
|- todo-list-item-button.vue
|- user-profile-options.vue (完整单词)
- 紧密耦合的组件名称
与其父组件紧密耦合的子组件应包含父组件名称作为前缀。 命名规则: 父组件名称+子组件名称
好处:
关系更紧密,通过看组件名即可知道2个组件的联系
编辑器友好,例如VsCode,通常按字母顺序组织文件,因此这也使这些相关文件彼此相邻;
components/
|- todo-list.vue
|- todo-list-item.vue
|- todo-list-item-button.vue
|- user-profile-options.vue (完整单词)
2. index入口文件的使用场景
在工作遇到index入口文件滥用的情况,简单分析下使用场景
- 集中管理的
utils/styles,方便使用及导出 - 封装公用的组件,使用
index.vue作为入口文件