前端开发规范

107 阅读5分钟

命名规范

文件目录规范

  
    ├── node_modules # npm包依赖目录  
    ├── public # 公共资源目录  
    │   ├── favicon.ico # 网站标签图标  
    │   └── index.html # 项目页面入口  
    ├── src  
    │   ├── api `*` # 接口层目录  
    │   ├── assets # 项目资源目录  
    │   │ └── typhoon `*` # 按业务模块存放资源  
    │   ├── components # 共用组件目录  
    │   ├── plugins `*` # 插件目录  
    │   ├── config `*` # 文件配置文件存放路径  
    │   ├── store # vuex相关模块目录  
    │   │ ├── modules `*` # 模块文件夹  
    │   │ │  └── typhoon-map.js  #独立的子模块  
    │   │ └── index.js `*` # store模块主入口  
    │   ├── style `*`  # 公共样式目录  
    │   ├── utils `*` # 基础工具类目录  
    │   ├── views `*、L` # 业务模块目录  
    │   │ ├── typhoon `*` # 台风模块,复杂的模块可以单独一个文件夹  
    │   │ │  ├── index.js  
    │   │ │  ├── typhoon-path.vue  
    │   │ │  └── typhoon-map.vue  
    │   │ └── base-login.vue `*` # 登录模块,简单的模块可独立一个vue文件  
    │   ├── App.vue # 开发环境vue主入口  
    │   ├── main.js # 开发环境js主入口  
    │   ├── router.js # 路由主入口  
    │   └── store.js # vuex主入口  
    ├── CHANGELOG.md `*` # 更新日志  
    ├── index.js `*` # npm包主入口  
    ├── README.md # 文档描述  
    ├── babel.config.js # babel配置文件  
    ├── package-lock.json # npm依赖描述文件  
    └── package.json # npm包描述文件  
  

变量命名规范

1. 驼峰式代码规范:一般是功能+名词+修饰词,如:addUserDetail AddUserInfo

2. 常量命名一般用大写字母加下划线,如:

  
    const MAX_NUMBER = 100  
  
    const URL = 'https://'  

3. 短横杠命名(kebab-case)规范: 如:add-user-item

4. 项目中尽可能规避单点store使用(指的是没有多处公用状态),父子组件用组件通讯,多路由共用数据或通讯推荐使用store进行管理

5. 组件中引用文件尽量减少引用到文件级别(如:import(xx.js)改为import(xx)

6. localstorage命名尽量用(项目名-目录-名称)

组件命名规范

.vue 文件命名
my-component.vue或者Content.vue(只有一个单词的组件名称用大驼峰命名)
vue组件引用
import MyComponent from './my-component.vue'
import MyUtil from './my-util.js'
vue内部组件注册
components: { MyComponent }
Vue.components('my-component', MyComponent)
template标签引用
<my-component></my-component>
render中使用<my-component />
props参数定义
data:{type:Number,default:1}尽量定义类型和默认值

样式命名规范

- 样式均采用短横杠命名+下划线形式(父容器采用短横杠命名),项目基本使用scss语法构建,在.vue文件下独立的组件均用scoped隔开,所有名称禁止用aa,bb之类的,尽量语义化

    // 页面元素  
    <div class="typhoon-title">20190101 利奇马<span class="typhoon-title__close">点此关闭</span></div>  
    // 样式元素  
    <style lang="scss" scoped></style>  

组件内methods方法命名规范

- 组件内方法均采用驼峰式命名,有与页面进行交互的需要用交互方式开头区分开,如

    function addUserDetail(){}       // 表示程序主动添加用户详情操作  
  
    function tapAddUserDetail(){}    // 表示用户点击添加用户详情操作  

- 方法尽量带有备注,如需传参、返回数据提供调用需说明传参类型和返回类型,如:

    // 项目初始化,主要用在xxx  
    function init(){  
    xxx  
    }  
    /*  
     * @param id 用于获取数据的id: 1000  
     * @returns {Object}  返回带用户信息的对象{age,name}  
     */  
    function getUserConfig(id){  
    xxx  
    return {age:1,name:"xx"}  
    }  

vuex内部构造命名规范

stateuserInfo
gettersgetUserInfo()
mutationssomeMutation()
actionsincrementAsync()

自定义开放功能配置(由于目前存在下划线和驼峰混用,故尚未定下规范)

- 该模块主要是配合运维配置不同的系统功能项目,常常开放json文件或在index.html文件中开放配置
- 对象名遵循大驼峰式命名规则,如配置出口对象形式配置,尽可能减少对象嵌套层级,

  
    var UserConfig = {  
        userInfo:{  
            age:1,  
            imgUrl:"https://",          
            nameConfig:{  
                name:"张三",  
                enName:"zs"  
            }  
        }  
    }   
  

##常用规范

html规范

1. 语义化标签

2. 使用表达式

在模版中使用表达式,复杂情况使用计算属性或函数,如下:

  
    <template>  
        <div v-show="getLimitData(data)">   
        ...   
        </div>  
    </template>  
      
    // 反例  
    <template>   
        <div v-show="data.type !== 'dir' && dzqz && hasBtn && attrs.mode !== 'ended'">   
        ...   
        </div>   
    </template>  
  

3.活用v-show, v-if (不要同时出现在一个标签上)

4.避免重复

避免过多重复代码,如果超过三行类似的代码,配置数据再循环遍历

css规范

1. 避免使用标签选择器。因为在 Vue 中,特别是在局部组件,使用标签选择器效率特别低,损耗性能,建议需要的情况,直接定义 class

2. 非特殊情况下,禁止使用 ID 选择器定义样式。有 JS 逻辑的情况除外

3. 避免使用important选择器

4. 避免大量的嵌套规则,控制在3级之内,对于超过4级的嵌套,考虑重写或新建子项

5. 避免使用ID选择器及全局标签选择器防止污染全局样式

6. 提取公用样式进assets文件styles里,按模块/功能区分

  
    |assets  
    |-- styles  
    | |-- common 放置公用样式,如重置,混合,复写element样式等   
    | |-- modules 放置模块样式  
  
  

7. 推荐使用直接子选择器

  
    /* 推荐 */   
    .jdc {}   
    .jdc li {}   
    .jdc li p{}  
      
    /* 不推荐 */   
    *{}   
    #jdc {}   
    .jdc div{}  
  

8. 使用 scoped 关键字,约束样式生效的范围

9. 使用变量 可复用属性尽量抽离为页面变量,易于统一维护


    /* scss */    
    $color: red;   
    .class-namecolor: $color;  
        border-color: $color;   
    } 

10. 样式覆盖


组件内部需要覆盖UI框架样式,必须在最外层组件加类名

11. class命名以小写字母开头,小写字母、中划线和数字组成。不建议使用驼峰法命名 class 的属性

###js规范

1. 优先考虑三目运算符,不写超过3层的三目运算符

2. 增删查改,详情统一使用如下 5 个单词

add / update / delete / detail / get 

3. 尽量使用es6语法精简代码

4. 超过3层的if或者for尽量抽离公用方法

5. 使用有意义,可读性好的变量名

  
        反例:  
        var yyyy = moment().format('YYYY/MM/DD');  
          
        正例:  
        var yearMonthDay = moment().format('YYYY/MM/DD');