Javascript jshint错误:重新定义'$';
我有一个Node.js web应用程序,其中我使用Backbone.js和jQuery。我的主js文件是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加载到$的行中引发错误。它告诉我
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" : ["$"]