我正在使用Grunt作为我的构建工具和ESLint作为我正在处理的应用程序的linting工具。我也在使用Underscore节点包,并在我的应用程序中使用它。不幸的是,当我在我的代码上运行ESLint时,它认为_是以下行中的未定义变量:
return _.pluck(objects, nameColumn);
这是它给我的错误:
78:21 error "_" is not defined no-undef
我不想禁用ESLint的no-undef规则,我尝试安装Underscore插件,但我仍然收到此错误。如果其他人有任何想法尝试这个,我会非常感激!
如果有任何进一步的信息,我可以帮助任何人帮助我解决这个问题,请告诉我!
答案 0 :(得分:158)
official documentation可以让您了解如何解决此问题。
最简单的解决方法是添加
/* global _ */
位于文件顶部。
但是因为你必须为每个新的js文件做到这一点,所以它会变得烦人。如果您经常使用下划线,我建议您add globals to your .eslintrc
file,例如:
{
"globals": {
"_": false
}
}
并将其保存为项目根目录中的.eslintrc
,或者可选地保存在用户主目录中。虽然有人说后者不推荐,但它有时候很方便,但你必须记住你有它在那里:)
上述规则的解释:"_": false
表示名为_
的变量告诉eslint此变量是全局定义的,它不会发出任何no-undef
此变量的错误。正如@sebastian所指出的那样,false
意味着该变量无法被覆盖,因此代码_ = 'something else'
将产生错误no-global-assign
。如果您改为使用"_": true
(这是我之前的回答),这意味着可以重新分配该值,并且不会发生前面提到的错误。
但请记住,只有直接分配给我在示例中显示的全局变量时才会发生这种情况。你仍然可以遮蔽它,而且eslint不会说什么。例如,这些代码段不会产生no-global-assign
:
const _ = 'haha I broke your _'
或作为函数参数名称,例如
function (_) {
console.log(_, 'might not be the _ you were looking for')
}
答案 1 :(得分:4)
如果您正在使用jest进行测试 - 在您的环境中 - 在eslintrc.json
中"env":{
"jest":true
}