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

Fla*_*nix 6 javascript import cloud9-ide cloud9

目的

阻止Cloud9 IDE向我发出警告消息.

背景

我正在使用Cloud9 IDE编写JavaScript代码,无论我在哪里使用其他文件中的类(在同一文件夹中),我都会收到警告消息:

VarName未定义,请修复或添加/*全局VarName*/

现在这让我烦恼,我想解决它.

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

我尝试了什么

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

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

问题

然而,即使在添加上述行之后,我仍然会收到警告.它不会消失.

问题

  1. 难道我做错了什么?
  2. 有没有办法在不向我的代码添加注释的情况下删除警告?
  3. 还有另一种实现目标的方法吗?

Fla*_*nix 8

官方论坛上创建一个帖子后,我现在有足够的信心在这里发布我学到的东西了.

摘要

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

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

解决方案1

为了避免该消息,可以简单地关闭项目设置中的"标记未定义变量"选项.

虽然这个解决方案可行,但它只会停止标记所有未定义的变量,甚至是你想要标记的变量.出于这个原因,我不推荐这种方法.

解决方案2

也可以.eslintrc使用所有全局变量创建一个思考文件,如下所示:

{
    "globals": {
        "var1": true,
        "var2": false
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

我看待它的方式,一个技术性的解决方案,但不实用.

解决方案3

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

然而,这种方法的问题在于,在撰写答案时,没有浏览器支持export以及import关键字:

将来这可能会改变,但是现在它确实如此,所以我们也不能使用这个解决方案.

解决方案4

通过排除部件,由于解决方案一和二要么容易产生巨大的副作用,要么有巨大的缩放问题,这是我将暂时使用的解决方案.

它没有任何副作用,由于其对其他文件的独立性而非常好地扩展,最重要的是,一旦解决方案3可供使用,通过调用import关键字简单地替换注释将非常容易.

结论

目前,解决方案4是最佳实践.但是,一旦浏览器添加了对解决方案3的支持,就应该使用它来代替解决方案4.

积分

特别感谢Harutyun Amirjanyan坚持不懈,耐心和指导,帮助我解决这个问题.