如何告诉JSHint忽略一个文件中的所有未定义变量?

Dan*_*oss 35 javascript jshint

在Karma测试中,有很多全局变量和函数,JSHint抱怨它(它被集成到我的编辑器中).

如何告诉JSHint忽略这个特定文件中的所有未定义变量?我希望/* jshint undef: false */能够关闭这些警告,但事实并非如此.

Jam*_*ice 69

告诉JSHint关于全局变量的正确方法是使用该globals指令.例如:

/*globals globalFunction, anotherGlobal, oneMore */
Run Code Online (Sandbox Code Playgroud)

当JSHint遇到任何列出的标识符时,这将阻止"{a}未定义"警告.

或者,如果您真的想忽略该文件中的所有 "未定义"警告,并且您正在使用JSHint 1.0.0或更高版本,则可以简单地关闭该特定警告:

/*jshint -W117 */
Run Code Online (Sandbox Code Playgroud)

  • @DanRoss - 我想我是通过阅读来源发现的.我在构建http://jslinterrors.com时已经在JSHint源代码中进行了大量挖掘,这可能对您有用. (3认同)
  • 谢谢,但你在哪里发现了这个?[docs](http://www.jshint.com/docs/)没有提到命令行参数,而`jshint --help`希望我知道我需要帮助的arg的名称. (2认同)

Bal*_*i M 8

只需在.jshintrc文件中添加此规则即可.

"-W117": true
Run Code Online (Sandbox Code Playgroud)

这将忽略所有警告,即"*未定义".


zer*_*ool 7

今天下午使用jshint来解决这个问题.以下修复对我有用.而不是使用"全局",尝试使用"predef".例如:

{
  /*
   * RELAXING OPTIONS
   * =================
   */

  // Suppress warnings about == null comparisons.
  "eqnull": true,

  "predef" : ["describe", "expect", "it", "inject", "beforeEach", "angular"]
}
Run Code Online (Sandbox Code Playgroud)


ken*_*ken 7

我发现自己用jshint ignore:line它来解决这个问题:

var unusedVar; // jshint ignore:line

这允许jshint继续对这个条件进行有用的检查,但是如果有明确的理由忽略特定的声明而不是添加它,则两者都解决了问题,并且以对任何查看代码的人来说都很明显的方式进行.

一个很好的例子(至少对我而言)是,当使用ES6的解构来违反一组你可能会或可能不会一直使用的快捷方式时.在Ember中,我经常使用许多悬挂它的方法,例如typeOfcomputed.而不是总是提到Ember.computed它更好,只是computed在我所有的Ember对象的顶部引用并具有类似下面的东西:

 const { computed, $, A, run, on, typeOf, debug, get, set } = Ember;    // jshint ignore:line
Run Code Online (Sandbox Code Playgroud)