Node.js如何自动审核团队的代码


Posted in Javascript onJuly 20, 2016

前言

在团队开发中,无论是写前端(js,css,html) ,还是后端 ,我们常常需要解决一个问题:如何统一团队代码风格。 这篇文章主要是使用pre-git , eslint , js-beautify 实现代码风格控制。

下面分别介绍这三个工具和使用方式:

pre-git

该工具能实现git hook的功能,在git的流程中插入一些自定义行为,例如commit之前执行代码检测,如果不通过则报错。

eslint

代码格式审核工具,可以随意组合配置各种风格,用于组成团队的代码统一规范。

js-beautiful

js代码整理、美化工具。

然后这三个工具互相配合就形成了以下效果:

1.项目组长定义好eslint的代码规范。

2.使用pre-git在commit之前运行eslint代码监测和js-beautiful代码美化

3.如果通过则自动"git add ." ,最后允许push。

实现

一:npm安装上述工具

$ npm install eslint js-beautify pre-git --save-dev

二:工具的配置

在根目录新建.eslintrc.json文件,并且把规范配置好,一下给一个精简版:

注意:如需更多检测,请到eslint官网查看

{
  "rules": {
    "comma-dangle": ["error", "never"],
    "arrow-body-style": ["warn", "always"],
    "no-const-assign": ["error"]
    },
  "parserOptions": {
    "ecmaVersion": 6
  }
}

因测试,bash 中使用js-beautiful递归多层文件的时候总出现错误,所以由一脚本来进行代码美化:

beatufyjs.js

const fs = require( 'fs' );
const path = require( 'path' );
const child_process = require( 'child_process' );

for( let arg of process.argv.splice( 2 ) ) {
  let pathName = path.join( process.cwd(),arg );
  if( isFile( path.join( process.cwd(),arg ) ) ) {
    child_process.exec( `./node_modules/js-beautify/js/bin/js-beautify.js -P -E -j -a ${pathName} -r` , function( error, msg, stderr ) {
      console.log( msg.replace('\\\\n','') );
    } );
  } else {
    read_dir( pathName );
  }
}

function read_dir( dir ){
  let files = fs.readdirSync( dir );
  for( let file of files ) {
    let pathName = path.join( dir,file );
    if( isFile( pathName ) ) {
      child_process.exec( `./node_modules/js-beautify/js/bin/js-beautify.js -P -E -j -a ${pathName} -r` , function( error, msg, stderr ) {
        console.log( msg.replace( '\\\\n','') );
      } );
    } else {
      read_dir( pathName );
    }
  }
}

function isFile( path ){ 
  return exists( path ) && fs.statSync( path ).isFile(); 
} 

function exists( path ){ 
   return fs.existsSync( path ) || path.existsSync( path ); 
}

三:使用上述工具

在package.json文件中配置:

{
 "name": "demo",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
  "lint": "./node_modules/.bin/eslint routes runtime utils libs --quiet",
  "lint-fix": "./node_modules/.bin/eslint routes runtime utils libs --quiet --fix",
  "js-beautify": "node --harmony --use_strict ./bin/beatufyjs.js libs middlewares index.js "
 },
 "author": "kelvv",
 "license": "ISC",
 "config": {
  "pre-git": {
   "commit-msg": "",
   "pre-commit": [
    "npm run lint-fix",
    "npm run js-beautify",
    "git add ."
   ],
   "pre-push": [],
   "post-commit": [],
   "post-checkout": [],
   "post-merge": []
  }
 },
 "devDependencies": {
  "eslint": "^2.12.0",
  "js-beautify": "^1.6.3",
  "pre-git": "^3.9.1"
 }
}

此时当你修改其中一个文件,然后"git add && git commit -m 'msg' "的时候,pre-commit中的三条命令就会执行,如果中途有错就会停止提交,修改完毕后再继续提交。

有一点需要注意的是,有的格式问题不足以报错的话,改方法会自动修改优化代码,并且自动添加修改,最后一步,执行:git push即可!可以结合单元测试,更佳

总结

以上就是为大家整理的如何用Node.js自动审核团队的代码的全部内容,有需要的可以进行参考学习。

Javascript 相关文章推荐
js 颜色选择器(兼容firefox)
Mar 05 Javascript
使用JQUERY Tabs插件宿主IFRAMES
Jan 01 Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
Apr 26 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
Jun 08 Javascript
js模仿hover的具体实现代码
Dec 30 Javascript
javascript使用数组的push方法完成快速排序
Sep 15 Javascript
教你用javascript实现随机标签云效果_附代码
Mar 16 Javascript
基于javascript制作经典传统的拼图游戏
Mar 22 Javascript
浅谈AngularJs指令之scope属性详解
Oct 24 Javascript
js实现随机点名系统(实例讲解)
Oct 18 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
May 25 Javascript
layui异步加载table表中某一列数据的例子
Sep 16 Javascript
js只执行1次的函数示例
Jul 20 #Javascript
JQuery为元素添加样式的实现方法
Jul 20 #Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
Jul 20 #Javascript
javaScript给元素添加多个class的简单实现
Jul 20 #Javascript
JavaScript中数组的22种方法必学(推荐)
Jul 20 #Javascript
JavaScript DOM 对象深入了解
Jul 20 #Javascript
JavaScript中的splice方法用法详解
Jul 20 #Javascript
You might like
实用函数10
2007/11/08 PHP
php出现Cannot modify header information问题的解决方法大全
2008/04/09 PHP
10条PHP编程习惯助你找工作
2008/09/29 PHP
redis 队列操作的例子(php)
2012/04/12 PHP
js 操作select与option(示例讲解)
2013/12/20 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
JavaScript DOM进阶方法
2015/04/13 Javascript
浅谈Sizzle的“编译原理”
2015/04/14 Javascript
JavaScript用select实现日期控件
2015/07/17 Javascript
莱鸟介绍javascript onclick事件
2016/01/06 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
vue axios整合使用全攻略
2018/05/24 Javascript
js中arguments对象的深入理解
2019/05/14 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
js实现文字头像的生成代码
2020/03/07 Javascript
对python字典元素的添加与修改方法详解
2018/07/06 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
Python设计模式之模板方法模式实例详解
2019/01/17 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
船餐厅和泰晤士河餐饮游轮:Bateaux London
2018/03/19 全球购物
设计师珠宝:Ylang 23
2018/05/11 全球购物
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
英国网上超市:Ocado
2020/03/05 全球购物
幼儿园毕业园长感言
2014/02/24 职场文书
计算机专业自荐信范文
2014/05/28 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
公证委托书
2014/08/01 职场文书
全国爱牙日活动总结
2015/02/05 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
大学生学生会工作总结2015
2015/05/26 职场文书
2015中秋祝酒词
2015/08/12 职场文书
使用 JavaScript 制作页面效果
2021/04/21 Javascript
Python极值整数的边界探讨分析
2021/09/15 Python