ESLint 的 "no-undef" 规则将我对 Underscore 的使用称为未定义变量

ESLint's "no-undef" rule is calling my use of Underscore an undefined variable

我正在使用 G运行t 作为我的构建工具,并使用 ESLint 作为我正在开发的应用程序的 linting 工具。我也在使用 Underscore Node 包,并在我的应用程序中使用了它。不幸的是,当我在我的代码上 运行 ESLint 时,它认为 _ 是以下行中的未定义变量:

return _.pluck(objects, nameColumn);

这是它给我的错误:

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

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

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

official documentation 应该会让您知道如何解决这个问题。

Any reference to an undeclared variable causes a warning, unless the variable is explicitly mentioned in a /*global ...*/ comment, or specified in the globals key in the configuration file.

最简单的解决方法是添加

/* global _ */

在文件的顶部。

或者更好的是,显式指定变量为 read-only,以禁止覆盖变量:

/* global _:readonly */

但是由于您必须为每个新的 js 文件执行此操作,因此可能会很烦人。如果你经常使用下划线,我建议add globals to your .eslintrc file,例如:

{
    "globals": {
        "_": "readonly"
    }
}

并将其另存为 .eslintrc 在您的项目根目录中,或者选择性地保存在您的用户主目录中。虽然有人说不推荐后者,但有时会很方便,但你必须记住你有它:)


上面规则的解释"_": "readonly"(以前是"_": false,现在已经弃用了)意思是一个名为_的变量告诉注意这个变量是全局定义的,它不会为此变量发出任何 no-undef 错误。正如@sebastian 指出的那样,"readonly"(或false - 已弃用)意味着变量不能被覆盖,因此代码_ = 'something else' 会产生错误no-global-assign。如果您改为使用 "_": "writable"(或 "_": true - 已弃用),这意味着该值可以是 re-assigned,并且不会发生前面提到的错误。

但请记住,只有在您直接分配给全局变量时才会发生这种情况,如我在示例中所示。你仍然可以隐藏它并且 eslint 不会说什么。例如,这些片段不会产生 no-global-assign:

const _ = 'haha I broke your _' 

或作为函数参数名称,例如

function (_) {
  console.log(_, 'might not be the _ you were looking for') 
}

如果您使用 jest 进行测试 - 在您的环境中 - 在 eslintrc.json

"env":{
    "jest":true
}