文档
JSHint是一个用来标示在JavaScript程序中容易引起问题和困扰的代码,JShint包含了它的核心类库以及一个命令行程序,这个命令行程序作为一个npm模块进行分发。
更多的文档参见:JSHint选项, CLI标志位,创建JSHint报告,FAQ
1. 基本用法
安装
将JSHint作为一个Node程序安装是最简单的使用方式,参加以下命令行:1
npm install jshint -g
-g 指JSHint将安装在系统路径;如果没有这个参数,JSHint将只安装在当前路径。
使用
安装完毕后就可以在命令行运行jshint,最简单的例子就是检验一个文件或者一个目录下的所有javascript文件。1
2
3
4jshint myfile.js
myfile.js: line 10, col 39, Octal literals are not allowed in strict mode.
1 error
2. 配置
JSHint定义了一些缺省的javascript代码的警告设置,它也支持用户使用自定义的配置文件覆盖和扩展JSHint的设置。JSHint提供了三种方式引用这个自定义的配置文件。
- 可以通过命令行 –config参数引入自定义的JSHint配置文件
- 配置文件以.jshintrc命名
- 定义Package.json文件中的jshintConfig属性,引用配置文件。
对于.jshintrc文件,JSHint首先对当前路径进行搜索以及上层的目录直至文件系统的根目录。
这三种方式允许在同一项目中使用不同的配置文件,比如test和source项目。另外,如果将配置文件放在项目的根目录,JSHint的目录搜索策略也使得同一项目下不同路径的jshint得到同样的结果,因为它会使用在同一个根目录下的配置文件。
配置文件就是一个简单的json文件,在这个文件里可以设置jshint的选项,加载或者关闭,比如以下配置文件中,启用了对于没有定义和没有使用的变量的警告,并告诉JSHint,这个项目允许命为MY_Global的变量存在。1
2
3
4
5{
"undef": true,
"unused": true,
"globals": { "MY_GLOBAL": false }
}
内联配置
除了使用配置文件,JSHint还提供了一种使用特殊注释的方式校验代码。这些注释使用jshint或者global关键词开头。1
2
3
4{
/* jshint undef: true, unused: true */
/* global MY_GLOBAL */
}
在javascript代码中可以使用单行注释和多行注释。这些注释的使用范围是基于function的,意味着如果你把它放到一个方法里,它将只在这个方法的上下文起作用。
Directives
下面是JSHint支持的directives的配置。
1.jshint
用来设置JSHint的选项1
2
3{
/* jshint strict: true */
}
2.jslint
用来设置JSHint兼容的JSLint选项1
2
3{
/* jslint vars: true */
}
3.globals
用来表示全局变量定义的directive。如果值为false,JSHint回人为这个全局变量为只读的,一般会结合undef选项使用。
用来设置JSHint的选项1
2
3{
/* global MY_LIB: false */
}
同时也可以设置黑名单,机制一些全局变量在当前文件中使用。
1 | { |
4.exported
用来声明一个该文件定义的全局变量,并且在其他地方使用,与unused一起使用。
1 | { |
3. 选项
使用JSHint首先需要了解JSHint的选项。
JSHint有两类选项,强制选项和宽松选项。前者使得javascript的代码更加严格,而后者则是抑制警告信息。 让我们来看看下面的例子:
1 |
|
如果用缺省的选项运行jshint会报出如下警告信息:1
2
3
line 2, col 14, Use '===' to compare with 'null'.
例子2:
如果需要禁用产生的警告信息,而同时又想知道是否在代码中使用了定义但未使用的变量,JSHint提供了两个选项;eqnull 和unused,前者会禁用===null警告信息,而后者会强者启用对未使用变量的检查。1
2
3
4
5
/*jshint unused:true, eqnull:true */
function main(a, b) {
return a == null;
}
运行jshint,回报出以下警告信息:
1 |
|
例3:
JSHint在某些场合下并没有适合的选项。在这种情况下可以运用jshint directive去禁用警告信息,具体做法就是打开–verbose选项,运行jshint取得错误码,然后填到配置项中。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)1
2$ jshint --verbose myfile.js
myfile.js: line 6, col 3, Unnecessary directive "use strict". (W034)
然后,要想隐藏这个警告信息,需启用下面的选项:
1 | /* jshint -W034 */ |
几个注意事项:
- 这个语法只适用于警告(代码以W开始),它不对错误码生效(以E开始).
- 这个语法会禁用这类的所有警告,有一些警告会使比较通用的,可能会导致一些不知道的副作用,所以要谨慎使用。
如果想重新启用上述的警告信息,可用以下-的方式1
/* jshint +W034 */
这种选项使得配置比较灵活,比较适用于一些代码片段。这些代码片段虽然有一些警告,但在当前上下文是安全的,并且不想进行处理,比如自动生成的代码或第三方代码库。在这种情况下可以在代码片段开始之前禁用,然后代码结束后启用。
1 |
|
更详细的配置信息请参见JSHint选项