使用eslint和githooks统一前端风格的技巧


Posted in Javascript onJuly 29, 2020

前端团队开发时,是必须要有一个统一的前端规范的,用一套统一的规范来规范开发者,可以有效的避免在提交和拉取代码时造成的代码错乱问题,这边文章主要讲下我们团队的代码规范使用,eslint结合vscode保存时自动修复不规范代码,githooks提交代码时的eslint校验和信息规范。

添加eslint

vue-cli3构建一个新项目(包含eslint模块),完成后添加 .eslintrc.js 配置如下:

module.exports = {
 root: true,
 parserOptions: {
 parser: 'babel-eslint',
 sourceType: 'module'
 },
 env: {
 browser: true
 },
 // https://github.com/standard/standard/blob/master/docs/RULES-en.md
 extends: [
 'plugin:vue/base'
 ],
 // required to lint *.vue files
 plugins: [
 'vue'
 ],
 // add your custom rules here
 'rules': {
 // allow paren-less arrow functions
 'indent': [2, 2], // 两个空格的缩进
 'quotes': [2, 'single'], // js必须使用单引号
 'linebreak-style': [2, 'unix'], // 换行风格 unix/windows
 'semi': [2, 'never'], // 语句强制分号结尾
 // 'no-console': [1], // 不允许console语句
 'no-unused-vars': [1], // 声明了变量但是没有使用检测
 'space-unary-ops': [1, { 'words': true, 'nonwords': false }], // 一元运算符的前/后要不要加空格
 'brace-style': [2, '1tbs', { 'allowSingleLine': false }], // 大括号风格
 'comma-spacing': [2, { 'before': false, 'after': true }], // 逗号后有空格,前没有空格
 'comma-style': [2, 'last'], // 逗号跟在结尾
 'key-spacing': [2, { 'beforeColon': false, 'afterColon': true }], // 对象字面量中冒号的前后空格
 'lines-around-comment': [ // 行前/行后备注
  2, {
  'beforeBlockComment': false, // 段注释的前后
  'beforeLineComment': false, // 行注释的前面
  'afterBlockComment': false, // 块注释的后面
  'afterLineComment': false, // 行注释的后面
  'allowBlockStart': true,
  'allowObjectStart': true,
  'allowArrayStart': true
  }],
 'max-depth': [2, 4], // 代码最多允许4层嵌套
 'max-len': [1, 1000, 2],
 'max-nested-callbacks': [2, 3], // 回调嵌套深度
 'max-params': [2, 5], // 函数最多只能有5个参数
 'max-statements': [1, 80], // 单个函数最多80条语句
 'no-array-constructor': [2], // 禁止使用数组构造器
 'no-lonely-if': 2, // // 禁止else语句内只有if语句
 'no-multiple-empty-lines': [2, { 'max': 3, 'maxEOF': 1 }], // 空行最多不能超过2行
 'no-nested-ternary': 2, // 不使用嵌套的三元表达式
 'no-spaced-func': 2, // 函数调用时 函数名与()之间不能有空格
 'no-trailing-spaces': 2, // 一行结束后面不要有空格
 'no-unneeded-ternary': 2, // 禁止不必要的嵌套 var isYes = answer === 1 ? true : false;简单的判断用三元表达式代替
 'object-curly-spacing': [2, 'always', { // 大括号内是否允许不必要的空格 always始终允许;never始终不允许
  'objectsInObjects': false,
  'arraysInObjects': false
 }],
 'arrow-spacing': 2, // =>的前/后括号
 'block-scoped-var': 2, // 块语句中使用var
 'no-dupe-class-members': 2,
 // 'no-var': 1, // 禁用var,用let和const代替
 'object-shorthand': [1, 'always'], // 强制对象字面量缩写语法
 'array-bracket-spacing': [2, 'never'], // 是否允许非空数组里面有多余的空格
 'operator-linebreak': [2, 'after'], // 换行时运算符在行尾还是行首
 // 'semi-spacing': [2, { 'before': false, 'after': false }], // 分号前后空格
 'keyword-spacing': ['error'],
 'space-before-blocks': 2, // 不以新行开始的块{前面要不要有空格
 'block-spacing': [2, 'always'],
 'space-before-function-paren': [2, 'never'], // 函数定义时括号前面要不要有空格
 'space-in-parens': [2, 'never'], // 小括号里面要不要有空格
 'spaced-comment': [1, 'always',
  {
  'exceptions': ['-', '*', '+']
  }], // 注释风格要不要有空格什么的
 'arrow-parens': 0,
 // allow async-await
 'generator-star-spacing': 0,
 // allow debugger during development
 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0
 },
 globals: {
 '$': false,
 'jquery': false,
 'ActiveXObject': false,
 'arbor': true,
 'layer': false
 }
}

运行 npm run lint 会给出报错,运行 npm run serve 也会对项目进行eslint校验,无法通过校验就会报错

使用eslint和githooks统一前端风格的技巧

可以结合vscode的eslint插件快速修复无法通过验证的代码,首先下载插件,然后更改setting.json配置文件,具体如下:

"eslint.validate": [
 "javascript",
 "javascriptreact",
 "vue-html"
],
"eslint.run": "onSave",
"editor.codeActionsOnSave": {
 "source.fixAll.eslint": true
}

配置完成之后重启vscode,在编辑代码的时候如果未符合eslint的校验,保存时会自动修复代码。

添加git hooks

前端团队开发中如果没有做正确的校验就提交了代码,拉取代码时会导致很多地方爆红不符合定制的开发规范,因此可以在提交代码时做些限制.在 git 提交代码时,会触发一些列的钩子函数,可以通过 husky 这个git hooks的工具来进行代码提交校验,需要先安装依赖包 cnpm i -D husky lint-staged @commitlint/config-conventional @commitlint/cli .然后在package.json中添加如下代码:

// package.json
"husky": {
 "hooks": {
 "pre-commit": "lint-staged",// 在pre-commit阶段运行下面配置的校验功能
 "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" // 这个是规范提交的信息的,结合commitlint.config.js使用
 }
},
"lint-staged": {
 "src/**/*.{js,vue}": [
 "npm run lint",
 "git add ."
 ]
}
// commitlint.config.js
// 参考的官方配置,提交的信息必须按照下面规范书写,类似`git commit -m 'feat: 添加eslint'`
module.exports = {
 parserPreset: 'conventional-changelog-conventionalcommits',
 rules: {
 'body-leading-blank': [1, 'always'],
 'body-max-line-length': [2, 'always', 100],
 'footer-leading-blank': [1, 'always'],
 'footer-max-line-length': [2, 'always', 100],
 'header-max-length': [2, 'always', 100],
 'scope-case': [2, 'always', 'lower-case'],
 'subject-case': [
  2,
  'never',
  ['sentence-case', 'start-case', 'pascal-case', 'upper-case']
 ],
 'subject-empty': [2, 'never'],
 'subject-full-stop': [2, 'never', '.'],
 'type-case': [2, 'always', 'lower-case'],
 'type-empty': [2, 'never'],
 'type-enum': [
  2,
  'always',
  [
  'build',
  'chore',
  'ci',
  'docs',
  'feat',
  'fix',
  'perf',
  'refactor',
  'revert',
  'style',
  'test'
  ]
 ]
 }
}

接下来修改文件提交代码,最后commit的时候就会对已修改文件进行校验,如果eslint校验不通过,或者commit信息不符合规范都是不能提交代码的,以上步骤已经可以很好的改善代码和提交信息规范,这对于团队项目开发能够很大对提高代码质量。

总结

到此这篇关于使用eslint和githooks统一前端风格的技巧的文章就介绍到这了,更多相关eslint和githooks统一前端风格内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
js 操作符实例代码
Oct 24 Javascript
jquery实现滑动图片自己测试的例子
Nov 05 Javascript
js导入导出excel(实例代码)
Nov 25 Javascript
Javascript中匿名函数的多种调用方式总结
Dec 06 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
Dec 08 Javascript
js动态调用css属性的小规律及实例说明
Dec 28 Javascript
Js数组排序函数sort()介绍
Jun 08 Javascript
JavaScript实现广告的关闭与显示效果实例
Jul 02 Javascript
Fullpage.js固定导航栏-实现定位导航栏
Mar 17 Javascript
关于webuploader插件使用过程遇到的小问题
Nov 07 Javascript
vue自定义指令directive实例详解
Jan 17 Javascript
通过javascript实现段落的收缩与展开
Jun 26 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
Jul 29 #Javascript
小程序实现列表展开收起效果
Jul 29 #Javascript
jquery实现简单自动轮播图效果
Jul 29 #jQuery
解决vue-photo-preview 异步图片放大失效的问题
Jul 29 #Javascript
vue 组件间的通信之子组件向父组件传值的方式
Jul 29 #Javascript
vue-preview动态获取图片宽高并增加旋转功能的实现
Jul 29 #Javascript
vuex管理状态仓库使用详解
Jul 29 #Javascript
You might like
ExtJS与PHP、MySQL实现存储的方法
2010/04/02 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
2013/08/01 PHP
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
javascript是怎么继承的介绍
2012/01/05 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
javascript实现的固定位置悬浮窗口实例
2015/04/30 Javascript
RequireJS入门一之实现第一个例子
2015/09/30 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
2018/02/08 Javascript
浅谈node中的cluster集群
2018/06/02 Javascript
详解Angular6 热加载配置方案
2018/08/18 Javascript
python逆序打印各位数字的方法
2018/06/25 Python
Flask框架Flask-Login用法分析
2018/07/23 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
2019/02/21 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
python安装scipy的方法步骤
2019/06/26 Python
python中的&&及||的实现示例
2019/08/07 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
Django vue前后端分离整合过程解析
2020/11/20 Python
html5中JavaScript removeChild 删除所有节点
2014/05/16 HTML / CSS
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
EJB的几种类型
2012/08/15 面试题
销售辞职报告范文
2014/01/12 职场文书
三下乡活动方案
2014/01/31 职场文书
工商行政管理专业求职书
2014/05/23 职场文书
工商管理专业毕业生自我鉴定2014
2014/10/04 职场文书
个人作风纪律整顿整改措施
2014/10/25 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
校车司机安全责任书
2015/05/11 职场文书
go语言基础 seek光标位置os包的使用
2021/05/09 Golang
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL
html5+实现plus.io进行拍照和图片等获取
2022/06/01 HTML / CSS
MySQL提升大量数据查询效率的优化神器
2022/07/07 MySQL