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实现下班倒计时效果的方法(可桌面通知)
Jul 10 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
Aug 17 Javascript
JS与jQ读取xml文件的方法
Dec 08 Javascript
js实现商城星星评分的效果
Dec 29 Javascript
基于jQuery实现仿51job城市选择功能实例代码
Mar 02 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
Jun 09 Javascript
jquery组件WebUploader文件上传用法详解
Oct 23 Javascript
深入理解JavaScript和TypeScript中的class
Apr 22 Javascript
Vue引入sass并配置全局变量的方法
Jun 27 Javascript
JS算法题之查找数字在数组中的索引位置
May 15 Javascript
通过JS深度判断两个对象字段相同
Jun 14 Javascript
layer.js open 隐藏滚动条的例子
Sep 05 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 Ajax实现页面无刷新发表评论
2007/01/02 PHP
深入php self与$this的详解
2013/06/08 PHP
smarty实现多级分类的方法
2014/12/05 PHP
thinkphp验证码的实现(form、ajax实现验证)
2016/07/28 PHP
setAttribute 与 class冲突解决
2008/02/17 Javascript
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
jquery操作checked属性以及disabled属性的多种方法
2014/06/20 Javascript
jQuery判断对象是否存在的方法
2015/02/05 Javascript
javascript实现回到顶部特效
2015/05/06 Javascript
一个极为简单的requirejs实现方法
2016/10/20 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
使用vuepress搭建静态博客的示例代码
2019/02/14 Javascript
python的多重继承的理解
2017/08/06 Python
Python 实现淘宝秒杀的示例代码
2018/01/02 Python
pandas数据框,统计某列数据对应的个数方法
2018/04/11 Python
Python 爬取携程所有机票的实例代码
2018/06/11 Python
Python读取系统文件夹内所有文件并统计数量的方法
2018/10/23 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
python 实现多线程下载视频的代码
2019/11/15 Python
使用Django搭建一个基金模拟交易系统教程
2019/11/18 Python
django连接mysql数据库及建表操作实例详解
2019/12/10 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
修复iPhone的safari浏览器上submit按钮圆角bug
2012/12/24 HTML / CSS
Brother加拿大官网:打印机、贴标机、缝纫机
2019/10/09 全球购物
社区务虚会发言材料
2014/10/20 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书
2016年校园重阳节广播稿
2015/12/18 职场文书
民事调解协议书
2016/03/21 职场文书
个人房屋租赁合同(标准范本)
2019/09/16 职场文书
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python
Axios取消重复请求的方法实例详解
2021/06/15 Javascript