繁体   English   中英

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

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

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

return _.pluck(objects, nameColumn);

这是它给我的错误:

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

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

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

官方文档应该让您了解如何解决此问题。

任何对未声明变量的引用都会导致警告,除非该变量在/*global...*/注释中明确提及,或在配置文件的globals键中指定。

最简单的解决方法是添加

/* global _ */

在你的文件的顶部。

或者更好的是,显式指定变量是只读的,以禁止覆盖变量:

/* global _:readonly */

但是由于您必须为每个新的 js 文件执行此操作,所以它会变得很烦人。 如果您经常使用下划线,我建议将全局变量添加到您的.eslintrc文件中,例如:

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

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


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

但请记住,这只有在您直接分配给全局变量时才会发生,如我在示例中所示。 你仍然可以隐藏它并且 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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM