写这篇文章的目的很明确,最近学习了代码规范的一些知识点,然后记录下来,以便后续查阅。
代码规范在我看来其实是很虚的,只要开发的同事之间约定好一些规范,大家严格按照这套规范来实行,那也不需要搭建什么代码规范的辅助工具了。
但是,人的精力和耐心是有限的,我们只能通过一些被动的“强制手段”,来限制大家。
B话不多说了,整活。
本文的实例代码 💻 下载地址。
初始化一个项目
代码规范是针对开发流程的,并不针对前端框架的选择,你甚至可以用原生JS开发,都是可以使用这套规范的。在此,笔者使用Vue CLI作为搭建这套代码规范的载体。(你也可以使用React相关的技术搭建)。
首先在命令行工具内输入vue -V,看看本地的Vue CLI工具的版本是多少,笔者如下:
注意,4.5.13这个版本,初始化 Vue 项目,Vue 的版本是3.0.0,而最新的3.2.x版本里,才可以使用script setup能力。
接下来找一个空的文件夹,通过Vue CLI初始化一个项目,如下所示:
vue create vue-demo
选择 Manually select features,自定义选择,选项如下:
注意,这里 ESLint 的规范使用 Starndard 规范,通过修改 .eslintrc.js 文件的 rules 属性,来控制你需要的规则。
通过npm run serve指令启动项目,我们尝试修改views/Home.vue文件如下:
name: "Home", // 将单引号改成双引号
控制台会报错如下所示:
红色箭头出表示规则的属性值,这里是quotes表示引号的问题,必须使用单引号,这里是严格的报错,不符合规范便提示错误。我们可以通过修改.eslintrc.js中的rules属性,来控制报错的等级,如下所示:
// .eslintrc.jsmodule.exports = {root: true, // 表示当前目录即为根目录,ESLint 规则将被限制到该目录下// env 表示启用 ESLint 检测的环境env: {node: true, // 在 node 环境下启动 ESLint 检测},// ESLint 中基础配置需要继承的配置extends: ['plugin:vue/vue3-essential','@vue/standard'],// 解析器parserOptions: {parser: 'babel-eslint'},// 需要修改的启用规则及其各自的错误级别/*** "off" 或 0 - 关闭配置* "warn" 或 1 - 开启规则,使用警告级别的错误:warn(不会导致程序退出)* "error" 或 2 - 开启规则,使用错误级别的错误:error(当被触发的时候,程序会退出)*/rules: {'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off','no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off','quotes': process.env.NODE_ENV === 'production' ? 'warn' : 'off'// 这里添加 quotes 属性规则,关闭该配置}}
重新启动项目,双引号的错误提示就不会再报错:
以此类推,当你想要某些规则不被严格执行的时候,就在rules属性中添加需要的配置。
prettierrc
程序员都是“懒人”,我现在想要在保存的时候自动执行格式化,而不是手动去修改。
首先我们需要安装VSCode插件,如下所示:
安装完成后,在根目录新建一个.prettierrc文件,如所示:
{"semi": false, // 清理句末的分号"singleQuote": true, // 严格单引号"trailingComma": "none" // 多行对象下,最后一行尾部去除逗号}
重启VSCode后,打开views/Home.vue,右键选择如下:
点击后,双引号便会被格式化为单引号。
如果你的VSCode中装有多个规则,请先选择使用...格式化文档,选择如下所示:
通过它来格式化代码。
笔者希望通过保存操作,直接格式化当前脚本的代码。首先,找到VSCode左下角的设置图标,点击“设置”,搜索如下所示:
勾选上上图中的箭头选项,每次保存的时候,便会自动格式化代码。如下所示:
默认执行的是项目根目录下的 .prettierrc 文件,建议每个项目都设置一下。
git commit 提交规范
开发项目的过程中,免不了出现多人合作的情况。这种情况下,每个人提交的代码差异性很大,有可能会出现交叉修改互相代码的情况。此事,git commit提交信息的规范,显得尤为重要。
目前市面上比较流行的提交规范如下链接:
https://www.conventionalcommits.org/zh-hans/v1.0.0/
上述位约定式的提交规范,看起来非常麻烦的样子。需要引入一个插件解决这个提交的问题。Commitizen工具,简称是cz。首先我们要全局安装它:
npm i -g commitizen@4.2.4 // 姑且安装笔者指定的版本,避免不必要的麻烦,下面就不赘述了。
在项目内安装插件:
npm i cz-customizable@6.3.0 -D
并在package.json配置执行的路径如下:
"config": {"commitizen": {"path": "node_modules/cz-customizable"}}
紧接着,在项目根目录下新建配置文件.cz-config.js,把配置参数写入:
module.exports = {// 可选类型types: [{ value: 'feat', name: 'feat: 新功能' },{ value: 'fix', name: 'fix: 修复' },{ value: 'docs', name: 'docs: 文档变更' },{ value: 'style', name: 'style: 代码格式(不影响代码运行的变动)' },{value: 'refactor',name: 'refactor: 重构(既不是增加features,也不是修复bug)'},{ value: 'pref', name: 'pref: 性能优化' },{ value: 'test', name: 'test: 增加测试' },{ value: 'chore', name: 'chore: 构建过程或辅助工具的变动' },{ value: 'revert', name: 'revert: 回退' },{ value: 'build', name: 'build: 打包' },],messages: {type: '请选择提交类型',customScope: '请输入修改范围(可选):',subject: '请简要描述提交(必填):',body: '请输入详细描述(可选):',footer: '请输入要关闭的issue(可选):',confirmCommit: '确认使用以上信息提及?(y/n)'},// 跳过问题skipQuestions: ['body', 'footer'],subjectLimit: 72}
接下来便可以通过 git cz指令,代替之前的git commit指令,输入git cz周玲,提示如下表示成功:
husky + commitlint
你不能保证每个开发者本地都配置了commitizen,所以需要在他执行git commit -m 'xxx'的时候,提醒他要按照规范提交代码。
首先安装需要的依赖,安装到开发环境下:
yarn add @commitlint/config-conventional@12.1.4 @commitlint/cli@12.1.4 -D
在根目录新建检查提交需要的配置,新建文件commitlint.config.js内容如下:
module.exports = {// 继承的规则extends: ['@commitlint/config-conventional'],// 定义规则类型roles: {// type 的类型定义:表示 git 提交的type必须在以下的类型中'type-enum': [// 当前验证的错误级别2,// 在上面情况下进行验证'always',// 范型里面的内容是什么['feat', 'fix', 'docs', 'style', 'refactor', 'pref', 'test', 'chore', 'revert', 'build']],// subject 大小写不做校验'subject-case': [0]}}
上面的配置大致是,在任何情况下,提交的内容没有上面数组中的内容,表示为“不规范”,给予“错误级别”的提醒。
再结合husky,在开发环境下安装husky:
yarn add husky -D
然后再执行npx husky install,会在根目录生成.husky文件夹。再执行指令npm set-script prepare "husky",目的是在package.json文件下添加一条script属性,如下:
然后执行npm run prepare,再执行如下指令,让husky去跑commit检测规范:
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'
上述指令的目的,是在.husky文件夹下新建一个commit-msg文件,写入npx --no-install commitlint --edit "$1"指令。
随后我们尝试提交一下代码,如下所示表示成功检测到不符合commit的提交规范:
我们需要通过git cz去完成提交。
husky + eslint
ESLint + Prettier 的校验代码规范模式,只能在本地执行。如果有些同学本地没有安装这些插件,提交代码的话,会把线上的代码搞得一团糟。所以,这里通过husky结合eslint,在提交代码的时候,进行校验。如果不符合eslint规范,则报错。
再添加一个husky的勾子,执行如下指令,在.husky文件夹下添加新的文件pre-commit:
npx husky add .husky/pre-commit "npx eslint --ext .js,.vue src"
上述指令的意思就是在提交之前,验证一下js和vue结尾的文件。
笔者故意将代码格式写错,如下所示:
提交代码git cz,会出现如下报错:
这就是在提交代码的时候,对代码规范进行检测。
光检测还不算完事,我已经懒到想让插件帮我自动修复这些出现警告的代码,通过lint-staged自动修复它们。
首先安装插件:
yarn add lint-staged@9.5.0 -D
修改package.json如下所示:
"gitHooks": {"pre-commit": "lint-staged"},"lint-staged": {"src/**/*.{js,vue}": ["eslint --fix","git add"]}
紧接着修改./husky/pre-commit如下:
#!/bin/sh. "$(dirname "$0")/_/husky.sh"npx lint-staged
当提交代码后,会先检测代码是否符合eslint规范,如果不符合,会被自动修复。
