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 CSS修改学习第五章 给“上传”添加样式
Feb 19 Javascript
JavaScript 一道字符串分解的题目
Aug 03 Javascript
JQuery获取各种宽度、高度(format函数)实例
Mar 04 Javascript
JavaScript限定复选框的选择个数示例代码
Aug 25 Javascript
js的匿名函数使用介绍
Dec 11 Javascript
javascript实现获取字符串hash值
May 10 Javascript
js改变html的原有内容实现方法
Oct 05 Javascript
js实现定时进度条完成后切换图片
Jan 04 Javascript
Js实现中国公民身份证号码有效性验证实例代码
May 03 Javascript
vue-cli中使用高德地图的方法示例
Mar 28 Javascript
详解vue v-model
Aug 31 Javascript
Vue中使用wangeditor富文本编辑的问题
Feb 07 Vue.js
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
php常用正则函数实例小结
2016/12/29 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
Alliance vs Liquid BO3 第一场2.13
2021/03/10 DOTA
Firefox div高度自适应
2009/04/28 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
2013/10/24 Javascript
form表单action提交的js部分与html部分
2014/01/07 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
原生js实现日期联动
2015/01/12 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
微信小程序开发之toast等弹框提示使用教程
2017/06/08 Javascript
JS中的三个循环小结
2017/06/20 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
解决node终端下运行js文件不支持ES6语法
2020/04/04 Javascript
vue实现PC端分辨率适配操作
2020/08/03 Javascript
浏览器JavaScript调试功能无法使用解决方案
2020/09/18 Javascript
Python实现的最近最少使用算法
2015/07/10 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
python计算日期之间的放假日期
2018/06/05 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
Python Process多进程实现过程
2019/10/22 Python
Python求解正态分布置信区间教程
2019/11/20 Python
解决pycharm最左侧Tool Buttons显示不全的问题
2019/12/17 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
Django分组聚合查询实例分享
2020/04/29 Python
台湾最大网路书店:博客来
2018/03/18 全球购物
大学校庆邀请函
2014/01/11 职场文书
上课玩手机检讨书
2014/02/08 职场文书
2014年路政工作总结
2014/12/10 职场文书
食堂管理制度范本
2015/08/04 职场文书
重阳节主题班会
2015/08/17 职场文书