vue项目规范

## 规范内容

- 命名规范:规范项目中的各类命名,保持项目命名格式统一化

- 目录规范:规范项目中的目录结构,保持项目结构统一化

- 注释规范:规范项目中代码的注释,类注释,方法注释以及其他文件注释

- 项目配置:严格控制项目配置,不可随意改动

## 命名规范

项目中的基本命名说明如下,请仔细查看

| name           | 例子        |

| -------------- | ----------- |

| `中线命名法`   | hello-world |

| `下划线命名法` | hello_world |

| `小驼峰命名法` | helloWorld  |

| `大驼峰命名法` | HelloWorld  |

### 1. 组件

`大驼峰命名`(index.vue除外)

```

|- List.vue

|- ListTabs.vue

|- Detail.vue

|- DetailFrom.vue

|- index.vue

```

### 2. 文件夹,js、css、less、html、图片文件

`中线命名法`

> 请根据功设置命名前缀

例:

```

|- collaborative-disposal             // 文件夹

|   |- static                        

|   |   |- images                    

|   |   |   |- event-accident.png     // 图片

|   |   |   |- event-build.png

|   |   |   |- event-flow.png

|   |   |- styles

|   |   |   |- event-list.less        // less

|   |- lib                    

|   |   |- event-list.js              // js

|   |- index.html                     // html

|   |- event-list.html

```

### 3. Class 类名

`大驼峰命名法`

```

class DemoSdk {}

```

### 4. html 属性

- class: `中线命名法`

- id: `中线命名法`

- ref: `小驼峰命名`

> class 请根据页面布局,功能模块命名

```

<div class="layout-wrapper">

  <!-- 头部 -->

  <header class="layout-header" ref="layoutHeader"></header>

  <!-- 主内容 -->

  <main class="layout-main" id="main">

  </main>

  <!-- 底部 -->

  <footer class="layout-footer"></footer>

</div>

```

> 大家请善用HTML5的语义标签,增加代码可读性。[查看](https://www.w3school.com.cn/tags/index.asp)

### 5. router 路由定义

`中线命名法`

> 路由定义可根据页面模块文件命名来定义,这样清晰明了,一一对应

```

{

    path: '/base-component',

    name: 'base-component',

    component: () => import( /* webpackChunkName: "mv-map-component" */ '@/views/mv-map/doc-views/base-component'),

    children: [{

        path: 'mv-map',

        name: 'mv-map',

        component: () => import('@/views/mv-map/doc-views/base-component/mv-map')

    }, {

        path: 'mv-map-icon',

        name: 'mv-map-icon',

        component: () => import('@/views/mv-map/doc-views/base-component/mv-map-icon')

    }]

}

```

### 6. 配置项, 常量

`纯大写 下划线命名法`

```

const TITLE: 'microvideo',

const TOKEN_KEY: 'mv-',

```

> 常量请用 const定义

### 7. vue全局挂载

`以$为前缀,小驼峰命名`

```

 Vue.prototype.$localStorage = localStore

```

### 8. 函数,方法

- 命名方法: 小驼峰式命名法

- 命名规范: 前缀应该为动词

- 命名建议: 常用动词约定

> 以下列出了常用动词约定,有该场景的请用其前缀,在业务场景简单时,可以直接使用该动词命名方法

| 动词   | 含义                   |

| ------ | ---------------------- |

| can    | 判断是否可执行某个动作 |

| has    | 判断是否含义某个值     |

| is     | 判断是否为某个值       |

| get    | 获取某个值             |

| set    | 设置某个值             |

| init   | 初始化操作             |

| handle | 点击操作触发           |

| load   | 加载某些数据           |

| add    | 添加操作               |

| del    | 删除操作               |

| clear  | 清空操作               |

| change | 变化操作               |

| edit   | 编辑操作               |

| update | 更新操作               |

```

/**

 * 初始化

 */

init() {}

/**

 * 获取数据

 */

getData() {}  


 

/**

 * 点击重置

 */

handleReset() {}

```

## 目录

> 这里针对src以下目录进行规范说明

### api

> 接口配置文件夹

- 请根据业务模块建文件夹,以业务名命名

### components

- 公共组件请放在这里,按照功能划分文件夹

- 对于复杂的组件,模块下可以分子模块,需配置index.js安装入口

已mv-map 组件为例

```

|- mv-map

|  |- components     子组件 文件夹

|  |- config         配置 文件夹

|  |- lib            库 文件夹

|  |- static         资源 文件夹

|  |   |- images     图片 文件夹

|  |   |- styles     样式 文件夹

|  |- index.js       入口文件

```


 

### views

- 按业务模块路由在views划分文件夹

- 每个模块文件夹设有index.vue入口文件,components 业务组件, page 页面

```

|- module                    模块 文件夹

|  |- controls               控件(该模块下独有控件) 文件夹

|  |- pages                  子页面 文件夹

|  |   |- list               列表 页面

|  |   |  |- ListTop.vue     列表头部

|  |   |  |- index.vue       列表 入口

|  |   |- Detail.vue         详情 页面

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

```

#### module/index.vue 入口页面的要求

> 当该模块下需要index.vue来划分页面进入子路由时,请创建index.vue;反之无需创建index.vue

1. 作为同级pgaes里相应子页面的引入入口文件,可放置多个router-view标签搭建页面(以[命名视图](https://router.vuejs.org/zh/guide/essentials/named-views.html)实现)

2. 可以根据权限、业务等维度对页面引入加以条件筛选

3. index.vue只围绕子页面的引入与不引入、显示与不显示,包含布局

#### module/pages 子页面的要求

1. 所有模块的子页面都对应一个路由地址,都是由路由引入显示

2. 页面的组件拆分需要根据业务,不能只根据UI设计拆分


 

#### module/controls 子控件的要求

1. 必须有数据输入,不可以自己产生数据,只负责展示

2. 所有交互不能具有业务属性,若设计业务属性,需要通过事件暴露


 

### router

```

|- router                    路由

|  |- modules                路由模块 文件夹

|  |   |- module1.js         模块1 路由配置

|  |   |- module2.js         模块1 路由配置

|  |- index.js               路由配置入口文件

```

### store

```

|- store                     vuex管理

|  |- modules                vuex 子模块

|  |   |- module1.js         模块1

|  |   |- module2.js         模块1

|  |- index.js               vuex入口文件

```

## 注释规范

两类注释

1. 多行注释

```

/**

* 基本说明

* @author 作者名

* @date   时间:2022/2/23

*/

```

2. 单行注释

```

// 基本说明

```

### 多行注释

- 文件顶部注释

```

 /**

  * 文件功能的基本说明

  * @author 作者名

  * @date   时间

  */

```

- 方法、Class类注释

> 方法需要说明、入参、出参(类型和含义)

```

<!-- 场景1 方法注释 -->

/**

 * 获取cookie  

 * @param {String} key 键

 * @returns {String} 值

 */

function getCookie (key) {}

<!-- 场景2 Class注释 -->

/**

 * 事件相关的sdk

 */

class EventSdk {

    /**

     * 构造函数

     * @param {String} 事件id

     */

    constructor (id) {}

   

    /**

     * 初始化

     */

    init () {}

}

<!-- 场景3 修改他人文件方法时 -->

/**

 * 方法的基本说明

 * @update 小明 2022/2/23

 *         修改的基本说明

 */

```

### 单行注释

- 方法里 多个逻辑模块 空格分隔并单行注释说明

```

function init () {

  // 重置表单

  resetForm()

  // 获取列表

  getList()

}

```

- 若有多个单行代码后面的注释 请保持统一列 格式化

```

let object = {

  name:'',            // 姓名

  sex:'',             // 性别

  birthday:'',        // 生日

}

```

## 项目配置

### package.json

只能架构师修改

### package-lock.json

该文件不可上传

### 环境配置文件

环境配置文件只能由一人修改提交

```

|- .env.development      开发环境配置

|- .env.production       生产环境配置

|- .env.staging          模拟(测试)环境配置

```

### 样式

- 只能使用less css预处理器

- 请避免使用行内样式

- 页面主色调 请在src/assets/styles/variable.less 设置变量使用

- import css 需要标注注释说明

- 请避免使用标签选择器


 

## Vue3

> 在使用纯setup写法时,为了提高可读性,请按照以下规定开发

* import放在最前面

* 其后代码按照以下排序分段用空行区分显示

  * 常量变量在前

  * 生命周期在中间

  * 方法函数在后面

```

<script setup>

/**

 * @desc 文件注释

 * @auther xxx

 * @date xxx

 * **/

import { ref, onMounted } from 'vue'

const TITLE = '标题'

const data = ref(null)

onMounted(() => {

    getData()

})

/**

  * 获取数据

  * @param {String} id 事件id

  */

const getData = (id) => {}

</script>

```

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值