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 学习点滴记录
Apr 24 Javascript
在次封装easyui-Dialog插件实现代码
Nov 14 Javascript
jQuery选择器的工作原理和优化分析
Jul 25 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
Feb 10 Javascript
javascript操作select元素实例分析
Mar 27 Javascript
js鼠标跟随运动效果
Mar 11 Javascript
BootStrap表单控件之文本域textarea
May 23 Javascript
移动端触摸滑动插件swiper使用方法详解
Aug 11 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
Dec 08 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
Oct 26 Javascript
js模拟实现百度搜索
Jun 28 Javascript
浅谈JavaScript中this的指向问题
Jul 28 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
一个很不错的PHP翻页类
2009/06/01 PHP
PHP生成唯一的促销/优惠/折扣码(附源码)
2012/12/28 PHP
PHP中变量引用与变量销毁机制分析
2014/11/15 PHP
PHP将session信息存储到数据库的类实例
2015/03/04 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
PHP实现百度人脸识别
2019/05/06 PHP
laravel 模型查询按照whereIn排序的示例
2019/10/16 PHP
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
Javascript获取HTML静态页面参数传递值示例
2013/08/18 Javascript
前端必备神器 Snap.svg 弹动效果
2014/11/10 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
jsonp跨域请求实现示例
2017/03/13 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
多个vue子路由文件自动化合并的方法
2019/09/03 Javascript
Vue数字输入框组件的使用方法
2019/10/19 Javascript
jQuery实现飞机大战小游戏
2020/07/05 jQuery
[01:02:10]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第一局
2016/02/26 DOTA
python操作gmail实例
2015/01/14 Python
Python中的ConfigParser模块使用详解
2015/05/04 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
Python操作mongodb的9个步骤
2018/06/04 Python
Python骚操作之动态定义函数
2019/03/26 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
网络工程专业自荐信范文
2014/03/16 职场文书
文秘自荐信
2014/06/28 职场文书
Python爬虫入门案例之爬取二手房源数据
2021/10/16 Python
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL