JavaScript代码检查工具 — JSHint

静态代码检查是开发工作中不可缺少的一环,毕竟对于程序化的工作人的眼睛是不可靠的,更何况是自己的眼睛看自己的代码。即使最后的运行结果通过,但可能存在一些未定义的变量、定义了但最后没用过的变量、分号有没有加(看团队规则)以及其他的问题。给力的工具必不可缺。

在本文要介绍的JSHint之前还有JSLint,道格拉斯的作品,应该是JavaScript精粹的附属产物。。。要求你必须使用它的规则,对于JavaScript这样一个灵活的语言,还是要用一个灵活的工具,JSHint就是就是这样。

安装

首先需要安装了Nodejs和npm,然后 npm install -g jshint 就好了。

这样你就可以使用命令行使用JSHint了。

当然他也提供了巨多的编辑器插件,比如Sublime Text 3

以及Grunt或者Gulp之类的插件。

配置

安装完了就可以使用了。

命令行下直接: jshint myfile.js 就ok,命令行里就可以显示错误或者警告。

编辑器下一般直接显示在出错或者警告的行数处。比如Sublime3 下,在当前文件下,快捷键 Ctrl+Alt+J 就会显示信息( Ctrl+Alt+C 关闭信息显示):

更多快捷键看插件的设置,可以自定义。

不过这些显示都是JSHint默认的配置,我们可以自定义配置更好的满足需求。

也很简单,在项目根目录下建立一个 .jshintrc 文件,这个文件就是JSHint的配置文件,JSHint会自动识别这个文件,根据这里面的规则对你的文件进行检查。

(windows下建立前面带点的文件会不让建立,一种方法直接在Sublime Text里建立,另一种方法在文件名后加个点即可)

JSHint的配置分为四类:

1、Enforcing:如果这些属性设置为true,表明这个代码风格够严格的,比如是否使用严格(strict)模式、变量驼峰式命名、是不是for-in循环里必须得有hasOwnProperty等等

2、Relaxing:比如是否使用分号,是否支持下一代ES语法等等。

3、Environments:你的代码所在的环境(Nodejs、浏览器、jQuery。。)

4、自定义的全局属性,比如我司的NEJ和Regular,这两个全局变量JSHint是不知道的,放在这里JSHint不会报出错误信息。

默认的JSHint的配置看这里:JSHint默认配置(Sublime插件自定义了默认的配置,你可以在插件的配置里看到,甚至可以直接修改它)

对这些配置的讲解:配置详解

都是英文的,不过配合着四六级的水平和有道翻译,基本木有问题。下面是一个简单的配置示例。

{
    "strict"   : false,
    "undef"    : true,
    "unused"   : true,

    "asi"      : true,
    "evil"     : false,

    "browser": true,
    "devel": true,

    "globals"  : {
        "NEJ": true,
        "Regular": true
    }
}

有时候,我们不希望它检查一些文件(比如一些库文件),这时候可以新建一个 .jshintignore 文件,把需要忽略的文件名写在里面(支持通配符),同样放到项目根目录下即可。

build/
src/**/tmp.js

自定义Reporter

JSHint源码里有一个reporter.js,定义错误提示信息改怎样输出,同样可以自定义。默认的是这样的:

"use strict";

module.exports = {
  reporter: function (res) {
    var len = res.length;
    var str = "";

    res.forEach(function (r) {
      var file = r.file;
      var err = r.error;

      str += file + ": line " + err.line + ", col " +
        err.character + ", " + err.reason + "\n";
    });

    if (str) {
      process.stdout.write(str + "\n" + len + " error" +
        ((len === 1) ? "" : "s") + "\n");
    }
  }
};

基本的格式就是:

module.exports = {
  reporter: function (reporter) {
    //....
  }
};

每个reporter都符合一定的格式:

{
  file:        [string, filename]
  error: {
    id:        [string, usually ‘(error)‘],
    code:      [string, error/warning code],
    reason:    [string, error/warning message],
    evidence:  [string, a piece of code that generated this error]
    line:      [number]
    character: [number]
    scope:     [string, message scope;
                usually ‘(main)‘ unless the code was eval‘ed]

    [+ a few other legacy fields that you don‘t need to worry about.]
  }
}

比如你可以让他不输出到控制台而是打印到txt文件里(不知为何异步写入文件一直不成功,最后只好用同步函数):

‘use strict‘;

var fs = require(‘fs‘);

module.exports = {
  reporter: function (res) {
    var len = res.length;
    var str = ‘‘;
    var filename = ‘‘;

    res.forEach(function (r, i) {
      filename = r.file;
      var err = r.error;

      if(i === 0) str += filename + ‘\n‘;

      str += ‘line ‘ + err.line + ‘, col ‘ +
        err.character + ‘, ‘ + err.reason + ‘\n‘;
    });

    if (str) {
      var output = str + ‘\n\n‘;
      fs.writeFileSync(‘message.txt‘, output);
    }
  }
};

命令行执行:

jshint --reporter=myreporter.js myfile.js

同样可以更近一步,如果你想一下把所有该检查的文件全都检查了,然后将检查结果保存到txt里:

// code-check.jsvar fs = require(‘fs‘);
var path = require(‘path‘);
var exec = require(‘child_process‘).exec;

var curPath = path.join(process.cwd(), ‘src‘, ‘javascript‘);

function travelDir(dir, callback) {
    fs.readdirSync(dir).forEach(function(file) {
        var pathname = path.join(dir, file);

        if(fs.statSync(pathname).isDirectory()) {
            travelDir(pathname, callback);
        } else {
            callback(pathname);
        }
    });
}

fs.writeFileSync(‘message.txt‘, ‘‘);
travelDir(curPath, function(file) {
    exec(‘jshint --reporter=reporter.js ‘ + file);
});
// reporter.js‘use strict‘;

var fs = require(‘fs‘);

module.exports = {
  reporter: function (res) {
    var len = res.length;
    var str = ‘‘;
    var filename = ‘‘;

    res.forEach(function (r, i) {
      filename = r.file;
      var err = r.error;

      if(i === 0) str += filename + ‘\n‘;

      str += ‘line ‘ + err.line + ‘, col ‘ +
        err.character + ‘, ‘ + err.reason + ‘\n‘;
    });

    if (str) {
      var output = str + ‘\n\n‘;
      fs.appendFileSync(‘message.txt‘, output);
    }
  }
};

只要  node code-check 就可以了。

不过,Sublime插件下不知道如何自定义。

有时候掌握一个工具工作效率会提高很多倍,学会做一个懒人。

时间: 2024-08-28 05:57:44

JavaScript代码检查工具 — JSHint的相关文章

代码检查工具jshint和csslint

前面的话 Douglas Crockford大神根据自己的理念用JavaScript写了一个JavaScript代码规范检查工具,这就是JSLint.后来非常流行,也的确帮助了广大的JavaScript程序员.但是,大神对于自己的代码规范不做丝毫的妥协,对开源社区的反馈的回应也不礼貌.于是,JSLint从一个帮助程序员规范代码,避免Bug的工具,变成了一个让代码像Crockford的工具.在最不信神的IT界,这当然不能忍了 2011年,一个叫Anton Kovalyov的前端程序员借助开源社区的

Grunt 之 使用 JavaScript 语法检查工具 jshint

前端开发环境准备好了,我们准备开始进行开发. 前端开发的主力语言是 JavaScript,这是一种脚本语言,没有编译器,也就没有了编译器带给我们的语法检查,怎样保证代码的质量呢?jshint 是一个强大的工具. 1. 概要说明 官方地址:http://jshint.com/ GitHub 地址:https://github.com/jshint/jshint JSHint 是一个使用 JavaScript 编写的 JavaScript 的代码质量检查工具,主要用来检查代码质量以及找出一些潜在的代

静态代码检查工具 cppcheck 的使用(可分别集成到VS和QT Creator里)

CppCheck是一个C/C++代码缺陷静态检查工具.不同于C/C++编译器及其它分析工具,CppCheck只检查编译器检查不出来的bug,不检查语法错误.所谓静态代码检查就是使用一个工具检查我们写的代码是否安全和健壮,是否有隐藏的问题. 比如无意间写了这样的代码: [cpp] view plain copy int n = 10; char* buffer = new char[n]; buffer[n] = 0; 这完全是符合语法规范的,但是静态代码检查工具会提示此处会溢出.也就是说,它是一

推荐一款华为最新的自动化代码检查工具

作为一枚软件攻城狮,你是不是总觉得自己撸代码的能力还有待提高却又无从下手?你是不是看到过XX大神美轮美奂的代码,然后佩服的五(ren)体(yang)投(ma)地(fan),然后躲在暗房里哭.然后你下定决心要痛改前非,然后发现无处下手,然后--又回到了以前的不归路? 如果你没有以上症状,请你关上浏览器,悄悄离开,千万别回头! 如果你有以上症状,但觉得自己已经病入膏肓,无法医治,让我拍拍你的肩,对你说"下辈子重新来过吧!". 如果你觉得自己还有救,就留下来继续观看,我给你开导开导. 要想修

Android 代码检查工具SonarQube

http://blog.csdn.net/rain_butterfly/article/details/42170601 代码检查工具能帮我们检查一些隐藏的bug,代码检查工具中sonar是比较好的一个.官网 Sonar 概述 Sonar 是一个用于代码质量管理的开放平台.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具.与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD

PMD-Java 代码检查工具对 error 和 warning 的配置

PMD是一款优秀的Java程序代码检查工具.该它可以检查Java代码中是否含有未使用的变量.是否含有空的抓取块.是否含有不必要的对象等. 但在使用过程中,你会项目中发现存在大量的 PMD 插件报出的 error 和 warning,尽管 PMD 鼓励程序员去改进它们并写出干净的代码,但也产生了很多让人烦躁的感觉.更重要的是,你可能忽略了 Java 代码中真正的错误和问题.下面我们就通过在 Eclipse 中配置只有在选中的资源中才去对代码检查. 第一步,在 Eclipse 中选择Problems

静态代码检查工具 cppcheck 的使用

CppCheck是一个C/C++代码缺陷静态检查工具.不同于C/C++编译器及其它分析工具,CppCheck只检查编译器检查不出来的bug,不检查语法错误.所谓静态代码检查就是使用一个工具检查我们写的代码是否安全和健壮,是否有隐藏的问题. 比如无意间写了这样的代码: [cpp] view plaincopy int n = 10; char* buffer = new char[n]; buffer[n] = 0; 这完全是符合语法规范的,但是静态代码检查工具会提示此处会溢出.也就是说,它是一个

《Android Studio有用指南》7.1 AndroidStudio代码检查工具概述

本文节选自<Android Studio有用指南> 作者: 毕小朋 博客: http://blog.csdn.net/wirelessqa 眼下本书已上传到百度阅读, 在百度中搜索[Anroid Studio有用指南]便能够找到本书. Android Studio提供了功能强大.高速.灵活的代码检查工具, 它能够检測出编译器和执行时的错误,在你编译之前建议你修正和攺进. Android Studio代码检查不仅仅能检查出编译错误, 还会检查出一些效率低下的代码,它支持一些代码规范.编程指南.最

PMD 5.7.0 发布,Java 程序代码检查工具

PMD 5.7.0 发布了.PMD 是一款采用 BSD 协议发布的 Java 程序代码检查工具.该工具可以做到检查 Java 代码中是否含有未使用的变量.是否含有空的抓取块.是否含有不必要的对象等.该软件功能强大,扫描效率高,是 Java 程序员 debug 的好帮手.  值得注意的变化有:  Modified Rules   java-design 规则集中的 "FieldDeclarationsShouldBeAtStartOfClass" 规则具有一个新的 ignoreInter