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 判断页面元素是否存在的代码
Aug 14 Javascript
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
Apr 07 Javascript
理解Javascript闭包
Nov 01 Javascript
js函数与php函数的区别实例浅析
Jan 12 Javascript
jquery制作LED 时钟特效
Feb 01 Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
Jul 18 Javascript
JS实现禁止鼠标右键的功能
Oct 15 Javascript
javascript 定时器工作原理分析
Dec 03 Javascript
解析如何利用iframe标签以及js制作时钟
Dec 08 Javascript
基于JavaScript实现滑动门效果
Mar 16 Javascript
JS全角与半角转化实例(分享)
Jul 04 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
Dec 20 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
基于mysql的论坛(6)
2006/10/09 PHP
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
php采集速度探究总结(原创)
2008/04/18 PHP
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
2011/08/02 PHP
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
yii的CURD操作实例详解
2014/12/04 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
PHP创建对象的六种方式实例总结
2019/06/27 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
javascript的原生方法获取数组中的最大(最小)值
2012/12/19 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
JavaScript中toString()方法的使用详解
2015/06/05 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
Bootstrap模仿起筷首页效果
2016/05/09 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
2016/06/12 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
详解Python locals()的陷阱
2019/03/26 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
马耳他航空公司官方网站:Air Malta
2019/05/15 全球购物
学雷锋的心得体会
2014/09/04 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
学生会个人总结范文
2015/02/15 职场文书
大客户经理岗位职责
2015/04/09 职场文书
Python闭包的定义和使用方法
2022/04/11 Python
Go语言 详解net的tcp服务
2022/04/14 Golang
win10搭建配置ftp服务器的方法
2022/08/05 Servers