前端同学开发中应该知道的命名规范

Posted 嘴巴嘟嘟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端同学开发中应该知道的命名规范相关的知识,希望对你有一定的参考价值。

根据个人阅读官网中的风格指南,整理在实际开发中常用的命名规范,希望可以帮助大家。

1、项目文件命名

代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式也要避免采用,杜绝完全不规范的缩写。

1.1 项目名

全小写_隔开 my_project_name

1.2 目录名

全小写,参照项目命名规则,有复数结构时,要采用复数命名法。例:docs、assets、components、directives、mixins、utils、views

my_project_name/
|- docs           // 项目的细化文档目录(可选)
|- node_modules   // 下载的依赖包
|- public         // 静态页面目录
    |- index.html // 项目入口
|- src            // 源码目录
    |- api        // http 请求目录
    |- assets     // 静态资源目录,这里的资源会被wabpack构建
        |- icon   // icon 存放目录
        |- img    // 图片存放目录
        |- js     // 公共 js 文件目录
        |- scss   // 公共样式 scss 存放目录
            |- frame.scss   // 入口文件
            |- global.scss  // 公共样式
            |- reset.scss   // 重置样式
    |- components     // 组件
    |- plugins        // 插件
    |- router         // 路由     
        |- index.js   // 详细的路由拆分目录(可选)
    |- store          // 全局状态管理
    |- utils          // 工具存放目录
        |- request.js // 公共请求工具
    |- views          // 页面存放目录
    |- App.vue        // 根组件
    |- main.js        // 入口文件
    |- tests          // 测试用例
    |- .browserslistrc// 浏览器兼容配置文件
    |- .editorconfig  // 编辑器配置文件
    |- .eslintignore  // eslint 忽略规则
    |- .eslintrc.js   // eslint 规则
    |- .gitignore     // git 忽略规则
    |- babel.config.js // babel 规则
    |- Dockerfile // Docker 部署文件
    |- jest.config.js
    |- package-lock.json
    |- package.json // 依赖
    |- README.md // 项目 README
    |- vue.config.js // webpack 配置

1.3 图像文件名

全部采用小写方式, 优先选择单个单词命名,多个单词命名以下划线分隔。例如:banner_sina.gif

1.4 HTML 文件名

全部采用小写方式, 优先选择单个单词命名,多个单词命名以下划线分隔或者驼峰命名。

1.5 CSS 文件名

全部采用小写方式, 优先选择单个单词命名,多个单词命名以短横线分隔或者驼峰命名。

1.6 javascript 文件名

全部采用小写方式, 优先选择单个单词命名,多个单词命名以短横线分隔或者驼峰命名。

2、 Vue 组件命名

vue 方法放置顺序

(1)components

(2)props

(3)data

(4)created

(5)mounted

(6)activited

(7)update

(8)beforeRouteUpdate

(9)metods

(10)filter

(11)computed

(12)watch

method 自定义方法命名

(1)动宾短语(good:jumpPage、openCarInfoDialog)(bad:go、nextPage、show、open、login)

(2)ajax 方法以 get、post 开头,以 data 结尾(good:getListData、postFormData)(bad:takeData、confirmData、getList、postForm)

(3)事件方法以 on 开头(onTypeChange、onUsernameInput)

(4)init、refresh 单词除外

(5)尽量使用常用单词开头(set、get、open、close、jump)

(6)驼峰命名(good: getListData)(bad: get_list_data、getlistData)

自定义事件
自定义事件应始终使用 kebab-case 的事件名。

不同于组件和 prop,事件名不存在任何自动化的大小写转换。而是触发的事件名需要完全匹配监听这个事件所用的名称。

this.$emit('my-event')
<MyComponent @my-event="handleDoSomething" />

事件方法
命名方法:camelCase
命名规范:handle + 名称(可选)+ 动词

2.1 单文件组件名

文件扩展名为.vue的single-file components(单文件组件)。单文件组件名应该始终是单词大写开头 (PascalCase)。

components/
|- MyComponent.vue

2.2 单例组件名

只拥有单个活跃实例的组件应该以 The 前缀命名,以示其唯一性。

这不意味着组件只可用于一个单页面,而是_每个页面_只使用一次。这些组件永远不接受任何 prop,因为它们是为你的应用定制的。如果你发现有必要添加 prop,那就表明这实际上是一个可复用的组件,_只是目前_在每个页面里只使用一次。

比如,头部和侧边栏组件几乎在每个页面都会使用,不接受 prop,该组件是专门为该应用所定制的。

components/
|- TheHeading.vue
|- TheSidebar.vue

2.3 基础组件名

基础组件:不包含业务,独立、具体功能的基础组件,比如日期选择器、模态框等。这类组件作为项目的基础控件,会被大量使用,因此组件的 API 进行过高强度的抽象,可以通过不同配置实现不同的功能。

应用特定样式和约定的基础组件(也就是展示类的、无逻辑的或无状态、不掺杂业务逻辑的组件) 应该全部以一个特定的前缀开头 —— Base。

基础组件在一个页面内可使用多次,在不同页面内也可复用,是高可复用组件。

components/
|- BaseButton.vue
|- BaseTable.vue
|- BaseIcon.vue

2.4 业务组件

业务组件:它不像基础组件只包含某个功能,而是在业务中被多个页面复用的(具有可复用性),它与基础组件的区别是,业务组件只在当前项目中会用到,不具有通用性,而且会包含一些业务,比如数据请求;而基础组件不含业务,在任何项目中都可以使用,功能单一,比如一个具有数据校验功能的输入框。

掺杂了复杂业务的组件(拥有自身 data、prop 的相关处理)即业务组件应该以 Custom 前缀命名。

业务组件在一个页面内比如:某个页面内有一个卡片列表,而样式和逻辑跟业务紧密相关的卡片就是业务组件。

components/
|- CustomCard.vue

2.5 紧密耦合的组件名

和父组件紧密耦合的子组件应该以父组件名作为前缀命名。
因为编辑器通常会按字母顺序组织文件,所以这样做可以把相关联的文件排在一起。

components/
|- TodoList.vue
|- TodoListItem.vue
|- TodoListItemButton.vue

2.6 组件名中单词顺序

组件名应该以高级别的 (通常是一般化描述的) 单词开头,以描述性的修饰词结尾。

因为编辑器通常会按字母顺序组织文件,所以现在组件之间的重要关系一目了然。如下组件主要是用于搜索和设置功能。

components/
|- SearchButtonClear.vue
|- SearchButtonRun.vue
|- SearchInputQuery.vue
|- SearchInputExcludeGlob.vue
|- SettingsCheckboxTerms.vue
|- SettingsCheckboxLaunchOnStartup.vue

2.7 完整单词的组件名

组件名应该倾向于完整得单词而不是缩写。

编辑器中的自动补全已经让书写长命名的代价非常之低了,而其带来的明确性却是非常宝贵的。不常用的缩写尤其应该避免。

3 代码参数命名

3.1data props 方法注意点

在声明 prop 的时候,其命名应该始终使用 camelCase,而在模板和 JSX 中应该始终使用 kebab-case。

(1)使用 data 里的变量时请先在 data 里面初始化

(2)props 指定类型,也就是 type

(3)props 改变父组件数据 基础类型用 $emit ,复杂类型直接改

(4)ajax 请求数据用上 isLoading、isError 变量

(5)不命名多余数据,现在是详情页、你的数据是 ajax 请求的,那就直接声明一个对象叫 d,而不是每个字段都声明

(6)表单数据请包裹一层 form

生命周期方法注意点

(1)不在 mounted、created 之类的方法写逻辑,取 ajax 数据,

(2)在 created 里面监听 Bus 事件

3.2 router

Vue Router Path 命名采用 kebab-case 格式。 用 Snake(如:/user_info)或 camelCase(如:/userInfo)的单词会被当成一个单词,搜索引擎无法区分语义。

// bad

  path: '/user_info', // user_info 当成一个单词
  name: 'UserInfo',
  component: UserInfo,
  meta: 
    title: ' - 用户',
    desc: ''
  
,

// good

  path: '/user-info', // 能解析成 user info
  name: 'UserInfo',
  component: UserInfo,
  meta: 
    title: ' - 用户',
    desc: ''
  
,

3.2 变量、常量、方法

变量

  • 命名方法:camelCase 命名规范:
  • 类型 + 对象描述或属性的方式
// bad
var getTitle = "LoginTable"

// good
let tableTitle = "LoginTable"
let mySchool = "我的学校"

常量

命名方法:全部大写下划线分割
命名规范:使用大写字母和下划线来组合命名,下划线用以分割单词

const MAX_COUNT = 10
const URL = 'http://test.host.com'

方法

  • 命名方法:camelCase
  • 命名规范:统一使用动词或者动词 + 名词形式
// 1、普通情况下,使用动词 + 名词形式
// bad
go、nextPage、show、open、login

// good
jumpPage、openCarInfoDialog

// 2、请求数据方法,以 data 结尾
// bad
takeData、confirmData、getList、postForm

// good
getListData、postFormData

// 3、单个动词的情况
init、refresh

暂时总结到这里,如果需要更详细还请需要看vue官方文档 风格指南

以上是关于前端同学开发中应该知道的命名规范的主要内容,如果未能解决你的问题,请参考以下文章

前端同学开发中应该知道的命名规范

前端开发规范-一般规范

前端规范一(命名规范)

前端开发效率提高之代码规范篇

js命名规则

前端开发代码规范