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 相关文章推荐
JavaScript OOP面向对象介绍
Dec 02 Javascript
js点击页面其它地方将某个显示的DIV隐藏
Jul 12 Javascript
js获取多个tagname的节点数组
Sep 22 Javascript
jquery实现选中单选按钮下拉伸缩效果
Aug 06 Javascript
vue实现简单实时汇率计算功能
Jan 15 Javascript
js canvas实现放大镜查看图片功能
Jun 08 Javascript
Webpack执行命令参数详解
Jun 17 Javascript
js 判断一个数字是不是2的n次方幂的实例
Nov 26 Javascript
angularjs中判断ng-repeat是否迭代完的实例
Sep 12 Javascript
layer提示框添加多个按钮选择的实例
Sep 12 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
Nov 13 Javascript
微信小程序实现比较功能的方法汇总(五种方法)
Mar 07 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
如何分别全角和半角以避免乱码
2006/10/09 PHP
如何在PHP中进行身份认证
2006/10/09 PHP
php 操作excel文件的方法小结
2009/12/31 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
浅谈php serialize()与unserialize()的用法
2013/06/05 PHP
PHP 读取大文件并显示的简单实例(推荐)
2016/08/12 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
2017/03/28 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
2012/07/03 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
深入解析AngularJS框架中$scope的作用与生命周期
2016/03/05 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
看看“疫苗查询”小程序有温度的代码
2018/07/31 Javascript
Canvas实现微信红包照片效果
2018/08/21 Javascript
详解JavaScript中分解数字的三种方法
2021/01/05 Javascript
[01:25]DOTA2自定义游戏灵园鬼域等你踏足
2015/10/30 DOTA
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
详解Python中的条件判断语句
2015/05/14 Python
Python 中 list 的各项操作技巧
2017/04/13 Python
python实现图片批量压缩程序
2018/07/23 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
python 实现倒排索引的方法
2018/12/25 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
联想西班牙官网:Lenovo西班牙
2018/08/28 全球购物
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
一套VC试题
2015/01/23 面试题
幼儿园园长岗位职责
2013/11/26 职场文书
环保建议书
2014/03/12 职场文书
互联网电子商务专业毕业生求职信
2014/03/18 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
乡镇科协工作总结2015
2015/05/19 职场文书
《赵州桥》教学反思
2016/02/17 职场文书
docker-compose部署Yapi的方法
2022/04/08 Servers