前端代码开发规范总结

简介: 前端代码开发规范总结

目录

前端代码规范

一.编程规约

(一) 命名规范

1.1.1 项目命名

1.1.2 目录命名

1.1.3 JS、CSS、SCSS、HTML、PNG 文件命名

1.1.4 命名严谨性

(二) HTML 规范 (Vue Template 同样适用)

1.2.1 HTML 类型

1.2.2 缩进

1.2.3 分块注释

1.2.4 语义化标签

1.2.5 引号

(三) CSS 规范

1.3.1 命名

1.3.2 选择器

1) css 选择器中避免使用标签名

2) 使用直接子选择器

1.3.3 尽量使用缩写属性

1.3.4 每个选择器及属性独占一行

1.3.5 省略 0 后面的单位

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

(四) LESS 规范

1.4.1 代码组织

1) 将公共 less 文件放置在 style/less/common 文件夹

2) 按以下顺序组织

1.4.2 避免嵌套层级过多

(五) Javascript 规范

1.5.1 命名

1) 采用小写驼峰命名 lowerCamelCase,代码中的命名均不能以下划线, 也不能以下划线或美元符号结束

2) 方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风 格,必须遵从驼峰形式

3) 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚, 不要嫌名字长

1.5.2 代码格式

1) 使用 2 个空格进行缩进

2) 不同逻辑、不同语义、不同业务的代码之间插入一个空行分隔开来以 提升可读性

1.5.3 字符串

1.5.4 对象声明

1) 使用字面值创建对象

2) 使用字面量来代替对象构造器

1.5.5 使用 ES6+

1.5.6 括号

1.5.7 undefined 判断

1.5.8 条件判断和循环最多三层

1.5.9 this 的转换命名

1.5.10 慎用 console.log

二、Vue 项目规范

(一) Vue 编码基础

2.1.1. 组件规范

1) 组件名为多个单词。

2) 组件文件名为 pascal-case 格式

3) 基础组件文件名为 base 开头,使用完整单词而不是缩写。

4) 和父组件紧密耦合的子组件应该以父组件名作为前缀命名

5) 在 Template 模版中使用组件,应使用 PascalCase 模式,并且使用自闭合组件。

6) 组件的 data 必须是一个函数

7) Prop 定义应该尽量详细

8) 为组件样式设置作用域

9) 如果特性元素较多,应该主动换行。

2.1.2. 模板中使用简单的表达式

2.1.3 指令都使用缩写形式

2.1.4 标签顺序保持一致

2.1.5 必须为 v-for 设置键值 key

2.1.6 v-show 与 v-if 选择

2.1.7 script 标签内部结构顺序

2.1.8 Vue Router 规范

1) 页面跳转数据传递使用路由参数

2) 使用路由懒加载(延迟加载)机制

3) router 中的命名规范

4) router 中的 path 命名规范

(二) Vue 项目目录规范

2.2.1 基础

2.2.2 使用 Vue-cli 脚手架

2.2.3 目录说明

1) api 目录

2) assets 目录

3) components 目录

4) constants 目录

5) router 与 store 目录

6) views 目录

2.2.4 注释说明

2.2.5 其他

1) 尽量不要手动操作 DOM

2) 删除无用代码

前端代码规范

image.png

一.编程规约

(一) 命名规范

1.1.1 项目命名

全部采用小写方式,以中线分隔。

正例:mall-management-system

反例:mall_management-system / mallManagementSystem

1.1.2 目录命名

全部采用小写方式, 以中划线分隔,有复数结构时,要采用复数命名法, 缩写不用复数。

正例: scripts/styles/components/images/utils/layouts/demo-styles/demo-scripts/img/doc

反例: script/style/demo_scripts/demoStyles/imgs/docs

【特殊】VUE 的项目中的 components 中的组件目录,使用 kebab-case命名。

正例: head-search/page-loading/authorized/notice-icon

反例:HeadSearch/PageLoading

【特殊】VUE 的项目中的除 components 组件目录外的所有目录也使用 kebab-case命名。

正例: page-one/shopping-car/user-management

反例: ShoppingCar/UserManagement

1.1.3 JS、CSS、SCSS、HTML、PNG 文件命名

全部采用小写方式, 以中划线分隔。

正例: render-dom.js/signup.css/index.html/company-logo.png

反例: renderDom.js/UserManagement.html

1.1.4 命名严谨性

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

正例:henan/luoyang/rmb 等国际通用的名称,可视同英文

反例: DaZhePromotion [打折] / getPingfenByName() [评分] / int 某变量 = 3

杜绝完全不规范的缩写,避免望文不知义:

反例: AbstractClass“缩写”命名成 AbsClass;condition “缩写”命名成 condi,此类随意缩写严重 降低了代码的可阅读性。

(二) HTML 规范 (Vue Template 同样适用)

1.2.1 HTML 类型

推荐使用 HTML5 的文档类型申明:

(建议使用 text/html 格式的 HTML。避免使用 XHTML。XHTML 以及它的属性,比如 application/xhtml+xml 在浏览器中的应用支持与优化空间都十分有限)。

 规定字符编码

 IE 兼容模式

 规定字符编码

 doctype 大写

正例:

<!DOCTYPE html>
<html>
  <head> 
      <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> 
    <meta charset="UTF-8" /> 
    <title>Page title</title> 
  </head>
  <body> 
   <img src="images/company-logo.png" alt="Company">
 </body> 
  </html>

1.2.2 缩进

缩进使用 2 个空格(一个 tab);

嵌套的节点应该缩进。

1.2.3 分块注释

在每一个块状元素,列表元素和表格元素后,加上一对 HTML 注释。

1.2.4 语义化标签

HTML5 中新增很多语义化标签,所以优先使用语义化标签,避免一个页面都是 div 或者 p 标 签。

正例

<header></header> 
<footer></footer>

反例

<div> 
  <p></p>
 </div>

1.2.5 引号

使用双引号(" ") 而不是单引号(’ ') 。

正例:<div class=”box”></div>

反例:<div class=’box’></div>

(三) CSS 规范

1.3.1 命名

 类名使用小写字母,以中划线分隔

 id 采用驼峰式命名

 scss 中的变量、函数、混合、placeholder 采用驼峰式命名

image.png

不推荐:

.fw-800 {
    font-weight: 800;
  }
  .red {
    color: red; 
   }

推荐:

.heavy {
   font-weight: 800;
  }
.important { 
  color: red; 
  }

1.3.2 选择器

1) css 选择器中避免使用标签名

image.png

2) 使用直接子选择器

image.png

不推荐:

.content .title {
   font-size: 2rem;
  }

推荐:

.content > .title {
   font-size: 2rem;
 }

1.3.3 尽量使用缩写属性

不推荐:

border-top-style: none; 
font-family: palatino, georgia, serif; 
font-size: 100%; line-height: 1.6; 
padding-bottom: 2em; 
padding-left: 1em;
 padding-right: 1em; 
 padding-top: 0;

推荐:

border-top: 0; 
font: 100%/1.6 palatino, georgia, serif; 
padding: 0 1em 2em;

1.3.4 每个选择器及属性独占一行

不推荐:

button { 
  width: 100px; 
  height: 50px;
  color: #fff;
  background: #00a0e9;
  }

推荐:

button {
  width: 100px; height: 50px;
  color: #fff;
  background: #00a0e9; 
}

1.3.5 省略 0 后面的单位

不推荐:

 div {
   padding-bottom: 0px; 
   margin: 0em;
 }

推荐:

div {
    padding-bottom: 0; 
    margin: 0; 
}

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

不推荐:

#header {
 padding-bottom: 0px; 
 margin: 0em;
}

推荐:

.header { 
  padding-bottom: 0px; 
  margin: 0em; 
}

(四) LESS 规范

1.4.1 代码组织

1) 将公共 less 文件放置在 style/less/common 文件夹

例: // color.less,common.less

2) 按以下顺序组织

1、@import;

2、变量声明;

3、样式声明;

@import "mixins/size.less"; 
@default-text-color: #333; 
.page {
 width: 960px; 
 margin: 0 auto; 
}

1.4.2 避免嵌套层级过多

image.png

不推荐:

 .main {
   .title { 
      .name { 
           color: #fff;  
         } 
     }
}
 ```
 **推荐:**
```css
.main-title {
   .name { color: #fff; }
    }

(五) Javascript 规范

1.5.1 命名

1) 采用小写驼峰命名 lowerCamelCase,代码中的命名均不能以下划线, 也不能以下划线或美元符号结束

反例:name / name / name$

2) 方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风 格,必须遵从驼峰形式

正例: localValue / getHttpMessage() / inputUserId

其中 method 方法命名必须是 动词 或者 动词+名词 形式

正例: saveShopCarData /openShopCarInfoDialog

反例: save / open / show / go

特此说明,增删查改,详情统一使用如下 5 个单词,不得使用其他(目的是为了统一各个端)

add / update / delete / detail / get 
附: 函数方法常用的动词: 
get 获取/set 设置, 
add 增加/remove 删除, 
create 创建/destory 销毁, 
start 启动/stop 停止, 
open 打开/close 关闭, 
read 读取/write 写入, 
load 载入/save 保存,
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 折叠, 
enter 进入/exit 退出,
abort 放弃/quit 离开, 
obsolete 废弃/depreciate 废旧, 
collect 收集/aggregate 聚集
3) 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚, 不要嫌名字长

正例: MAX_STOCK_COUNT

反例: MAX_COUNT

1.5.2 代码格式

1) 使用 2 个空格进行缩进

正例:

if (x < y) {
 x += 10;
  } else {
   x += 1; 
}
2) 不同逻辑、不同语义、不同业务的代码之间插入一个空行分隔开来以 提升可读性

说明:任何情形,没有必要插入多个空行进行隔开。

1.5.3 字符串

统一使用单引号(‘),不使用双引号(“)。这在创建 HTML 字符串非常有好处:

正例:

  let str = 'foo';
   let testDiv = '<div id="test"></div>'; 

反例:

let str = 'foo'; 
let testDiv = "<div id='test'></div>";

1.5.4 对象声明

1) 使用字面值创建对象

正例:let user = {};

反例:let user = new Object();

2) 使用字面量来代替对象构造器

正例:var user = { age: 0, name: 1, city: 3 };

反例:

var user = new Object(); 
user.age = 0; 
user.name = 0; 
user.city = 0; 

1.5.5 使用 ES6+

image.png

1.5.6 括号

image.png

正例:

if (condition) { 
doSomething();
 }

反例:

if (condition) doSomething();

1.5.7 undefined 判断

永远不要直接使用 undefined 进行变量判断;使用 typeof 和字符串’undefined’对变量进行判断。

正例:

image.png

反例:

image.png

1.5.8 条件判断和循环最多三层

image.png

1.5.9 this 的转换命名

image.png

1.5.10 慎用 console.log

image.png

二、Vue 项目规范

(一) Vue 编码基础

vue 项目规范以 Vue 官方规范 (https://cn.vuejs.org/v2/style-guide/) 中的 A 规范为基础,在其上面进行项目开发,故所有代码均遵守该规范。

请仔仔细细阅读 Vue 官方规范,切记,此为第一步。

2.1.1. 组件规范

1) 组件名为多个单词。

组件名应该始终是多个单词组成(大于等于 2),且命名规范为KebabCase格式。

这样做可以避免跟现有的以及未来的 HTML 元素相冲突,因为所有的 HTML 元素名称都是单个单词的。

正例:

export default {
  name: 'TodoItem'
  // ...
};

反例:

export default {
  name: 'Todo',
  // ...
}
export default {
  name: 'todo-item',
  // ...
}
2) 组件文件名为 pascal-case 格式

正例:

components/
|- my-component.vue

反例:

components/
|- myComponent.vue
|- MyComponent.vue
3) 基础组件文件名为 base 开头,使用完整单词而不是缩写。

正例:

components/
|- base-button.vue
|- base-table.vue
|- base-icon.vue

反例:

components/
|- MyButton.vue
|- VueTable.vue
|- Icon.vue
4) 和父组件紧密耦合的子组件应该以父组件名作为前缀命名

正例:

components/
|- todo-list.vue
|- todo-list-item.vue
|- todo-list-item-button.vue
|- user-profile-options.vue (完整单词)

反例:

components/
|- TodoList.vue
|- TodoItem.vue
|- TodoButton.vue
|- UProfOpts.vue (使用了缩写)
5) 在 Template 模版中使用组件,应使用 PascalCase 模式,并且使用自闭合组件。

正例:

<!-- 在单文件组件、字符串模板和 JSX 中 -->
<MyComponent />
<Row><table :column="data"/></Row>

反例:

<my-component /> <row><table :column="data"/></row>
6) 组件的 data 必须是一个函数

image.png

正例:

export default {
  data () {
    return {
      name: 'jack'
    }
  }
}

反例:

export default {
  data: {
    name: 'jack'
  }
}

7) Prop 定义应该尽量详细

必须使用 camelCase 驼峰命名

必须指定类型

必须加上注释,表明其含义

必须加上 required 或者 default,两者二选其一

如果有业务需要,必须加上 validator 验证

正例:

 props: {
  // 组件状态,用于控制组件的颜色
   status: {
     type: String,
     required: true,
     validator: function (value) {
       return [
         'succ',
         'info',
         'error'
       ].indexOf(value) !== -1
     }
   },
    // 用户级别,用于显示皇冠个数
   userLevel:{
      type: String,
      required: true
   }
}
8) 为组件样式设置作用域

正例:

<template>
  <button class="btn btn-close">X</button>
</template>
<!-- 使用 `scoped` 特性 -->
<style scoped>
  .btn-close {
    background-color: red;
  }
</style>

反例:

<template>
  <button class="btn btn-close">X</button>
</template>
<!-- 没有使用 `scoped` 特性 -->
<style>
  .btn-close {
    background-color: red;
  }
</style>
9) 如果特性元素较多,应该主动换行。

正例:

<MyComponent foo="a" bar="b" baz="c"
    foo="a" bar="b" baz="c"
    foo="a" bar="b" baz="c"
 />=

反例:

<MyComponent foo="a" bar="b" baz="c" foo="a" bar="b" baz="c" foo="a" bar="b" baz="c" foo="a" bar="b" baz="c"/>

2.1.2. 模板中使用简单的表达式

组件模板应该只包含简单的表达式,复杂的表达式则应该重构为计算属性或方法。复杂表达式会让你的模板变得不那么声明式。我们应该尽量描述应该出现的是什么,而非如何计算那个值。而且计算属性和方法使得代码可以重用。

正例:

<template>
  <p>{{ normalizedFullName }}</p>
</template>
// 复杂表达式已经移入一个计算属性
computed: {
  normalizedFullName: function () {
    return this.fullName.split(' ').map(function (word) {
      return word[0].toUpperCase() + word.slice(1)
    }).join(' ')
  }
}

反例:

<template>
  <p>
       {{
          fullName.split(' ').map(function (word) {
             return word[0].toUpperCase() + word.slice(1)
           }).join(' ')
        }}
  </p>
</template>

2.1.3 指令都使用缩写形式

指令推荐都使用缩写形式,(用 : 表示 v-bind: 、用 @ 表示 v-on: 和用 # 表示 v-slot:)

正例:

<input
  @input="onInput"
  @focus="onFocus"
>

反例:

<input
  v-on:input="onInput"
  @focus="onFocus"
>

2.1.4 标签顺序保持一致

单文件组件应该总是让标签顺序保持为 `

正例:

<template>...</template>
<script>...</script>
<style>...</style>

反例:

<template>...</template>
<style>...</style>
<script>...</script>

2.1.5 必须为 v-for 设置键值 key

2.1.6 v-show 与 v-if 选择

如果运行时,需要非常频繁地切换,使用 v-show ;如果在运行时,条件很少改变,使用 v-if。

2.1.7 script 标签内部结构顺序

components > props > data > computed > watch > filter > 钩子函数(钩子函数按其执行顺序) > methods

2.1.8 Vue Router 规范

1) 页面跳转数据传递使用路由参数

页面跳转,例如 A 页面跳转到 B 页面,需要将 A 页面的数据传递到 B 页面,推荐使用 路由参数进行传参,而不是将需要传递的数据保存 vuex,然后在 B 页面取出 vuex 的数据,因为如果在 B 页面刷新会导致 vuex 数据丢失,导致 B 页面无法正常显示数据。

正例:

let id = ' 123';
this.$router.push({ name: 'userCenter', query: { id: id } });
2) 使用路由懒加载(延迟加载)机制
{
    path: '/uploadAttachment',
    name: 'uploadAttachment',
    meta: {
      title: '上传附件'
    },
    component: () => import('@/view/components/uploadAttachment/index.vue')
  },
3) router 中的命名规范

path、childrenPoints 命名规范采用kebab-case命名规范(尽量vue文件的目录结构保持一致,因为目录、文件名都是kebab-case,这样很方便找到对应的文件)

name 命名规范采用KebabCase命名规范且和component组件名保持一致!(因为要保持keep-alive特性,keep-alive按照component的name进行缓存,所以两者必须高度保持一致)

// 动态加载
export const reload = [
  {
    path: '/reload',
    name: 'reload',
    component: Main,
    meta: {
      title: '动态加载',
      icon: 'icon iconfont'
    },
    children: [
      {
        path: '/reload/smart-reload-list',
        name: 'SmartReloadList',
        meta: {
          title: 'SmartReload',
          childrenPoints: [
            {
              title: '查询',
              name: 'smart-reload-search'
            },
            {
              title: '执行reload',
              name: 'smart-reload-update'
            },
            {
              title: '查看执行结果',
              name: 'smart-reload-result'
            }
          ]
        },component: () => import('@/views/reload/smart-reload/smart-reload-list.vue') }]
  }
];
4) router 中的 path 命名规范

path除了采用kebab-case命名规范以外,必须以 / 开头,即使是children里的path也要以 / 开头。如下示例

目的:

经常有这样的场景:某个页面有问题,要立刻找到这个vue文件,如果不用以/开头,path为parent和children组成的,可能经常需要在router文件里搜索多次才能找到,而如果以/开头,则能立刻搜索到对应的组件

{
    path: '/file',
    name: 'File',
    component: Main,
    meta: {
      title: '文件服务',
      icon: 'ios-cloud-upload'
    },
    children: [
      {
        path: '/file/file-list',
        name: 'FileList',
        component: () => import('@/views/file/file-list.vue')
      },
      {
        path: '/file/file-add',
        name: 'FileAdd',
        component: () => import('@/views/file/file-add.vue')
      },
      {
        path: '/file/file-update',
        name: 'FileUpdate',
        component: () => import('@/views/file/file-update.vue')
      }
    ]
  }

(二) Vue 项目目录规范

2.2.1 基础

vue 项目中的所有命名一定要与后端命名统一。

比如权限:后端 privilege, 前端无论 router , store, api 等都必须使用 privielege 单词!

2.2.2 使用 Vue-cli 脚手架

使用 vue-cli3 来初始化项目,项目名按照上面的命名规范。

2.2.3 目录说明

目录名按照上面的命名规范,其中 components 组件用大写驼峰,其余除 components 组件目录外的所有目录均使用 kebab-case 命名。

src                                  源码目录
|-- api                              所有api接口
|-- assets                           静态资源,images, icons, styles等
|-- components                       公用组件
|-- config                           配置信息
|-- constants                        常量信息,项目所有Enum, 全局常量等
|-- directives                       自定义指令
|-- filters                          过滤器,全局工具
|-- datas                            模拟数据,临时存放
|-- lib                              外部引用的插件存放及修改文件
|-- mock                             模拟接口,临时存放
|-- plugins                          插件,全局使用
|-- router                           路由,统一管理
|-- store                            vuex, 统一管理
|-- themes                           自定义样式主题
|-- views                            视图目录
|   |-- role                                 role模块名
|   |-- |-- role-list.vue                    role列表页面
|   |-- |-- role-add.vue                     role新建页面
|   |-- |-- role-update.vue                  role更新页面
|   |-- |-- index.less                       role模块样式
|   |-- |-- components                       role模块通用组件文件夹
|   |-- employee                             employee模块
1) api 目录

文件、变量命名要与后端保持一致。

此目录对应后端 API 接口,按照后端一个 controller 一个 api js 文件。若项目较大时,可以按照业务划分子目录,并与后端保持一致。

api 中的方法名字要与后端 api url 尽量保持语义高度一致性。

对于 api 中的每个方法要添加注释,注释与后端 swagger 文档保持一致。

正例:

后端 url: EmployeeController.java

/employee/add
/employee/delete/{id}
/employee/update

前端: employee.js

  // 添加员工
  addEmployee: (data) => {
    return postAxios('/employee/add', data)
  },
  // 更新员工信息
  updateEmployee: (data) => {
    return postAxios('/employee/update', data)
  },
    // 删除员工
  deleteEmployee: (employeeId) => {
    return postAxios('/employee/delete/' + employeeId)
   },
2) assets 目录

assets 为静态资源,里面存放 images, styles, icons 等静态资源,静态资源命名格式为 kebab-case

|assets
|-- icons
|-- images
|   |-- background-color.png
|   |-- upload-header.png
|-- styles

3) components 目录

此目录应按照组件进行目录划分,目录命名为 KebabCase,组件命名规则也为 KebabCase

|components
|-- error-log
|   |-- index.vue
|   |-- index.less
|-- markdown-editor
|   |-- index.vue
|   |-- index.js
|-- kebab-case
4) constants 目录

此目录存放项目所有常量,如果常量在 vue 中使用,请使用 vue-enum 插件(https://www.npmjs.com/package/vue-enum)

目录结构:

|constants
|-- index.js
|-- role.js
|-- employee.js

例子: employee.js

export const EMPLOYEE_STATUS = {
  NORMAL: {
    value: 1,
    desc: '正常'
  },
  DISABLED: {
    value: 1,
    desc: '禁用'
  },
  DELETED: {
    value: 2,
    desc: '已删除'
  }
};
export const EMPLOYEE_ACCOUNT_TYPE = {
  QQ: {
    value: 1,
    desc: 'QQ登录'
  },
  WECHAT: {
    value: 2,
    desc: '微信登录'
  },
  DINGDING: {
    value: 3,
    desc: '钉钉登录'
  },
  USERNAME: {
    value: 4,
    desc: '用户名密码登录'
  }
};
export default {
  EMPLOYEE_STATUS,
  EMPLOYEE_ACCOUNT_TYPE
};

5) router 与 store 目录

这两个目录一定要将业务进行拆分,不能放到一个 js 文件里。

router 尽量按照 views 中的结构保持一致

store 按照业务进行拆分不同的 js 文件

6) views 目录

命名要与后端、router、api 等保持一致

components 中组件要使用 PascalCase 规则

|-- views                                    视图目录
|   |-- role                                 role模块名
|   |   |-- role-list.vue                    role列表页面
|   |   |-- role-add.vue                     role新建页面
|   |   |-- role-update.vue                  role更新页面
|   |   |-- index.less                      role模块样式
|   |   |-- components                      role模块通用组件文件夹
|   |   |   |-- role-header.vue             role头部组件
|   |   |   |-- role-modal.vue              role弹出框组件
|   |-- employee                            employee模块
|   |-- behavior-log                        行为日志log模块
|   |-- code-generator                      代码生成器模块

2.2.4 注释说明

整理必须加注释的地方

公共组件使用说明

api 目录的接口 js 文件必须加注释

store 中的 state, mutation, action 等必须加注释

vue 文件中的 template 必须加注释,若文件较大添加 start end 注释

vue 文件的 methods,每个 method 必须添加注释

vue 文件的 data, 非常见单词要加注释

2.2.5 其他

1) 尽量不要手动操作 DOM

因使用 vue 框架,所以在项目开发中尽量使用 vue 的数据驱动更新 DOM,尽量(不到万不得已)不要手动操作 DOM,包括:增删改 dom 元素、以及更改样式、添加事件等。

2) 删除无用代码

因使用了 git/svn 等代码版本工具,对于无用代码必须及时删除,例如:一些调试的 console 语句、无用的弃用功能代码。


目录
相关文章
|
23天前
|
JavaScript 前端开发 Docker
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
在使用 Deno 构建项目时,生成的可执行文件体积较大,通常接近 100 MB,而 Node.js 构建的项目体积则要小得多。这是由于 Deno 包含了完整的 V8 引擎和运行时,使其能够在目标设备上独立运行,无需额外安装依赖。尽管体积较大,但 Deno 提供了更好的安全性和部署便利性。通过裁剪功能、使用压缩工具等方法,可以优化可执行文件的体积。
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
|
5天前
|
前端开发 JavaScript
前端界的革命:掌握这些新技术,让你的代码简洁到让人惊叹!
前端技术的快速发展带来了许多令人惊叹的新特性。ES6及其后续版本引入了箭头函数、模板字符串等简洁语法,极大减少了代码冗余。React通过虚拟DOM和组件化思想,提高了代码的可维护性和效率。Webpack等构建工具通过模块化和代码分割,优化了应用性能和加载速度。这些新技术正引领前端开发的革命,使代码更加简洁、高效、可维护。
9 2
|
5天前
|
前端开发 JavaScript 测试技术
前端工程师的必修课:如何写出优雅、可维护的代码?
前端工程作为数字世界的门面,编写优雅、可维护的代码至关重要。本文从命名规范、模块化设计、注释与文档、遵循最佳实践四个方面,提供了提升代码质量的方法。通过清晰的命名、合理的模块划分、详细的注释和持续的学习,前端工程师可以写出高效且易于维护的代码,为项目的成功打下坚实基础。
13 2
|
10天前
|
监控 前端开发 JavaScript
前端开发的终极奥义:如何让你的代码既快又美,还不易出错?
【10月更文挑战第31天】前端开发是一个充满挑战与机遇的领域,本文从性能优化、代码美化和错误处理三个方面,探讨了如何提升代码的效率、可读性和健壮性。通过减少DOM操作、懒加载、使用Web Workers等方法提升性能;遵循命名规范、保持一致的缩进与空行、添加注释与文档,让代码更易读;通过输入验证、try-catch捕获异常、日志与监控,增强代码的健壮性。追求代码的“快、美、稳”,是每个前端开发者的目标。
27 3
|
12天前
|
前端开发 JavaScript 开发者
前端开发的终极技巧:如何让你的代码既简洁又高效,还能减少bug?
【10月更文挑战第30天】前端开发充满挑战与创新,如何编写简洁高效且少bug的代码是开发者关注的重点。本文介绍五大技巧:1. 模块化,提高代码复用性;2. 组件化,降低代码耦合度;3. 使用现代框架,提高开发效率;4. 统一代码规范,降低沟通成本;5. 利用工具,优化代码质量。掌握这些技巧,让前端开发更高效。
26 1
|
19天前
|
前端开发 JavaScript 开发者
揭秘前端高手的秘密武器:深度解析递归组件与动态组件的奥妙,让你代码效率翻倍!
【10月更文挑战第23天】在Web开发中,组件化已成为主流。本文深入探讨了递归组件与动态组件的概念、应用及实现方式。递归组件通过在组件内部调用自身,适用于处理层级结构数据,如菜单和树形控件。动态组件则根据数据变化动态切换组件显示,适用于不同业务逻辑下的组件展示。通过示例,展示了这两种组件的实现方法及其在实际开发中的应用价值。
27 1
|
1月前
|
前端开发 测试技术
如何从零到一建立前端规范
【10月更文挑战第6天】
55 2
|
1月前
|
前端开发 JavaScript 开发者
利用代码分割优化前端性能:高级技巧与实践
【10月更文挑战第2天】在现代Web开发中,代码分割是优化前端性能的关键技术,可显著减少页面加载时间。本文详细探讨了代码分割的基本原理及其实现方法,包括自动与手动分割、预加载与预取、动态导入及按需加载CSS等高级技巧,旨在帮助开发者提升Web应用性能,改善用户体验。
|
1月前
|
前端开发 小程序 JavaScript
信前端里的循环显示如何编写代码?
信前端里的循环显示如何编写代码?
68 5
|
2月前
|
监控 前端开发 开发者
前端代码规范 - 日志打印规范
前端代码规范 - 日志打印规范