jshint 静态代码检测工具
安装
1 | npm install jshint -g |
项目中有可能用到的文件:
- .jshintrc jshint配置文件/或者用–config命令 指定一个.json文件
- .jshintignore jshint不忽略检测的文件 / 或者用 –exclude-path命令指定一个.gitignore
- reporter.js 自定义的jshint的输出方法,具体可参考本文的 附件:reporter
使用
ide拓展
主流的ide都有自己的拓展插件,这里用vscode简单的说明。
在vscode左侧的应用商店搜索jshint排第一个就是。配合项目中的.jshintrc文件可以在ide中报错。
jshint CLI
jshint自带命令行
例子 | 解释 |
---|---|
jshint myfile.js | 执行jshint |
jshint –reporter=myreporter.js myfile.js | 定义reporter |
jshint –verbose myfile.js | 输出中加入错误码 |
jshint –show-non-errors myfile.js | 输出中加入错误信息 |
jshint –exclude path | 加入不想被linted的目录 |
jshint –exclude-path | 指定.jshintignore |
–prereq | 指定全局变量 |
jshint –help | 帮助 |
jshint –version | 版本 |
… | … |
屏蔽某些错误提示
jshint提供了option选项去根据不同的项目需求和程序员习惯开启或屏蔽一些错误或警告提示。但是还是有些提示并不能通过配置去掉。(这有点烦人。。)这时可以用:
1 | /* jshint -W034 */ |
去除对应的警告。这个W034就是错误码。具体怎么得到:
1 | jshint --verbose myfile.js |
或者有些ide的提示也会直接提示你错误码。(note: 一般警告的错误码会以W开头,错误的错误码会以E开头)
如果你想重新启动被屏蔽的错误那就用
1 | /* jshint +W034 */ |
1 | [rectangle setX: 10 y: 10 width: 20 height: 20]; |
配置方法
按照顺序依次查找以下的config配置:
- 通过jshint –config ..path/myconfig.json指定config
- 在package.json里增加一个jshintConfig属性,在属性里配置参数。
- 在项目根目录添加一个.jshintrc的json配置文件,jshint运行是会从代码文件目录往上寻找直到找到.jshintrc文件。都找不到会在全局的默认配置里找.jshintrc文件。
Inline configuration
除了以上三种方法jshint还支持行内配置。
类似这样,在文件或函数开头加入:
1 | /* jshint undef: true, unused: true */ |
行内配置有以下几种方式:
jshint开头,多个选项以逗号分开
1 | /* jshint strict: true */ |
globals开头,标识全局变量避免启用undef选项时应用未定义变量报错
1 | /* globals MY_LIB: false */ |
exported,标识全局变量避免启用unused选项时变量未使用报错
1 | /* exported EXPORTED_LIB */ |
ignore,ignore中的代码不做jshint检测
1 | // Code here will be linted with JSHint. |
falls through, 避免Switch statements 没有break报错
1 | switch (cond) { |
jshintrc参数
具体的参数可以参考上面的官方文档。这里不做多介绍。
一个例子:
1 | { |
这里要说的是option里除了加强选项,宽松选项,环境选项还有一些特殊选项:
entend
1 | { |
overrides
1 | { |
附件
reporters
JSHint Reporter.js是一个你自定义的代替jshint默认输出方法的文件。
用jshint命令可以执行你的reporter
1 | jshint --reporter=myreporter.js myfile.js |
下面是一个例子:
1 | "use strict"; |
上面的例子中res中存的error的格式为:
1 | [ |
如果你想用exporter禁止报某些错误的话可以写个判断,error.code === ‘Wxxx’ 时 return。