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 相关文章推荐
取得窗口大小 兼容所有浏览器的js代码
Aug 09 Javascript
JavaScript Memoization 让函数也有记忆功能
Oct 27 Javascript
利用div+jquery自定义滚动条样式的2种方法
Jul 18 Javascript
Javascript基础知识(二)事件
Sep 29 Javascript
每天一篇javascript学习小结(基础知识)
Nov 10 Javascript
深入理解react-router@4.0 使用和源码解析
May 23 Javascript
基于JS实现网页中的选项卡(两种方法)
Jun 16 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
Jul 07 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
Oct 31 Javascript
微信、QQ、微博、Safari中使用js唤起App
Jan 24 Javascript
Node.Js生成比特币地址代码解析
Apr 21 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
Aug 06 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
解析CI即CodeIgniter框架在Nginx下的重写规则
2013/06/03 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
初学Javascript的一些总结
2008/11/03 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
jQuery插件jRumble实现网页元素抖动
2015/06/05 Javascript
javascript 判断两个日期之差的示例代码
2015/09/05 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
JavaScript中的ajax功能的概念和示例详解
2016/10/17 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
微信小程序block的使用教程
2018/04/01 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
vue 使用外部JS与调用原生API操作示例
2019/12/02 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
Python ftp上传文件
2016/02/13 Python
Python中字典和集合学习小结
2017/07/07 Python
Python中实现switch功能实例解析
2018/01/11 Python
详解Python下Flask-ApScheduler快速指南
2018/11/04 Python
在Python中实现shuffle给列表洗牌
2018/11/08 Python
python射线法判断检测点是否位于区域外接矩形内
2019/06/28 Python
Python实现打包成库供别的模块调用
2020/07/13 Python
Python图像识别+KNN求解数独的实现
2020/11/13 Python
CSS3属性box-shadow使用指南
2014/12/09 HTML / CSS
计算机毕业大学生推荐信
2013/12/01 职场文书
魅力教师事迹材料
2014/01/10 职场文书
自荐信写法介绍
2014/01/25 职场文书
旅游网创业计划书
2014/01/31 职场文书
物流管理专业毕业生求职信
2014/03/23 职场文书
服务标语大全
2014/06/18 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
电话营销开场白
2015/05/29 职场文书
Python函数中的不定长参数相关知识总结
2021/06/24 Python