JSHint和jQuery:'$'没有定义

All*_*ate 212 javascript jquery lint jshint

以下JS:

(function() {
  "use strict";

  $("#target").click(function(){
    console.log("clicked");
  });

}());
Run Code Online (Sandbox Code Playgroud)

产量:

test.js: line 5, col 3, '$' is not defined.
Run Code Online (Sandbox Code Playgroud)

当使用JSHint 0.5.5进行linted时.有任何想法吗?

Ste*_*her 379

如果您使用的是相对较新版本的JSHint,通常首选的方法是在项目的根目录中创建一个.jshintrc文件,并将此配置放入其中:

{
    "globals": {
        "$": false
    }
}
Run Code Online (Sandbox Code Playgroud)

这向JSHint声明$是一个全局变量,false表示不应该覆盖它.

真正旧版本的JSHint不支持.jshintrc文件(例如v0.5.5,就像2012年的原始问题一样).如果您不能或不想使用.jshintrc文件,可以在脚本文件的顶部添加:

/*globals $:false */
Run Code Online (Sandbox Code Playgroud)

在JSHint选项页面上还有一个简写的"jquery"jshint选项.

  • 这个选项jquery只定义了两个只读全局变量:$和jQuery.它是`/*global $:false,jQuery:false*/`的缩短版本. (47认同)
  • ":false"的原因是什么?我发现/*global $*/工作正常.(在我的情况下是/*global jQuery*/虽然) (3认同)
  • 选项标志是要走的路.对于第一个定时器:在.jshintrc文件中添加'jquery:true'行. (2认同)

wmi*_*mil 147

您还可以在.jshintrc中添加两行

  "globals": {
    "$": false,
    "jQuery": false
  }
Run Code Online (Sandbox Code Playgroud)

这告诉jshint有两个全局变量.

  • 这应该是公认的答案.使用各种代码行污染项目中的每个单个javascript文件,以使语法检查程序满意不是一种选择.谢谢wmil (3认同)

nir*_*ren 51

所有你需要做的就是设置"jquery": true在你的.jshintrc.

根据JSHint选项参考:

jQuery的

此选项定义jQuery JavaScript库公开的全局变量.

  • 这应该是最重要的答案......耻辱它被埋葬在这里 (6认同)

Jam*_*ton 16

这是一个快乐的小清单,放在你的.jshintrc
我会在时间过关中添加到这个列表.

{
  // other settings...
  // ENVIRONMENTS
  // "browser": true, // Is in most configs by default
  "node": true,
  // others (e.g. yui, mootools, rhino, worker, etc.)
  "globals": {
    "$":false,
    "jquery":false,
    "angular":false
    // other explicit global names to exclude
  },
}
Run Code Online (Sandbox Code Playgroud)


Joe*_*ton 7

如果您使用的是IntelliJ编辑器,例如WebStorm,PyCharm,RubyMine或IntelliJ IDEA:

在文件/设置/ JavaScript /代码质量工具/ JSHint的"环境"部分中,单击"jQuery"复选框.