Editorconfig 基本规范

说明

EditorConfig 有助于为不同 IDE 编辑器(VSCode、WebStorm等)上处理同一项目的多个开发人员维护一致的编码风格(比如tab键,是多少个空格等)。

很多项目都有这个进行管理
image.png

创建

直接在项目根目录下,创建一个 .editorconfig 文件就可以了,然后写入如下代码

  1. # http://editorconfig.org
  2. root = true # 表示这个文件是不是在项目的根目录下
  3. [*] # 表示下面的规则,本项目中的所有文件适用
  4. charset = utf-8 # 设置文件字符集为 utf-8
  5. indent_style = space # 缩进风格(tab | space)
  6. indent_size = 2 # 缩进大小
  7. end_of_line = lf # 控制换行类型(lf | cr | crlf)
  8. trim_trailing_whitespace = true # 去除行首的任意空白字符
  9. insert_final_newline = true # 始终在文件末尾插入一个新行
  10. [*.md] # 表示下面的规则,仅 md 文件适用
  11. max_line_length = off
  12. trim_trailing_whitespace = false

如何验证

webstorm 自动会读取这个文件;
VSCode需要安装一个插件:EditorConfig for VS Code

项目 - 代码规范 - 图2

prettier 代码格式化

说明

Prettier 是一款强大的代码格式化工具,支持 JavaScript、TypeScript、CSS、SCSS、Less、JSX、Angular、Vue、GraphQL、JSON、Markdown 等语言,基本上前端能用到的文件格式它都可以搞定,是当下最流行的代码格式化工具。
image.png (使用前)
image.png (使用后)

1、安装

  1. npm install prettier -D

2、配置.prettierrc文件

在项目根目录下创建一个 .prettierrc文件
image.png

  • useTabs:使用tab缩进还是空格缩进,选择false;
  • tabWidth:tab是空格的情况下,是几个空格,选择2个;
  • printWidth:当行字符的长度,推荐80,也有人喜欢100或者120;
  • singleQuote:使用单引号还是双引号,选择true,使用单引号;
  • trailingComma:在多行输入的尾逗号是否添加,设置为 none
  • semi:语句末尾是否要加分号,默认值true,选择false表示不加;
  1. {
  2. "useTabs": false,
  3. "tabWidth": 2,
  4. "printWidth": 80,
  5. "singleQuote": true,
  6. "trailingComma": "none",
  7. "semi": false
  8. }

3、创建.prettierignore忽略文件

在项目根目录下创建.prettierignore 文件,项目里面有的文件不想进行格式化,在这里配置忽略
image.png

  1. /dist/*
  2. .local
  3. .output.js
  4. /node_modules/**
  5. **/*.svg
  6. **/*.sh
  7. /public/*

4、VSCode需要安装prettier的插件

安装插件后,只是保存的时候自动帮你格式化。但实际上项目下有很多文件都是写好了的,不可能每个都去保存一次,所以才需要一次性修改的命令

项目 - 代码规范 - 图7

其他编辑器可以通过下面的命令格式化,一样的,都会按照你给定的规则格式化。

5、测试prettier是否生效

测试一:在代码中保存代码(VSCode 插件,上面的);
测试二:配置一次性修改的命令;

在package.json中配置一个scripts:

  1. "prettier": "prettier --write ."

image.png
然后再命令行里面运行,就会一次性修改项目里面的所有没忽略的文件
image.png

ESLint 代码规范检测

为了在写代码的时候对代码格式进行约束,而安装ESLint。只要不符合规范就会立刻报错
https://www.jianshu.com/p/ad1e46faaea2

安装

在前面创建项目的时候,我们就选择了ESLint,所以Vue会默认帮助我们配置需要的ESLint环境。
image.png
extends 就是配置好的规范

VSCode插件

VSCode需要安装ESLint插件,可以更快得在你写代码的时候就提示

项目 - 代码规范 - 图11

解决eslint和prettier冲突的问题

安装插件:(vue在创建项目时,如果选择prettier,那么这两个插件会自动安装)

  1. npm i eslint-plugin-prettier eslint-config-prettier -D

添加prettier插件:

  1. extends: [
  2. "plugin:vue/vue3-essential",
  3. "eslint:recommended",
  4. "@vue/typescript/recommended",
  5. "@vue/prettier",
  6. "@vue/prettier/@typescript-eslint",
  7. 'plugin:prettier/recommended'
  8. ],

重启vscode,就会启用prettier 的规则。

上面的规则,都是继承关系,如果有重复的,最后一个会生效。

报错

image.png
不符合规范就会报错,如果你确定我就是要这样用,可以修改规则。

你直接复制上图位置的这个规则代码,放到配置文件里面的rules,后面补个off,就关掉了。

image.png

git Husky 代码上传验证

问题

虽然我们已经要求项目使用eslint了,但是不能保证组员提交代码之前都将eslint中的问题解决掉了:

  • 也就是我们希望保证代码仓库中的代码都是符合eslint规范的;
  • 那么我们需要在组员执行 git commit 命令的时候对其进行校验,如果不符合eslint规范,那么自动通过规范进行修复;

方案

那么如何做到这一点呢?可以通过Husky工具:

  • husky是一个git hook工具,可以帮助我们触发git提交的各个阶段:pre-commit、commit-msg、pre-push

如何使用husky呢?

安装

这里我们可以使用自动配置命令:

  1. npx husky-init && npm install
  2. 或者
  3. npx husky-init '&&' npm install

上面的安装会自动做三件事:

1.安装husky相关的依赖:

项目 - 代码规范 - 图14

2.在项目目录下创建 .husky 文件夹:

  1. npx huksy install

项目 - 代码规范 - 图15

3.在package.json中添加一个脚本:

项目 - 代码规范 - 图16

接下来,我们需要去完成一个操作:在进行commit时,执行lint脚本:
pre-commit就是拦截git的提交,然后执行这个文件内的东西,最后再提交。

项目 - 代码规范 - 图17
image.png(就是提交前自动运行这段代码,这个是通过ESLint对代码进行格式化)
这个时候我们执行git commit的时候会自动对代码进行lint校验。

结果:
image.png (git提交前)
image.png (提交)
image.png(提交后,自动修改)
是因为自动执行了如下,修复了代码
image.png

git 提交规范

背景

git 提交代码时,我们会写上修改了什么文件。但只是约定,并非强制。

比如一些项目,你会看到一些别人提交的信息,会写明这次是fix(修复),还是其他的。

项目 - 代码规范 - 图23

但是如果每次手动来编写这些是比较麻烦的事情,我们可以使用一个工具:Commitizen

  • Commitizen 是一个帮助我们编写规范 commit message 的工具;

安装

1、安装Commitizen

  1. npm install commitizen -D

2、安装cz-conventional-changelog,并且初始化cz-conventional-changelog:

  1. npx commitizen init cz-conventional-changelog --save-dev --save-exact

这个命令会帮助我们安装cz-conventional-changelog:

项目 - 代码规范 - 图24

并且在package.json中进行配置:

项目 - 代码规范 - 图25

使用

先用git add . 把修改的提交到暂缓区
image.png
image.png(也可以在这里添加脚本,然后执行npm run commit,代替了npx cz)
这个时候我们提交代码需要使用 npx cz
image.png

  • 第一步是选择type,本次更新的类型 | Type | 作用 | | —- | —- | | feat | 新增特性 (feature) | | fix | 修复 Bug(bug fix) | | docs | 修改文档 (documentation) | | style | 代码格式修改(white-space, formatting, missing semi colons, etc) | | refactor | 代码重构(refactor) | | perf | 改善性能(A code change that improves performance) | | test | 测试(when adding missing tests) | | build | 变更项目构建或外部依赖(例如 scopes: webpack、gulp、npm 等) | | ci | 更改持续集成软件的配置文件和 package 中的 scripts 命令,例如 scopes: Travis, Circle 等 | | chore | 变更构建流程或辅助工具(比如更改测试环境) | | revert | 代码回退 |
  • 第二步选择本次修改的范围(作用域)

项目 - 代码规范 - 图29
可以填写组件名或者文件夹名

  • 第三步选择提交的信息

项目 - 代码规范 - 图30

  • 第四步提交详细的描述信息

项目 - 代码规范 - 图31

  • 第五步是否是一次重大的更改

项目 - 代码规范 - 图32

  • 第六步是否影响某个open issue

项目 - 代码规范 - 图33
多用于开源项目,就是github上的issue

我们也可以在scripts中构建一个命令来执行 cz:

项目 - 代码规范 - 图34

验证

如果我们按照cz来规范了提交风格,但是依然有同事通过 git commit 按照不规范的格式提交应该怎么办呢?

  • 我们可以通过commitlint来限制提交;

1.安装 @commitlint/config-conventional 和 @commitlint/cli

  1. npm i @commitlint/config-conventional @commitlint/cli -D

2.在根目录创建commitlint.config.js文件,配置commitlint

  1. module.exports = {
  2. extends: ['@commitlint/config-conventional']
  3. }

3.使用husky生成commit-msg文件,验证提交信息:

  1. npx husky add .husky/commit-msg "npx --no-install commitlint --edit $1"

image.png

如果不按规范提交,就会提交失败
image.png
这样就可以让组员按规范提交。