jshint 靜態(tài)代碼檢測(cè)工具

安裝

npm install jshint -g

項(xiàng)目中有可能用到的文件:

  • .jshintrc jshint配置文件/或者用--config命令指定一個(gè).json文件
  • .jshintignore jshint不忽略檢測(cè)的文件 / 或者用 --exclude-path命令指定一個(gè).gitignore
  • reporter.js 自定義的jshint的輸出方法,具體可參考本文的 附件:reporter

使用

ide拓展

主流的ide都有自己的拓展插件,這里用vscode簡(jiǎn)單的說(shuō)明。
在vscode左側(cè)的應(yīng)用商店搜索jshint排第一個(gè)就是。配合項(xiàng)目中的.jshintrc文件可以在ide中報(bào)錯(cuò)。

jshint CLI

jshint自帶命令行

例子 解釋
jshint myfile.js 執(zhí)行jshint
jshint --reporter=myreporter.js myfile.js 定義reporter
jshint --verbose myfile.js 輸出中加入錯(cuò)誤碼
jshint --show-non-errors myfile.js 輸出中加入錯(cuò)誤信息
jshint --exclude path 加入不想被linted的目錄
jshint --exclude-path 指定.jshintignore
--prereq 指定全局變量
jshint --help 幫助
jshint --version 版本
... ...
屏蔽某些錯(cuò)誤提示

jshint提供了option選項(xiàng)去根據(jù)不同的項(xiàng)目需求和程序員習(xí)慣開(kāi)啟或屏蔽一些錯(cuò)誤或警告提示。但是還是有些提示并不能通過(guò)配置去掉。(這有點(diǎn)煩人。。)這時(shí)可以用:

/* jshint -W034 */

去除對(duì)應(yīng)的警告。這個(gè)W034就是錯(cuò)誤碼。具體怎么得到:

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

或者有些ide的提示也會(huì)直接提示你錯(cuò)誤碼。(note: 一般警告的錯(cuò)誤碼會(huì)以W開(kāi)頭,錯(cuò)誤的錯(cuò)誤碼會(huì)以E開(kāi)頭)
如果你想重新啟動(dòng)被屏蔽的錯(cuò)誤那就用

/* jshint +W034 */

配置方法

按照順序依次查找以下的config配置:

  • 通過(guò)jshint --config ..path/myconfig.json指定config
  • 在package.json里增加一個(gè)jshintConfig屬性,在屬性里配置參數(shù)。
  • 在項(xiàng)目根目錄添加一個(gè).jshintrc的json配置文件,jshint運(yùn)行是會(huì)從代碼文件目錄往上尋找直到找到.jshintrc文件。都找不到會(huì)在全局的默認(rèn)配置里找.jshintrc文件。

Inline configuration

除了以上三種方法jshint還支持行內(nèi)配置。
類似這樣,在文件或函數(shù)開(kāi)頭加入:

/* jshint undef: true, unused: true */
/* globals MY_GLOBAL */

行內(nèi)配置有以下幾種方式:

jshint開(kāi)頭,多個(gè)選項(xiàng)以逗號(hào)分開(kāi)

/* jshint strict: true */

globals開(kāi)頭,標(biāo)識(shí)全局變量避免啟用undef選項(xiàng)時(shí)應(yīng)用未定義變量報(bào)錯(cuò)

/* globals MY_LIB: false */

exported,標(biāo)識(shí)全局變量避免啟用unused選項(xiàng)時(shí)變量未使用報(bào)錯(cuò)

/* exported EXPORTED_LIB */

ignore,ignore中的代碼不做jshint檢測(cè)

// Code here will be linted with JSHint.
/* jshint ignore:start */
// Code here will be ignored by JSHint.
/* jshint ignore:end */

falls through, 避免Switch statements 沒(méi)有break報(bào)錯(cuò)

switch (cond) {
    case "one":
        doSomething(); // JSHint will warn about missing 'break' here.
        /* falls through */
    case "two":
        doSomethingElse();
}

jshintrc參數(shù)

參考http://jshint.com/docs/options/

具體的參數(shù)可以參考上面的官方文檔。這里不做多介紹。

一個(gè)例子:

{
    //加強(qiáng)選項(xiàng):

    //use es6. 3/5/6
    "esversion": 6,

    //循環(huán)必須用大括號(hào)包起來(lái)
    "curly": true,

    //設(shè)置為true,禁止使用這個(gè)選項(xiàng) ==和 !=,強(qiáng)制使用 ===和 !==。
    "eqeqeq": false,

    //允許警告js未來(lái)版本中定義的標(biāo)識(shí)符。
    "futurehostile": true,

    //檢查無(wú)效 typeof操作符的值
    "notypeof": true,

    //檢查變量重復(fù)定義
    // 他接受4個(gè)值:"inner" 只檢查是否在相同的作用域重復(fù)定義;"outer" 檢查外部作用域;
    // false 與inne一樣; true 允許變量覆蓋
    "shadow": "inner",

    //ECMAScript 5嚴(yán)格模式
    // "global" - 全局層面的嚴(yán)格模式"use strict";
    // "implied" - 文件里面使用"use strict";
    // false - 禁止使用嚴(yán)格模式
    // true - 函數(shù)上面必須使用一個(gè)"use strict"; 
    "strict": "implied",

    //變量未定義
    "undef": true,

    //變量定義未使用
    "unused": true,

    // 設(shè)置為true時(shí),禁止使用var聲明變量
    // "varstmt": true,

    // "globals": {
    //     "require": true
    // },

    //寬松選項(xiàng):

    // 禁止缺少分號(hào)警告
    "asi": true,

    //環(huán)境選項(xiàng):
    //暴露瀏覽器屬性的全局變量,列如 window,document;
    //注意:這個(gè)選項(xiàng)不暴露變量 alert或 console。
    "browser": true,

    //這個(gè)選項(xiàng)定義了全局變量,通常用于日志調(diào)試: console, alert等等
    "devel": true,

    //這個(gè)選項(xiàng)定義全局變量可以當(dāng)你的代碼運(yùn)行在node的運(yùn)行時(shí)環(huán)境
    "node": true,

    //這個(gè)選項(xiàng)告訴JSHint,輸入代碼描述了一個(gè)ECMAScript 6模塊。所有模塊的代碼解釋為嚴(yán)格模式代碼。
    "module": true,

    //這個(gè)選項(xiàng)定義全局暴露的jQuery庫(kù)。
    "jquery": true

}

這里要說(shuō)的是option里除了加強(qiáng)選項(xiàng),寬松選項(xiàng),環(huán)境選項(xiàng)還有一些特殊選項(xiàng):
entend

{
  "extends": "../.jshintrc",
  "globals": {
    "test": false,
    "assert": false
  }
}
//在一些情況下你可能想要在項(xiàng)目配置之外加載一些已有的配置

overrides

{
  "shadow": false,
  "overrides": {
    "lib/*-test.js": {
      "expr": true
    }
  }
}
//在不同的文件中應(yīng)用不同的配置

附件

<h3 id="reporter">reporters</h3>
JSHint Reporter.js是一個(gè)你自定義的代替jshint默認(rèn)輸出方法的文件。
用jshint命令可以執(zhí)行你的reporter

jshint --reporter=myreporter.js myfile.js

下面是一個(gè)例子:

"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");
    }
  }
};

上面的例子中res中存的error的格式為:

[
  {
    file: 'demo.js',
    error:  {
      id: '(error)',
      code: 'W117',
      reason: '\'module\' is not defined.'
      evidence: 'module.exports = {',
      line: 3,
      character: 1,
      scope: '(main)',

      // [...]
    }
  },

  // [...]
]

如果你想用exporter禁止報(bào)某些錯(cuò)誤的話可以寫個(gè)判斷,error.code === 'Wxxx' 時(shí) return。

參考地址:http://jshint.com/docs/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,597評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,275評(píng)論 6 342
  • 嚴(yán)格模式 1、設(shè)立嚴(yán)格模式的目的 消除JavaScript語(yǔ)法的一些不合理、不嚴(yán)謹(jǐn)之處,減少一些怪異行為;(會(huì)將J...
    K丶Aionro閱讀 2,021評(píng)論 0 0
  • 什么是JSHint? 官方網(wǎng)站這樣介紹: JSHint, A Static Code Analysis Tool ...
    9I閱讀 29,688評(píng)論 5 51
  • ESLint最初是由Nicholas C. Zakas 于2013年6月創(chuàng)建的開(kāi)源項(xiàng)目。它的目標(biāo)是提供一個(gè)插件化的...
    gavinDu閱讀 1,974評(píng)論 1 1

友情鏈接更多精彩內(nèi)容