Node.js自动代码审核

闪电
闪电
闪电
57
文章
0
评论
2020年4月26日20:07:26 评论 61

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

简介

在团队开发中,无论是写前端(js,css,html) ,还是后端 ,我们需要解决一个问题:如何统一团队代码风格。 这篇文章主要是使用pre-git , eslint , js-beautify 实现代码风格控制。

下面分别介绍这三个工具和使用方式:

  1. pre-git
    该工具能实现git hook的功能,在git的流程中插入一些自定义行为,例如commit之前执行代码检测,如果不通过则报错。

  2. eslint
    代码格式审核工具,可以随意组合配置各种风格,用于组成团队的代码统一规范。

  3. js-beautiful
    js代码整理、美化工具。

然后这三个工具互相配合就形成了以下效果:

  • 项目组长定义好eslint的代码规范。
  • 使用pre-git在commit之前运行eslint代码监测和js-beautiful代码美化
  • 如果通过则自动"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即可!

继续阅读
weinxin
我的微信
微信扫一扫
闪电
  • 本文由 发表于 2020年4月26日20:07:26
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
30行代码造了一个1494start项目的轮子 Nodejs

30行代码造了一个1494start项目的轮子

1494个start的项目:minimist 30行代码轮子:argps 项目功能: 解析命令行启动用户所输入的参数,转成Object。 需要支持多个命令、重复参数合并到数组、监测无名字参数合并到_中...
一键部署项目和代码自动更新 Nodejs

一键部署项目和代码自动更新

my-deploy : 由nodejs写的一个自动更新工具,理论支持所有语言(php、java、c#)的项目,支持所有git仓库(bitbucket、github等)。 github 效果如何? 如果...
利用Mongodb做地理空间查询 数据库

利用Mongodb做地理空间查询

MongoDB 是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 前言 在移动开发中,经常会用到定位的功能,例如美团、饿了么、猫眼电影等的app...
分享一个通用正则库 正则表达式

分享一个通用正则库

regex-util github 地址: 传送门 正则表达式可以用于匹配和替换,该项目搜集开发者日常开发任务需要用到的一些匹配、验证的需求。 该项目会不断收集,不断优化,欢迎issues! 安装 $...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: