vue开发规范(命名建议)

规范目的

  • 为提高团队协作效率
  • 便于后台人员添加功能及前端后期优化维护
  • 输出高质量的文档

命名规范

  • 书写可维护的代码,而不是一次性的代码
  • 让团队中其他人看到代码一目了然
  • 让自己回顾代码方便

普通变量命名规范

  • 命名方法: 驼峰命名法
  • 命名规范:
  • 要跟需求的内容相关,比如const mySchool = "我的学校"
  • 命名是复数的时候需要加s,比如const names = new Array()

常量

组件命名规范

官方文档推荐规则

PascalCase(单词首字母大写命名)是最通用的声明约定

kebab-case(短横线分隔命名)是通用的使用约定

  • 组件名应该始终是多个单词的,根组件App除外
  • 有意义的名词、简短、具有可读性
  • 命名组训PascalCase约定
  • 公用组件以Abcd(公司名缩写简称)开头 ,如(abcdDataPicker, AbcdTable)
  • 页面内部组件以组件模块名简写为开头,Item为结尾,如(StaffBenchToChargeItem, StaffBenchAppNotArrItem)
  • 使用遵循kebab-case约定
  • 在页面中使用组件需要前后闭合,并以短线分隔
  • 导入及注册组件时,组训PasecalCase约定
  • 同时还需要注意:必须符合自定义元素规范,切勿使用保留字。

method方法命名命名规范

  • 驼峰式命名,统一使用动词或者动词+名词形式jumpPage、openCarInfoDialog
  • 请求数据的方法,以data结尾getListData、 postFormData
  • init、refresh单词除外
  • 尽量使用常用单词开头(set、get、go、can、has、is)
  • 附:函数方法常用的动词

get 获取/set 设置,

add 增加/remove 删除

create 创建/destory 移除

start 启动/stop 停止

open 打开/close 关闭,

read 读取/write 写入

load 载入/save 保存,

create 创建/destroy 销毁

begin 开始/end 结束,

backup 备份/restore 恢复

import 导入/export 导出,

split 分割/merge 合并

inject 注入/extract 提取,

attach 附着/detach 脱离

bind 绑定/separate 分离,

view 查看/browse 浏览

edit 编辑/modify 修改,

select 选取/mark 标记

copy 复制/paste 粘贴,

undo 撤销/redo 重做

insert 插入/delete 移除,

add 加入/append 添加

clean 清理/clear 清除,

index 索引/sort 排序

find 查找/search 搜索,

increase 增加/decrease 减少

play 播放/pause 暂停,

launch 启动/run 运行

compile 编译/execute 执行,

debug 调试/trace 跟踪

observe 观察/listen 监听,

build 构建/publish 发布

input 输入/output 输出,

encode 编码/decode 解码

encrypt 加密/decrypt 解密,

compress 压缩/decompress 解压缩

pack 打包/unpack 解包,

parse 解析/emit 生成

connect 连接/disconnect 断开,

send 发送/receive 接收

download 下载/upload 上传,

refresh 刷新/synchronize 同步

update 更新/revert 复原,

lock 锁定/unlock 解锁

check out 签出/check in 签入,

submit 提交/commit 交付

push 推/pull 拉,

expand 展开/collapse 折叠

start 开始/finish 完成

enter 进入/exit 退出,

abort 放弃/quit 离开

obsolete 废弃/depreciate 废旧,

collect 收集/aggregate 聚集

views 下的文件命名

  • 只有一个文件的情况下不会出现文件夹,而是直接放在views目录下面,如index.vue
  • 尽量是名词,且使用驼峰命名法
  • 开头的单词就是所属模块名字(workbenchIndex、workbenchList、workbenchEdit)
  • 名字至少两个单词(workbenchIndex)

props命名

  • 在声明prop的时候,其命名应该始终使用camelCase,而在模板中应该始终使用kebab-case
  • 例外情况
  • 作用域不大临时变量可以简写,比如: str,num,bol,obj,fun,arr
  • 循环变量可以简写,比如: i,j,k等

结构化规范

目录文件夹及文件规范

  • 以下统一管理处均对应相应模块
  • 以下全局文件文件均以index.js导出,并在main.js中导入
  • 以下临时文件,在使用后,接口已经有了,发布后清除

src                               源码目录

|-- api                             接口,统一管理

|-- assets                           静态资源,统一管理

|-- components                       公用组件,全局文件

|-- filters                         过滤器,全局工具

|-- icons                           图标,全局资源

|-- datas                           模拟数据,临时存放

|-- lib                             外部引用的插件存放及修改文件

|-- mock                             模拟接口,临时存放

|-- router                           路由,统一管理

|-- store                           vuex, 统一管理

|-- views                         视图目录

|   |-- staffWorkbench               视图模块名

|   |-- |-- api                     需要就近维护的接口文件夹

|   |-- |-- index.vue               模块入口页面

|   |-- |-- indexComponents         模块页面级组件文件夹

|   |-- |-- components               模块通用组件文件夹

文件基本结构

<template>
   <div>
     <!--必须在div中编写页面-->
   </div>
 </template>
 <script>
   export default {
     components : {
    },
     data () {
       return {
      }
    },
     mounted() {
    },
     methods: {
    }
  }
 </script>
 <!--声明语言,并且添加scoped-->
 <style lang="scss" scoped>
 </style>

多个特性的元素规范

  • 对个特性的原酸应该分行撰写,每行一个特性
Vue Logo

<img
 src="https://vuejs.org/images/logo.png"
 alt="Vue Logo"

<my-component
 foo="a"
 bar="b"
 baz="c"

元素特征的顺序

  • 原生属性放前面,指令放后面,也可以按照统一的格式化规则进行格式化
  • class
  • id,ref
  • name
  • data-*
  • src, for, type, href,value,max-length,max,min,pattern
  • title, alt,placeholder
  • aria-*, role
  • required,readonly,disabled
  • is
  • v-for
  • key
  • v-if
  • v-else-if
  • v-else
  • v-show
  • v-cloak
  • v-pre
  • v-once
  • v-model
  • v-bind,:
  • v-on,@
  • v-html
  • v-text
  • v-once

组件选项顺序

  • components
  • props
  • data
  • computed
  • created
  • mounted
  • metods
  • filter
  • watch

注释规范

  • 代码注释在项目的后期维护中非常重要,所以每一个被复用的组件都应该有编写组件的使用说明,为组件中每一个方法编写方法说明

务必添加注释列表

  • 公共组件使用说明

  • 各组件中重要函数或者类说明

  • 复杂的业务逻辑处理说明

  • 特殊情况的代码处理说明,对于代码中特殊用途的变量、存在的临界值、函数中使用的hack、使用了某种算法或者思路等需要进行注释描述

  • 多重if判断语句

  • 注释块必须以/**(至少两个星号)开头**/

  • 单行注释使用//

单行注释

  • 注释单独一行。不要在代码后同一行内加注释

多行注释

组件使用说明,和调用说明

/**
    * 组件名称
    * @module 组件存放位置
    * @desc 组件描述
    * @author 组件作者
    * @date 2017年12月05日17:22:43
    * @param {Object} [title]   - 参数说明
    * @param {String} [columns] - 参数说明
    * @example 调用示例
    *
    **/

编码规范

  • 统一的编码规范,可使代码更易于阅读,易于理解,易于维护

源码风格

使用ES6风格编码

  • 定义变量使用let,定义常量使用const
  • 静态字符串一律使用单引号或反引号,动态字符串使用反引号
  • 解构赋值
  • 数组成员对变量赋值是,优先使用解构赋值
  • 函数的参数如果是对象的成员,优先使用解构赋值
  • 拷贝数组:使用(...)拷贝数组const itemsCopy = [...items]
  • 使用箭头函数
  • 模块
  • 如果模块只有一个输出值,就用export default,如果模块有多个输出值,就不使用export default,export default与普通的export不要同时使用
  • 如果模块默认输出一个函数,函数名的首字母应该小写
  • 如果模块默认输出一个对象,对象名的首字母应该大写

指令规范

  • 指令有缩写一律采用缩写形式
  • v-for循环必须有key
  • 避免v-if和v-for同时出现在一个元素上
  • 解决方案1:将数据替换为一个计算属性,让其返回过滤后的列表
  • {{ user.name }}
  • {{ user.name }}
  • 解决方案2:将v-if移动至容器元素上

Props规范

  • props定义应该尽量详细

其他

  • 避免this.$parent
  • 组件必须相互保持独立,Vue 组件也是。如果组件需要访问其父层的上下文就违反了该原则。
  • 如果一个组件需要访问其父组件的上下文,那么该组件将不能在其它上下文中复用。
  • 调试信息console.log()debugger使用完及时删除
  • 除了三目运算,if, else等禁止简写

CSS 规范

通用规范

  • 统一使用"-"连字符
  • 省略值为0的单位
  • 如果CSS可以做到,就不要用JS
  • 建议适当缩写
  • 声明应该按照下表左到右,上到下的顺序
显示属性 自身属性 文本属性和其他修饰
display width font
visibility height text-align
position margin text-decoration
float padding vertical-align
clear border white-space
list-style overflow color
top min-width background
  • 元素选择器应该避免在scoped中出现
  • 分类的命名方法:使用单个字母加上"-"为前缀
  • 布局(grid) (.g-)
  • 模块(module) (m-)
  • 元件(unit) (.u-)
  • 功能(function) (.f-)
  • 皮肤(skin) (.s-)
  • 状态 (.z-)
  • 统一语义理解和命名
  • 布局(.g-)
语义 命名 简写
文档 doc doc
头部 head hd
主体 body bd
尾部 foot ft
主栏 main mn
主栏子容器 mainc mnc
侧栏 side sd
侧栏子容器 sidec sdc
盒容器 wrap/box wrap/box
  • 模块 (.m-)、元件(.u-)
语义 命名 简写
导航 nav nav
子导航 subnav snav
面包屑 crumb crm
菜单 menu menu
选项卡 tab tab
标题区 head/title hd/tt
内容区 body/content bd/ct
列表 list lst
表格 table tb
表单 form fm
热点 hot hot
排行 top top
登陆 login log
标志 logo logo
广告 advertise ad
搜索 search sch
幻灯 slide sld
提示 tips tips
帮助 help help
新闻 news news
下载 download dld
注册 regist reg
投票 vote vote
版权 copyright cprt
结果 result rst
标题 title tt
按钮 button btn
输入 input ipt
  • 功能(.f-)
语义 命名 简写
浮动清除 clearboth cb
向左浮动 floatleft fl
向右浮动 floatright fr
内联块级 inlineblock ib
文本居中 textaligncenter tac
文本居右 textalignright tar
文本居左 textalignleft tal
垂直居中 verticalalignmiddle vam
溢出隐藏 overflowhidden oh
完全消失 displaynone dn
字体大小 fontsize fs
字体粗细 fontweight fw
  • 皮肤(.s-)
语义 命名 简写
字体颜色 fontcolor fc
背景 background bg
背景颜色 backgroundcolor bgc
背景图片 backgroundimage bgi
背景定位 backgroundposition bgp
边框颜色 bordercolor bdc
  • 状态(.z-)
语义 命名 简写
选中 selected sel
当前 current crt
显示 show show
隐藏 hide hide
打开 open open
关闭 close close
出错 error err
不可用 disabled dis

特殊规范

  • 对用页面级组件样式,应该是有作用域的
  • 对于公用组件或者全局组件库,我们应该更倾向于选用基于class的BEM策略
posted @ 2021-09-29 11:40  飞天小毛驴404  阅读(546)  评论(0)    收藏  举报