VarName 未定义,请修复或添加 /*global VarName*/ Cloud9

VarName is not defined, please fix or add /*global VarName*/ Cloud9

Objective

停止 Cloud9 IDE 给我警告消息。

背景

我正在使用 Cloud9 IDE 编码 JavaScript,无论我在哪里使用来自另一个文件(在同一文件夹中)的 class,我都会收到警告消息:

VarName is not defined, please fix or add /*global VarName*/

现在这个问题困扰着我,我想修复它。

显而易见的解决方案是添加注释 /*global VarName*/ 并完成它,但我认为这不是一个好的做法。

我试过的

经过研究,我发现了 JavaScript import functionality。理论上,这将允许我做类似 import "myOtherJsFile" 的事情并完成它。

这将是该问题的一个很好的标准化解决方案,因为许多其他语言采用相同的方法。

问题

但是,即使添加了上述行,我仍然收到警告。它不会消失。

问题

  1. 我是不是做错了什么?
  2. 有没有办法在不向我的代码添加注释的情况下删除警告?
  3. 还有其他方法可以实现我的 objective 吗?

创建 thread on the official forums 之后,我现在有足够的信心 post 在这里学习我所学到的东西。

总结

讨论了四种解决问题的方法:

  1. 禁用项目中的变量警告
  2. 正在创建一个包含所有全局变量的 .eslintrc 文件
  3. 使用importexport
  4. 在文件顶部添加注释/*global varName*/

解决方案 1

要避免出现该消息,只需在项目设置中关闭 "mark undefined variables" 选项即可。

尽管此解决方案可行,但它只会停止标记所有未定义的变量,即使是您希望它标记的变量。因此,我不推荐这种方法。

解决方案 2

也可以创建一个包含所有全局变量的 .eslintrc think 文件,如下所示:

{
    "globals": {
        "var1": true,
        "var2": false
    }
}

有关配置的更多信息:http://eslint.org/docs/user-guide/configuring

这种方法的问题是每次创建、删除或更改全局变量时,都必须更新全局变量文件。

这很快就会变得很麻烦,我什至不打算讨论对大型项目的维护影响,这很快就会成为一场噩梦。

在我看来,这是一个技术性的解决方案,但不实用。

解决方案 3

首选解决方案,因为它完全依赖于 JavaScript,并且与其他语言的导入和导出功能非常相似。

然而,这种方法的问题是,在撰写答案时,没有浏览器支持 exportimport 关键字:

将来可能会改变,但目前是这样,所以我们也不能使用这个解决方案。

解决方案 4

排除部分,因为解决方案一和二要么容易产生巨大的副作用,要么存在巨大的缩放问题,这是我暂时使用的解决方案。

它没有副作用,由于它与其他文件无关,因此可以很好地扩展,最重要的是,一旦解决方案 3 可供使用,只需调用 import关键字。

结论

目前,解决方案 4 是最佳做法。但是,一旦浏览器添加了对解决方案 3 的支持,就应该使用解决方案 4 而不是解决方案 4。

学分

特别感谢 Harutyun Amirjanyan 的坚韧、耐心和指导,帮助我解决了这个问题。

另一种可能的方法,类似于解决方案 1,是转到项目设置中的 "Hints and Warnings" 部分,然后在 "Ignore messages matching Regex" 下键入

.* is not defined; please fix or add /\*global

此正则表达式将匹配那些烦人的消息,但也允许错误检查器捕获其他没有该特定消息的未定义变量。

(当然,如果 Cloud9 确实有其他针对未定义变量的警告,而这些警告不是那种形式,这只会比其他提议的解决方案更好。)