ESLint" no-undef"规则是调用我对Underscore使用的未定义变量

时间:2016-01-15 22:17:47

标签: javascript angularjs gruntjs underscore.js eslint

我正在使用Grunt作为我的构建工具和ESLint作为我正在处理的应用程序的linting工具。我也在使用Underscore节点包,并在我的应用程序中使用它。不幸的是,当我在我的代码上运行ESLint时,它认为_是以下行中的未定义变量:

return _.pluck(objects, nameColumn);

这是它给我的错误:

78:21 error "_" is not defined no-undef

我不想禁用ESLint的no-undef规则,我尝试安装Underscore插件,但我仍然收到此错误。如果其他人有任何想法尝试这个,我会非常感激!

如果有任何进一步的信息,我可以帮助任何人帮助我解决这个问题,请告诉我!

2 个答案:

答案 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
}