前端代码规范

修订记录

版本号 修订说明 时间 修订人
V1.0 初版 2021.03 王阳
V2.0

  1. 概述

编写目的:通过保持代码风格和传统的一致性,我们可以减少遗留系统维护的负担,并降低未来系统崩溃的风险,从而确保优化的页面加载、性能以及可维护的代码。

  1. 开发环境
  2. 开发IDE

推荐 VScode

下载地址:https://code.visualstudio.com/

安装最新版本即可

1. **推荐VsCode插件**

-Chinese (Simplified) Language Pack for Visual Studio Code-汉化
-Prettier-Code formatter
-Code Spell Checker-拼写检查
-Vetur-Vue tooling for VS Code
-GitLens-git历史
-Document This-注释
-TODO Highlight 高亮显示
-Todo Tree 目录好找
-JavaScript (ES6) code snippets Code snippets for JavaScript in ES6 syntax
-Bracket Pair Colorizer 2 A customizable extension for colorizing matching brackets
-cssrem(px 转 rem 工具)
2. Prettier - Code formatter 必须使用此插件

  • 添加配置:

在项目根目录下添加配置文件.prettierrc

配置内容如下:

{
  "tabWidth": 2,
  "singleQuote": true,
  "trailingComma": "es5",
  "printWidth": 80,
  "javascript.format.insertSpaceBeforeFunctionParenthesis": false,
  "overrides": [
    {
      "files": ".prettierrc",
      "options": { "parser": "json" }
    }
  ]
}
  • 替换默认格式化工具

安装完成后,替换默认的格式化工具为Prettier

在文档空白处使用右键,选择文档格式设置方式

[图片上传失败...(image-922bb5-1615526386406)]

[图片上传失败...(image-34ecec-1615526386406)]

注意:如果在其他类型的文档(如 html)中格式化后发现没有效果,需要按照上面设置的流程再重新设置一遍。

以后就可以使用Shift+Alt+F快捷键快速格式化了。

3. **cssrem插件**

下载插件后更改根字体大小:

设置=>搜索设置中输入csssrem

[图片上传失败...(image-7bc433-1615526386406)]

  1. Vue.js

Vue.js文档

  1. 微信小程序

微信小程序开发文档

微信开发者工具下载地址:[https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html]

  1. 微信公众号

微信公众号开发文档

  1. 规范
  2. 项目规范
    1. 文件命名

文件夹/文件的命名统一用小写,单词之间使用短横线“-”分割

文件夹使用模块或页面的英文直译名字进行命名,文件根据页面功能命名,范例如下:

围栏信息页面
文件夹:fence-information
文件夹下的文件:新增 add.html/add.js 编辑 edit.html/edit.js
2. **图片命名**

图片若有语义化后缀,使用单下划线连接,范例如下:

功能页面名称_状态(可选).png
ico_main_arrow_n.png ico_main_arrow_p.png
btn_main_success_n.png btn_main_success_p.png
line_main_menu_n.png line_main_menu_p.png
img_main_shop_n.png img_main_shop.p.png
3. **项目结构**

vue项目结构与小程序项目结构不同,详见下文。

  1. HTML开发规范
    1. 语法
  • 缩进使用soft tab(2个空格)
  • 嵌套的节点应该缩进
  • 在属性上,使用双引号,不要使用单引号
  • 属性名全小写,用中划线做分隔符
    1. 要求
  • 减少标签数量
  • 实用高于完美
  • 尽量遵循HTML标准和语义,但是不应该以浪费实用性作为代价
  • 任何时候都要用尽量小的复杂度和尽量少的标签来解决问题
  1. CSS开发规范
    1. 命名
  • 类名使用小写字母,以中划线分隔,不允许使用大写字母或_
  • id采用驼峰式命名
  • Less中的变量、函数、混合、placeholder采用驼峰式命名
  • 【Less.js开发文档】:(https://less.bootcss.com/)
/* class */
.element-content {
    ...
}
/* id */
#myDialog {
    ...
}
/* 变量 */
$colorBlack: #000;
/* 函数 */
@function pxToRem($px) {
    ...
}
/* 混合 */
@mixin centerBlock {
    ...
}
/* placeholder */
%myDialog {
    ...
}

2. 引号
  • 最外层统一使用双引号
  • url的内容要用引号
  • 属性选择器中的属性值需要引号
.element:after {
    content: "";
    background-image: url("logo.png");
}
li[data-type="single"] {
    ...
}
3. 缩进
  • 使用soft tab(2个空格)。
    1. 分号
  • 每个属性声明末尾都要加分号。
    1. 空格
  • 以下几种情况不需要空格:
    • 属性名后
    • 多个规则的分隔符','前
    • !important '!'后
    • 属性值中'('后和')'前
    • 行末不要有多余的空格
  • 以下几种情况需要空格:
    • 属性值前
    • 选择器'>', '+', '~'前后
    • '{'前
    • !important '!'前
    • @else 前后
    • 属性值中的','后
    • 注释'/'后和'/'前
/* not good */
.element {
    color :red! important;
    background-color: rgba(0,0,0,.5);
}
/* good */
.element {
    color: red !important;
    background-color: rgba(0, 0, 0, .5);
}
/* not good */
.element ,
.dialog{
    ...
}
/* good */
.element,
.dialog {
}
/* not good */
.element>.dialog{
    ...
}
/* good */
.element > .dialog{
    ...
}
/* not good */
.element{
    ...
}
/* good */
.element {
    ...
}
/* not good */
@if{
    ...
}@else{
    ...
}
/* good */
@if {
    ...
} @else {
    ...
}
6. 空行
  • 以下几种情况需要空行:
    • 文件最后保留一个空行
    • '}'后最好跟一个空行,包括LESS中嵌套的规则
    • 属性之间需要适当的空行,具体见属性声明顺序
/* not good */
.element {
    ...
}
.dialog {
    color: red;
    &:after {
        ...
    }
}
/* good */
.element {
    ...
}
.dialog {
    color: red;
    &:after {
        ...
    }
}
7. 属性
  • 属性声明顺序(推荐)
.declaration-order {
    display: block;
    float: right;
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 100;
    border: 1px solid #e5e5e5;
    border-radius: 3px;
    width: 100px;
    height: 100px;
    font: normal 13px "Helvetica Neue", sans-serif;
    line-height: 1.5;
    text-align: center;
    color: #333;
    background-color: #f5f5f5;
    opacity: 1;
}
8. 颜色
  • 颜色16进制用小写字母
  • 颜色16进制尽量用简写
/* not good */
.element {
    color: #ABCDEF;
    background-color: #001122;
}
/* good */
.element {
    color: #abcdef;
    background-color: #012;
}
9. 其他
  • 元素选择器用小写字母
  • 去掉小数点前面的0
  • 去掉数字中不必要的小数点和末尾的0
  • 属性值'0'后面不要加单位
  • 同个属性不同前缀的写法需要在垂直方向保持对齐
  • 无前缀的标准属性应该写在有前缀的属性后面
  • 不要在同个规则里出现重复的属性,如果重复的属性是连续的则没关系
  • 不要在一个文件里出现两个相同的规则、不允许有空的规则
  • 用 border: 0; 代替 border: none
  • 选择器不要超过4层(在LESS中如果超过4层应该考虑用嵌套的方式来)
  • 发布的代码中不要有 @import
  • 尽量少用'*'选择器
/* not good */
.element {
}
/* not good */
LI {
    ...
}
/* good */
li {
    ...
}
/* not good */
.element {
    color: rgba(0, 0, 0, 0.5);
}
/* good */
.element {
    color: rgba(0, 0, 0, .5);
}
/* not good */
.element {
    width: 50.0px;
}

/* good */
.element {
    width: 50px;
}
/* not good */
.element {
    width: 0px;
}
/* good */
.element {
    width: 0;
}
/* not good */
.element {
    border-radius: 3px;
    -webkit-border-radius: 3px;
    -moz-border-radius: 3px;
    background: linear-gradient(to bottom, #fff 0, #eee 100%);
    background: -webkit-linear-gradient(top, #fff 0, #eee 100%);
    background: -moz-linear-gradient(top, #fff 0, #eee 100%);
}
/* good */
.element {
    -webkit-border-radius: 3px;
       -moz-border-radius: 3px;
            border-radius: 3px;
    background: -webkit-linear-gradient(top, #fff 0, #eee 100%);
    background:    -moz-linear-gradient(top, #fff 0, #eee 100%);
    background:         linear-gradient(to bottom, #fff 0, #eee 100%);
}
/* not good */
.element {
    color: rgb(0, 0, 0);
    width: 50px;
    color: rgba(0, 0, 0, .5);
}
/* good */
.element {
    color: rgb(0, 0, 0);
    color: rgba(0, 0, 0, .5);
}
  1. JavaScript开发规范
    1. 命名
      1. 变量

命名方式:小驼峰

命名规范:前缀名词

命名建议:语义化

// 友好
let maxCount = 10; 
let tableTitle = 'LoginTable';
// 不友好
let setCount = 10;
let getTitle = 'LoginTable';
    2. 常量

命名方式:全部大写

命名规范:使用大写字母和下划线来组合命名,下划线用以****分****割单词

命名建议:语义化

const MAX_COUNT = 10;
const URL = 'http://www.foreverz.com';
    3. 函数

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

命名规范:前缀****应****当为动词

命名建议:语义化

可以参考如下的动作

|动词|含义|返回值|
|:----:|:----|:----:|:----|:----:|:----|
|can|判断是否可执行某个动作(权限)|函数返回一个布尔值。true:可执行;false:不可执行|
|has|判断是否含有某个值|函数返回一个布尔值。true:含有此值;false:不含有此值|
|is|判断是否为某个值|函数返回一个布尔值。true:为某个值;false:不为某个值|
|get|获取某个值|函数返回一个非布尔值|
|set|设置某个值
|无返回值、返回是否设置成功或者返回链式对象|
|load|加载某些数据|无返回值或者返回是否加载完成的结果|

    4. 类、构造函数

命名方式:大驼峰式命名法,首字母大写

命名规范:前缀为名称

命名建议:语义****化

class Person {
  public name: string;
  constructor(name) {
    this.name = name;
  }
}
const person = new Person('mevyn');

公共属性和方法:跟变量和函数的命名一样。

    5. 其他
  • 'ID'在变量名中全大写

  • 'URL'在变量名中全大写

  • 'Android'在变量名中大写第一个字母

  • 'iOS'在变量名中小写第一个,大写后两个字母

  • 构造函数,大写第一个字母

  • jquery对象必须以'$'开头命名

    1. 注释
      1. 单行注释
// 这个函数的执行条件,执行结果大概说明
dosomthing()
    2. **多行注释**
/*
* xxxx  描述较多的时候可以使用多行注释
* xxxx
*/
dosomthing();
    3. **注释规则**

给逻辑代码添加适当注释,以便于后期人员交接维护

3. 类型判断
  • 在使用接口返回的数组元素和对象前,必须做非空验证。
//错误
const arr = res[0];
//正确
const arr = res.length?res[0]:[];

4. 方法/函数
  • 每个方法大小不要超过50行,否则要拆解

  • 嵌套循环不要超过三层,超过了就要单独抽函数/方法

  • 无论是函数声明还是函数表达式,'('前不要空格,但'{'前一定要有空格

  • 函数调用括号前不需要空格

  • 立即执行函数外必须包一层括号

  • 参数之间用', '分隔,注意逗号后有一个空格

    1. 数组对象
  • 对象属性名不需要加引号

  • 对象以缩进的形式书写,不要写在一行

  • 数组、对象最后不要有逗号

// not good
var a = {
    'b': 1
};
var a = {b: 1};
// good
var a = {
    b: 1,
    c: 2
};
6. 引号
  • 最外层统一使用单引号
// not good
var x = "test";
// good
var y = 'foo',
    z = '
';

7. 分号

以下几种情况后需加分号:

  • 变量声明
  • 表达式
  • return
  • throw
  • break
  • continue
  • do-while
/* var declaration */
var x = 1;
/* expression statement */
x++;
/* do-while */
do {
    x++;
} while (x < 10);

8. 空格
  • 除了缩进,不要使用多个空格
  • 属性、函数/方法、参数类型中间加空格
  • 逗号后面加空格
  • 行末不留空格
  • 属性前不要加空格
// not good
const id =    1234; 
const result:number;
emitData():void {
}
emitData(data:string): void {
}
greet(name: string,options: Option) { ... };
user .name
// good
const id = 1234;
const result: number;
emitData(): void {
}
emitData(data: string): void {
}
greet(name: string, options: Option) { ... };
user.name
9. 其他
  • 始终使用 === 替代 ==

例外: obj == null 可以用来检查 null || undefined。

// not good
if (name == 'John');
if (name != 'John');  
// good  
if (name === 'John'); 
if (name !== 'John');
  • 不使用 var 定义变量
let result; // good
var result; // not good
  • 语句结束需要分号结尾
  • 不使用无意义的变量名
  • if 后只有一行也需要使用花括号
  • 函数/方法中间需要空一行, 但是不要空多行
  • return 语句中的赋值必需有括号包裹
// not good
sum(a, b) {
  return result = a + b ; 
}
// good
sum(a, b) {
  return (result = a + b); 
}
  • return,throw,continue 和 break 后不要再跟代码
doSomething () {
  return true;
  console.log('never called');   // not good

}

  • 代码块中避免多余留白
// not good
if (user) {
                           // ✗ 
  const name = getName();
                           // ✗ 
}
// good
if (user) {
  const name = getName();  // ✓ 
}
  • import, export 和解构操作中,禁止赋值到同名变量
import { config } from './config';   // good
import { config as config } from './config';   // not good
  • 类似于保存/修改等操作,需要实现 ajax 防止重复提交的功能。
  • 重要的表单字段需要加非空及格式校验
  1. git规范(必看)

请参考git规范

  1. vue规范
  2. 目录结构
dist/                          编译目录(发布目录)
docs/                          项目文档及编码指南
node_modules/                  包管理
src/                           项目源代码
|-  assets/                    应用程序资源 (imgs,css,js,icons)
|-  router/                    路由配置
|- |  |  - index.ts
|-  shared/
|- |  |- components/           公共组件
|  |- |- |- title/             title组件
|  |  |- |- form/              表单组件
|- |  |- filter/               全局过滤器
|- |  |- utils/                工具
|- |  |- |- util.ts            公共方法
|- |  |- validate.ts           验证配置、方法
|- |  |- service.ts            接口访问地址(IP后)
|- |  |- wx.js                 微信方法封装
|-  store/                     vuex配置
|- |  |- index.ts              vuex入口文件
|- |  |- state.ts              vuex数据
|- |  |- mutition.ts           mutition方法
|- |  |- action.ts             action方法
|-  plugins/                   三方插件
|-  styles/                    样式目录
|- |  |- common.less           公用样式
|- |  |- variable.less         全局样式(fontSize,Color)
|- |  |- mixin.less            样式混写文件
|- views/                      视图组件
|- |  |- shared                模块之间公用部分
|- |  |- home
|- |  |  |- shared             模块内公共部分
|- |  |  |- home-demo.vue
|- |  |- order
|- |  |  |- shared             模块内公共部分
|- |  |  |- |- order-operate-template.vue
|- |  |  |- list
|- |  |  |- |- order-list.vue
|- |  |  |- create
|- |  |  |- |- create-order.vue
|- App.vue                      入口vue文件
|- main.ts                      入口js文件
static/                         不打包的公共静态资源
|- environments-config     
|- |- environment.js            环境变量
public/ 公共静态资源
.gitignore                      git提交忽略内容
babel.config.js                 bable配置
package.json                    项目及工具的依赖配置文件
tsconfig.json                   ts配置
tslint.json                     ts检查配置
vue.config.js                   工程化配置
README.md                       项目说明文件

  1. 环境变量配置

1、运行命令请对应镜像项目/非镜像项目中的"scripts"设置。
2、若下方链接无权限访问,请找部门负责人配置权限。

  1. 非镜像项目环境变量配置:(https://gitlab.lunz.cn/mobile-development/wechat-wiki/wikis/Vue%E7%9B%B8%E5%85%B3/Vue-Cli2-%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E9%85%8D%E7%BD%AE(%E9%9D%9E%E9%95%9C%E5%83%8F%E9%A1%B9%E7%9B%AE%E9%85%8D%E7%BD%AE))
  2. 镜像项目配置环境变量配置:(https://gitlab.lunz.cn/mobile-development/wechat-wiki/wikis/Vue%E7%9B%B8%E5%85%B3/Vue-Cli2-%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E9%85%8D%E7%BD%AE(%E9%95%9C%E5%83%8F%E9%A1%B9%E7%9B%AE%E9%85%8D%E7%BD%AE))

  1. 风格指南(必看)

请参照vue官方风格指南

  1. 微信小程序规范
  2. 目录结构
docs/                           项目文档及编码指南
pages/                          项目源代码(主包)
|- package-main/                主包
|- |  |- home
|- |  |  |- shared              模块内公共部分
|- |  |  |- home-demo
|- |  |  |  |-home-demo.wxml    模板文件
|- |  |  |  |-home-demo.wxss    样式文件  
|- |  |  |  |-home-demo.json    配置文件
|- |  |  |  |-home-demo.js      脚本逻辑文件
|- |  |- order
|- |  |  |- shared              模块内公共部分
|- |  |  |- list
|- |  |  |- |- order-list.wxml  模板文件
|- |  |  |  |- order-list.wxss  样式文件  
|- |  |  |  |- order-list.json  配置文件
|- |  |  |  |- order-list.js    脚本逻辑文件
|- package-a/                   项目源代码(分包A)
|- |- shared/
|- |  |- components/            分包公共组件
|- |  |- assets                 静态资源
|- |- views/                    视图组件
|- package-b/                   项目源代码(分包B)
|- |- shared/
|- |  |- components/            分包公共组件
|- |  |- assets                 静态资源
|- |- views/                    视图组件(结构与主包相同)
|- shared/
|- |  |- login.js               登录方法封装
|- |  |- token.js               对token进行操作
|- |  |- assets/                应用程序资源 (imgs,wxss,js)
|- |  |- components/            主包公共组件
|- |  |-assets/                 公共静态资源(image,wxss)
|- |  |  |- style/                       
|- |  |  |  |- weui.wxss        基础样式库
|- |  |  |  |- common.wxss      公用样式
|- |  |  |- image/              图片资源
|- |  |  |- dist/               三方插件  
utils                           工具
|- filter.wxs                   公共过滤器
|- api
|- |- api.js                    公共api 
|- |- request.js                公共request封装    
|- |- env.js                    环境变量配置
app.js                          全局变量
app.json                        全局配置
app.wxss                        全局样式
sitemap.json                    页面索引配置文件
project.config.json             工具配置
README.md                       项目说明文件
  1. 小程序框架

git地址(https://gitlab.lunz.cn/wx-code/miniproject.git)

你可能感兴趣的:(前端代码规范)