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 相关文章推荐
xml文档转换工具,附图表例子(hta)
Nov 17 Javascript
Javascript中call的两种用法实例
Dec 13 Javascript
JavaScript分秒倒计时器实现方法
Feb 02 Javascript
基于jquery animate操作css样式属性小结
Nov 27 Javascript
js不间断滚动的简单实现
Jun 03 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
Aug 01 Javascript
AngularJS通过$location获取及改变当前页面的URL
Sep 23 Javascript
Bootstrap模态框禁用空白处点击关闭
Oct 20 Javascript
JSON与JS对象的区别与对比
Mar 01 Javascript
JS实现按钮颜色切换效果
Sep 05 Javascript
微信上传视频文件提示(推荐)
Nov 22 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
Aug 10 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
4.与数据库的连接
2006/10/09 PHP
php在字符串中查找另一个字符串
2008/11/19 PHP
PHP开发需要注意的安全问题
2010/09/01 PHP
php 中英文语言转换类代码
2011/08/11 PHP
php指定函数参数默认值示例代码
2013/12/04 PHP
php网站地图生成类示例
2014/01/13 PHP
php中实现精确设置session过期时间的方法
2014/07/17 PHP
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
javascript instanceof 内部机制探析
2010/10/15 Javascript
JavaScript解析URL参数示例代码
2013/08/12 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
得到form下的所有的input的js代码
2013/11/07 Javascript
jquery中trigger()无法触发hover事件的解决方法
2015/05/07 Javascript
基于JavaScript实现网页倒计时自动跳转代码
2015/12/28 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
jQuery实现左右滑动的toggle方法
2018/03/03 jQuery
jQuery操作cookie的示例代码
2019/06/05 jQuery
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
[40:04]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
[07:25]DOTA2-DPC中国联赛2月5日Recap集锦
2021/03/11 DOTA
python 遍历目录(包括子目录)下所有文件的实例
2018/07/11 Python
详解python实现识别手写MNIST数字集的程序
2018/08/03 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
Python 爬取必应壁纸的实例讲解
2020/02/24 Python
python 装饰器重要在哪
2021/02/14 Python
全球性的在线购物网站:Zapals
2017/03/22 全球购物
GoDaddy英国:全球排名第一的域名注册商
2018/06/08 全球购物
Pedro官网:新加坡时尚品牌
2019/08/27 全球购物
大学生入党自我鉴定
2013/10/31 职场文书
群众路线教育实践活动学习笔记内容
2014/11/06 职场文书
工厂清洁工岗位职责
2015/02/14 职场文书
升职自荐信范文
2015/03/27 职场文书
Golang日志包的使用
2022/04/20 Golang