前端工程化中的代码规范和commit规范

当我们编写代码的时候,由于任务时间紧,任务量重,需求不明确等等,会导致每个人的代码可能五花八门,潇洒不羁,可是当团队协作或者同事交接的过程中就会出现灾难性的,过多的争论和多余的解释,最后难免走上重构的道路。因此我们需要统一风格,不仅可以减少出 bug 的几率,而且能增加代码的可读性。

代码规范

对前端而言,通常我们会使用ESLint+Prettier来统一前端代码规范和美化代码风格

1. 插件介绍
首先,对应ESLint大多都很熟悉,用来进行代码的校验
Prettier 直译过来就是"更漂亮的",是一个能够完全统一你和同事代码风格的神器,对于刚开始没有协同的同事或者是后台同事转前端代码,相信你是看不懂的,也不可能一行一行去修改代码风格,这时候你应该想到Prettier,可以让你节省出时间来写更多的bug(不对,是修更多的bug),并且统一的代码风格能保证代码的可读性。

2. 实践出结果
(1)安装和配置Eslint

npm install eslint --save-dev 或 npm install eslint --save -g 进行全局安装

在项目根目录下新建文件.eslintrc并配置内容即可:
ps:了解更多配置,请查阅官网文档:https://eslint.bootcss.com/

module.exports = {
  root: true,
  parserOptions: {
    parser: 'babel-eslint'
  },
  env: {
    browser: true,
    es6: true
  },
  extends: [
    // https://github.com/standard/standard/blob/master/docs/RULES-en.md
    'standard',
    // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
    // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
    'plugin:vue/essential',
    "plugin:prettier/recommended",
  ],
  // required to lint *.vue files
  plugins: [
    'vue'
  ],
  // add your custom rules here
  rules: {
    "prettier/prettier": "error",
    // allow async-await
    'generator-star-spacing': 'off',
    // allow debugger during development
    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
  }
}

(2) ESLint 与 Prettier配合使用
安装和配置Prettier插件

npm install prettier --save-dev
npm install eslint-plugin-prettier --save-dev

根目录创建.prettierrc 文件,能够写入YML、JSON的配置格式,并且支持.yaml/.yml/.json/.js后缀;

{
	"printWidth": 80,
	"tabWidth": 2,
	"useTabs": true,
	"singleQuote": true,
	"semi": true,
	"trailingComma": "all",
	"bracketSpacing": true
}

VS Code 编辑器
安装插件:ESlint,Prettier,VS Code 插件配置统一在 preference setting user setting 设置 (快捷键: Command + ,),即可实现保存时自动格式化:

commit 规范

ESLint 与 Prettier确保我们把代码写的规范整理,可是总有漏网之鱼,当我们没有把eslint的错误提示修改完全,进而上传到git代码管理的话,那就麻烦大了,因此commit规范是eslint的最后一道屏障,当你提交的时候,如果错误提示没有修改完成或者代码没有统一风格,commit规范都是一一提示出来。
husky和lint-staged安装配置

npm install husky --save-dev
npm install lint-staged --save-dev

package.json下面配置

	"husky": {
		"hooks": {
			"pre-commit": "lint-staged",
			"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
		}
	},
	"lint-staged": {
		"{src,build,config}/**/*.{js,json,vue}": [
			"eslint --fix",
			"git add"
		],
		"src/style/**/*.scss": [
			"prettier --write",
			"git add"
		]
	},

项目根目录下新建.commitlintrc.js,规则配置如下

const chalk = require('chalk');
const message = process.env['HUSKY_GIT_PARAMS'];
const fs = require('fs');

const scopes = ['BAAS-*']; // 可以是好多种 scopes // test

function parseMessage(message) {
	const PATTERN = /^(\w+)(?:\(([^)]+)\))?\: (.+)$/;
	const match = PATTERN.exec(message);
	if (!match) {
		return null;
	}
	return {
		type: match[1] || null,
		scope: match[2] || null,
	};
}

function getScopesRule() {
	const messages = fs.readFileSync(message, { encoding: 'utf-8' });
	const parsed = parseMessage(messages.split('\n')[0]);

	console.log(`${chalk.red.bgBlueBright(' COMMIT MESSAGE HEAD ')}`, parsed);

	if (!parsed) {
		return [2, 'always', scopes];
	}
	const { scope, type } = parsed;
	if (
		scope &&
		!scopes.includes(scope) &&
		type !== 'release' &&
		!/BAAS-.\d+/.test(scope)
	) {
		return [2, 'always', scopes];
	} else {
		return [2, 'always', []];
	}
}

module.exports = {
	extends: ['@commitlint/config-conventional'],
	rules: {
		'type-empty': [2, 'never'],
		'type-enum': [
			2,
			'always',
			[
				'chore', // 管理各种依赖包,库,例如:安装,卸载,重装,升级
				'docs', // 文档更新
				'feat', // 新功能
				'bug', // bug 处理
				'refactor', // 重构,包括结构,逻辑,样式
				'style', // 样式处理
				'test', // 本地测试
			],
		],
		'type-case': [2, 'always', 'lower-case'],
		'scope-empty': [2, 'never'],
		'scope-enum': getScopesRule,
		'scope-case': [2, 'always', 'upper-case'],
		'subject-empty': [2, 'never'],
		'subject-full-stop': [2, 'never', '.'],
		'subject-case': [0, 'never'],
		'header-max-length': [2, 'always', 144],
	},
};

错误例子示范
在这里插入图片描述

总结

代码规范和 commit 规范是前端工程化中的必不可少的一环,兵马未动,粮草先行,只有把项目中的后勤保障到位,到时候书写代码,招兵买马,开疆扩土皆可信手拈来。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值