JSHint在线文档翻译(一):基本介绍

文档

JSHint是一个用来标示在JavaScript程序中容易引起问题和困扰的代码,JShint包含了它的核心类库以及一个命令行程序,这个命令行程序作为一个npm模块进行分发。

更多的文档参见:JSHint选项CLI标志位创建JSHint报告FAQ

1. 基本用法

安装

将JSHint作为一个Node程序安装是最简单的使用方式,参加以下命令行:

jshint
1
npm install jshint -g

-g 指JSHint将安装在系统路径;如果没有这个参数,JSHint将只安装在当前路径。

使用

安装完毕后就可以在命令行运行jshint,最简单的例子就是检验一个文件或者一个目录下的所有javascript文件。

jshint
1
2
3
4
jshint myfile.js
myfile.js: line 10, col 39, Octal literals are not allowed in strict mode.

1 error

2. 配置

JSHint定义了一些缺省的javascript代码的警告设置,它也支持用户使用自定义的配置文件覆盖和扩展JSHint的设置。JSHint提供了三种方式引用这个自定义的配置文件。

  1. 可以通过命令行 –config参数引入自定义的JSHint配置文件
  2. 配置文件以.jshintrc命名
  3. 定义Package.json文件中的jshintConfig属性,引用配置文件。

对于.jshintrc文件,JSHint首先对当前路径进行搜索以及上层的目录直至文件系统的根目录。

这三种方式允许在同一项目中使用不同的配置文件,比如test和source项目。另外,如果将配置文件放在项目的根目录,JSHint的目录搜索策略也使得同一项目下不同路径的jshint得到同样的结果,因为它会使用在同一个根目录下的配置文件。

配置文件就是一个简单的json文件,在这个文件里可以设置jshint的选项,加载或者关闭,比如以下配置文件中,启用了对于没有定义和没有使用的变量的警告,并告诉JSHint,这个项目允许命为MY_Global的变量存在。

jshint
1
2
3
4
5
{
"undef": true,
"unused": true,
"globals": { "MY_GLOBAL": false }
}

内联配置

除了使用配置文件,JSHint还提供了一种使用特殊注释的方式校验代码。这些注释使用jshint或者global关键词开头。

jshint lang: javascript
1
2
3
4
{
/* jshint undef: true, unused: true */
/* global MY_GLOBAL */
}

在javascript代码中可以使用单行注释和多行注释。这些注释的使用范围是基于function的,意味着如果你把它放到一个方法里,它将只在这个方法的上下文起作用。

Directives

下面是JSHint支持的directives的配置。

1.jshint
用来设置JSHint的选项

jshint lang: javascript
1
2
3
{
/* jshint strict: true */
}

2.jslint
用来设置JSHint兼容的JSLint选项

jshint lang: javascript
1
2
3
{
/* jslint vars: true */
}

3.globals
用来表示全局变量定义的directive。如果值为false,JSHint回人为这个全局变量为只读的,一般会结合undef选项使用。
用来设置JSHint的选项

jshint lang: javascript
1
2
3
{
/* global MY_LIB: false */
}

同时也可以设置黑名单,机制一些全局变量在当前文件中使用。

jshint lang: javascript
1
2
3
{
/* global -BAD_LIB*/
}

4.exported
用来声明一个该文件定义的全局变量,并且在其他地方使用,与unused一起使用。

jshint lang: javascript
1
2
3
{
/* exported EXPORTED_LIB */
}

3. 选项

使用JSHint首先需要了解JSHint的选项。
JSHint有两类选项,强制选项和宽松选项。前者使得javascript的代码更加严格,而后者则是抑制警告信息。 让我们来看看下面的例子:

jshint lang: javascript
1
2
3
4
5

function main(a, b) {
return a == null;
}

如果用缺省的选项运行jshint会报出如下警告信息:

jshint lang: javascript
1
2
3

line 2, col 14, Use '===' to compare with 'null'.

例子2:
如果需要禁用产生的警告信息,而同时又想知道是否在代码中使用了定义但未使用的变量,JSHint提供了两个选项;eqnull 和unused,前者会禁用===null警告信息,而后者会强者启用对未使用变量的检查。

jshint lang: javascript
1
2
3
4
5

/*jshint unused:true, eqnull:true */
function main(a, b) {
return a == null;
}

运行jshint,回报出以下警告信息:

jshint lang: javascript
1
2
3
4

demo.js: line 2, col 14, 'main' is defined but never used.
demo.js: line 2, col 19, 'b' is defined but never used.

例3:
JSHint在某些场合下并没有适合的选项。在这种情况下可以运用jshint directive去禁用警告信息,具体做法就是打开–verbose选项,运行jshint取得错误码,然后填到配置项中。

jshint lang: javascript
1
2
3
4
5
6
7
8
9

"use strict";
/* ... */

// From another file
function b() {
"use strict";
/* ... */
}

运行jshint会报出在方法b中存在没有使用的directives, JSHint检查到该文件已经定义了全局的use strict,推测出其它代码段的同样声明为多余声明。但是在某种情况下又不想去除这些代码片段,因为这些文件是自动生成的。那么可以打开JSHint的 –verbose选项,记录警告码(在这个例子里是W034)

jshint lang: javascript
1
2
$ jshint --verbose myfile.js
myfile.js: line 6, col 3, Unnecessary directive "use strict". (W034)

然后,要想隐藏这个警告信息,需启用下面的选项:

jshint lang: javascript
1
/* jshint -W034 */

几个注意事项:

  1. 这个语法只适用于警告(代码以W开始),它不对错误码生效(以E开始).
  2. 这个语法会禁用这类的所有警告,有一些警告会使比较通用的,可能会导致一些不知道的副作用,所以要谨慎使用。

如果想重新启用上述的警告信息,可用以下-的方式

jshint lang: javascript
1
/* jshint +W034 */

这种选项使得配置比较灵活,比较适用于一些代码片段。这些代码片段虽然有一些警告,但在当前上下文是安全的,并且不想进行处理,比如自动生成的代码或第三方代码库。在这种情况下可以在代码片段开始之前禁用,然后代码结束后启用。

jshint lang: javascript
1
2
3
4
5
6
7
8
9

var y = Object.create(null);
// ...
/*jshint -W089 */
for (var prop in y) {
// ...
}
/*jshint +W089 */

更详细的配置信息请参见JSHint选项

Share Comments