Javascript jshint错误:重新定义'$';

Javascript jshint错误:重新定义'$';,javascript,jquery,node.js,backbone.js,jshint,Javascript,Jquery,Node.js,Backbone.js,Jshint,我有一个Node.js web应用程序,其中我使用Backbone.js和jQuery。我的主js文件是app.js,其中包括所有必要的脚本,包括jQuery。这是我的app.js代码的开始: 'use strict'; var _ = require('lodash'); var $ = require('jquery'); var B = require('backbone'); B.$ = $; 现在,如果我在我的项目上运行grunt,它会在jQuery加载到$的行中引发错误。它告诉我

我有一个Node.js web应用程序,其中我使用Backbone.js和jQuery。我的主js文件是
app.js
,其中包括所有必要的脚本,包括jQuery。这是我的app.js代码的开始:

'use strict';

var _ = require('lodash');
var $ = require('jquery');
var B = require('backbone');
B.$ = $;
现在,如果我在我的项目上运行
grunt
,它会在jQuery加载到$的行中引发错误。它告诉我:

Linting public/js/app.js ...ERROR
[L4:C5] W079: Redefinition of '$'.
var $ = require('jquery');
我仍然可以使用
grunt--force
运行一切,但我还是希望消除这个错误。有人能解释一下它为什么会引起错误以及如何修复它吗


我的
.jshintrc
文件:

{
    "laxcomma": true
    ,"laxbreak": true
    ,"curly": true
    ,"eqeqeq": true
    ,"immed": true
    ,"latedef": true
    ,"newcap": true
    ,"noarg": true
    ,"sub": true
    ,"undef": true
    ,"unused": false
    ,"asi": true
    ,"boss": true
    ,"eqnull": true
    ,"node": true
    ,"browser": true
    ,"jquery": true
    ,"predef":
    [
        "suite"
        ,"test"
        ,"setup"
        ,"teardown"
        ,"suiteSetup"
        ,"suiteTeardown"
        ,"requestAnimationFrame"
    ]
}
在jshint文档中:


您正在告诉jshint jquery存在,因此他假定已定义$。删除
“jquery”:true“
,您的问题就会消失。

将此添加到文件顶部,以消除该错误:

/*jshint-W079*/

这里发生的事情是JQuery定义了$variable,因此JSHint将其视为


更好的解决方案是直接要求jquery,它应该允许您全局访问$variable。

随机猜测:您是否在其他地方包括jquery?例如,在一些html文件中作为脚本。或者其他一些脚本可能正在定义全局jquery变量。

请确保在.jshintrc中没有将“$”设置为prede罚款

// Predefined Globals
"predef" : ["$"]   

如果是,请删除。

告诉错误消失与goind
grunt--force
是一样的,这是OP不想要的。第二个选项是可以的,但非常丑陋的黑客只是隐藏了问题。我明白你的意思,尽管“非常丑陋的黑客”“这并不是很有用。哈哈,说得好,如果你只是定义一个变量来解决这个问题。然后,这将传播到每次出现问题时(可能也发生在其他文件中),您将有越来越多的变量声明,这不会做任何事情,只会污染代码。这很快就会变成糟糕的做法/代码(谢谢:-)。这是有道理的。我猜你使用grunt contrib jshint(grunt本身不做代码验证)——如果我错了就编辑。@Terry-你能发布你的jshint配置吗?默认情况下,您不应该收到此警告。是的,这肯定是一个jshint配置问题。我用.jshintrc文件内容更新了此问题。有什么不寻常的地方吗?你的意思是,不要做
var$=require('jquery'),我应该做
require('jquery')?@Terry是的,或者配置jQuery模块以排除附加全局jQuery变量,所以我想我还不太明白您的意思。附加全局jQuery变量是什么意思?像
B.$=$?@Terry他们在中说,当您需要jQuery时,它定义了全局变量$和jQuery。jQuery没有定义全局变量,因为它知道它包含在CommonJS模块中,并且不需要全局变量+对于这个答案,这是一个纯粹的jshint问题,它不检查全局变量是否确实存在。不,我仔细检查了,并且在这次调用之前没有包括它。如果添加
console.log(typeof$)在require调用之前?在require调用之前,它是
“未定义的”
// Predefined Globals
"predef" : ["$"]