巴巴快巴前端规范

149 阅读4分钟

命名规则

1.项目命名

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

例:my_project_name

2.目录命名

参照项目命名规则; 有复数结构时,要采用复数命名法。

例:scripts, styles, images, data_models

3.JS文件命名

参照项目命名规则。

例:account_model.js

4.CSS, SCSS文件命名

参照项目命名规则。

例:retina_sprites.scss

5.HTML文件命名

参照项目命名规则。

例:error_report.html

HTML

1.语法

  • 缩进使用soft tab(4个空格);
  • 嵌套的节点应该缩进;
  • 在属性上,使用双引号,不要使用单引号;
  • 属性名全小写,用中划线做分隔符;
  • 不要在自动闭合标签结尾处使用斜线(HTML5 规范 指出他们是可选的);
  • 不要忽略可选的关闭标签,例:</li></body>

2.HTML5 doctype

  • 在页面开头使用这个简单地doctype来启用标准模式,使其在每个浏览器中尽可能一致的展现;
  • 虽然doctype不区分大小写,但是按照惯例,doctype大写

3.字符编码

通过声明一个明确的字符编码,让浏览器轻松、快速的确定适合网页内容的渲染方式,通常指定为'UTF-8'。

4.引入CSS, JS

根据HTML5规范, 通常在引入CSS和JS时不需要指明 type,因为 text/csstext/javascript 分别是他们的默认值。

HTML5 规范链接

5.属性顺序

属性应该按照特定的顺序出现以保证易读性;

  • class
  • id
  • name
  • data-*
  • src, for, type, href, value , max-length, max, min, pattern
  • placeholder, title, alt
  • aria-*, role
  • required, readonly, disabled class是为高可复用组件设计的,所以应处在第一位;

id更加具体且应该尽量少使用,所以将它放在第二位。

6.减少标签数量

在编写HTML代码时,需要尽量避免多余的父节点;

很多时候,需要通过迭代和重构来使HTML变得更少。

7.实用高于完美

尽量遵循HTML标准和语义,但是不应该以浪费实用性作为代价;

任何时候都要用尽量小的复杂度和尽量少的标签来解决问题。

JavaScript

1.缩进

使用soft tab(4个空格)。

2.单行长度

不要超过80,但如果编辑器开启word wrap可以不考虑单行长度。

3.分号

按照vscode prettier文件设置

4.空格

按照vscode prettier文件设置

5.单行注释

双斜线后,必须跟一个空格;缩进与下一行代码保持一致;可位于一个代码行的末尾,与代码间隔一个空格。

if (condition) {
    // if you made it here, then all security checks passed
    allowed();
}

var zhangsan = 'zhangsan'; // one space after code

6.多行注释

最少三行, '*'后跟一个空格,具体参照下边的写法;

建议在以下情况下使用:

  • 难于理解的代码段
  • 可能存在错误的代码段
  • 浏览器特殊的HACK代码
  • 业务逻辑强相关的代码
/*
 * one space after '*'
 */
var x = 1;

7.引号

统一使用单引号。

8.变量命名

  • 标准变量采用驼峰式命名
  • 常量全大写,用下划线连接
  • 构造函数,大写第一个字母
  • jquery对象必须以'$'开头命名
var thisIsMyName;

var MAX_COUNT = 10;

function Person(name) {
    this.name = name;
}

// not good
var body = $('body');

// good
var $body = $('body');

9.代码块

使用花括号包裹所有的多行代码块。

单行 if 语句也必须使用花括号括住

// 推荐
if (true) {
  // TODO ...
}

// 不推荐
if (true) // TODO ...

vue 文件

基本结构

<template>
  <div></div>
</template>
<script>
  export default {
    components: {},
    data() {
      return {};
    },
    methods: {},
    mounted() {}
  };
</script>
<!-- 声明语言,并且添加scoped -->
<style scoped></style>

vue 文件方法声明顺序

- components
- props
- data
- computed
- created
- mounted
- activited
- update
- beforeRouteUpdate
- metods
- watch

props 命名规范

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

<!-- 推荐 -->
<script>
  props: {
    greetingText: String;
  }
</script>


<welcome-message greeting-text="hi"></welcome-message>

<!-- 不推荐 -->
<script>
  props: {
    'greeting-text': String
  }
</script>

<welcome-message greetingText="hi"></welcome-message>

使用 ES6 风格编码源码

  • 定义变量使用 let ,定义常量使用 const
  • 静态字符串一律使用单引号或反引号,动态字符串使用反引号
// 推荐
const a = 'foobar';
const b = `foo${a}bar`;
const c = 'foobar';


// 不推荐
const a = 'foobar';
const b = 'foo' + a + 'bar';
  • 解构赋值
// 数组解构赋值
const arr = [1, 2, 3, 4];
// 推荐
const [first, second] = arr;
// 不推荐
const first = arr[0];
const second = arr[1];


// 对象解构赋值
// 推荐
function getFullName(obj) {
  const { firstName, lastName } = obj;
}
// best
function getFullName({ firstName, lastName }) {}
// 不推荐
function getFullName(user) {
  const firstName = user.firstName;
  const lastName = user.lastName;
}
  • 拷贝数组 使用扩展运算符(...)拷贝数组。
const items = [1, 2, 3, 4, 5];
// 推荐
const itemsCopy = [...items];
// 不推荐
const itemsCopy = items;
  • 箭头函数 需要使用函数表达式的场合,尽量用箭头函数代替。因为这样更简洁,而且绑定了 this
// 推荐
const boundMethod = (...params) => method.apply(this, params);
// 不推荐
const self = this;
const boundMethod = function(...params) {
  return method.apply(self, params);
};

指令规范

  • 指令有缩写一律采用缩写形式
// 推荐
:class="{'show-left':true}"
@click="getListData"


// 不推荐
v-bind:class="{'show-left':true}"
v-on:click="getListData"
  • v-for 循环必须加上 key 属性,在整个 for 循环中 key 需要唯一
<!-- 推荐 -->
<ul>
  <li v-for="todo in todos" :key="todo.id">
    {{ todo.text }}
  </li>
</ul>


<!-- 不推荐 -->
<ul>
  <li v-for="todo in todos">
    {{ todo.text }}
  </li>
</ul>
  • 避免 v-if 和 v-for 同时用在一个元素上(性能问题)