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中令你抓狂的魔术变量
Nov 30 Javascript
理清apply(),call()的区别和关系
Aug 14 Javascript
jquery入门—编写一个导航条(可伸缩)
Jan 07 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
Feb 07 Javascript
让checkbox不选中即将选中的checkbox不选中
Jul 11 Javascript
vue.js绑定class和style样式(6)
Dec 09 Javascript
js时间查询插件使用详解
Apr 07 Javascript
原生javascript实现文件异步上传的实例讲解
Oct 26 Javascript
微信小程序实现留言板(Storage)
Nov 02 Javascript
js中console在一行内打印字符串和对象的方法
Sep 10 Javascript
详解Node.JS模块 process
Aug 31 Javascript
浅析vue中的nextTick
Dec 28 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
PHP整合七牛实现上传文件
2015/07/03 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
2017/06/09 PHP
Yii2.0实现生成二维码功能实例
2017/10/24 PHP
php中字符串和整数比较的操作方法
2019/06/06 PHP
Javascript操纵Cookie实现购物车程序
2006/11/23 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
AngularJS中$watch和$timeout的使用示例
2016/09/20 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
JS实现图片预加载之无序预加载功能代码
2017/05/12 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
nodejs爬虫初试superagent和cheerio
2018/03/05 NodeJs
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
微信小程序仿今日头条导航栏滚动解析
2019/08/20 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
2019/08/27 Javascript
原生js实现表格循环滚动
2020/11/24 Javascript
[02:55]DOTA2英雄基础教程 发条技师
2013/12/04 DOTA
在Python中marshal对象序列化的相关知识
2015/07/01 Python
Python编程实现的图片识别功能示例
2017/08/03 Python
django中send_mail功能实现详解
2018/02/06 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
2020/04/07 Python
Python实现SMTP邮件发送
2020/06/16 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
详解python datetime模块
2020/08/17 Python
Corelle官方网站:购买康宁餐具
2016/11/02 全球购物
Expedia印度尼西亚站:预订酒店、廉价航班和度假套餐
2018/01/31 全球购物
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
大学生村官事迹材料
2014/01/21 职场文书
党员自我批评与反省材料
2014/02/10 职场文书
小学信息技术教学反思
2014/02/10 职场文书
2014三八妇女节活动总结
2014/03/01 职场文书
python实现过滤敏感词
2021/05/08 Python
MySQL数据库索引的最左匹配原则
2021/11/20 MySQL