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 相关文章推荐
jquery getScript动态加载JS方法改进详解
Nov 15 Javascript
Node.js中require的工作原理浅析
Jun 24 Javascript
jquery实现的树形目录实例
Jun 26 Javascript
针对BootStrap中tabs控件的美化和完善(推荐)
Jul 06 Javascript
使用Angular.js开发的注意事项
Oct 19 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
Sep 06 jQuery
JavaScript实现换肤功能
Sep 15 Javascript
Vue的elementUI实现自定义主题方法
Feb 23 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
Sep 29 Javascript
原生js实现文件上传、下载、封装等实例方法
Jan 05 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
Sep 11 Javascript
vue 数字翻牌器动态加载数据
Apr 20 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
c#中的实现php中的preg_replace
2009/12/21 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
2019/06/25 PHP
兼容ie和firefox js关闭代码
2008/12/11 Javascript
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
不到30行JS代码实现Excel表格的方法
2014/11/15 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
2017/04/13 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
vue2.0 兄弟组件(平级)通讯的实现代码
2018/01/15 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
2019/03/29 Javascript
了解javascript中变量及函数的提升
2019/05/27 Javascript
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
vue 解决异步数据更新问题
2019/10/29 Javascript
javascript实现电商放大镜效果
2020/11/23 Javascript
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
python开发中module模块用法实例分析
2015/11/12 Python
Python中http请求方法库汇总
2016/01/06 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
2018/11/30 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
Django 项目通过加载不同env文件来区分不同环境
2020/02/17 Python
Python如何存储数据到json文件
2020/03/09 Python
tensorflow下的图片标准化函数per_image_standardization用法
2020/06/30 Python
简单租房协议书
2014/04/09 职场文书
个人合作协议书范本
2014/04/18 职场文书
人力资源求职信
2014/05/25 职场文书
奶茶店创业计划书
2014/08/14 职场文书
个人工作保证书
2015/02/28 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书