217

我正在为全局窗口对象分配一个属性,但是当我运行 eslint 时,我得到了这个:

“窗口”未定义

在 eslint 文档中看到了这个:

以下将 window 定义为不应触发正在测试的规则的代码的全局变量:

valid: [
  {
    code: "window.alert()",
    globals: [ "window" ]
  }
]

我尝试在 package.json 文件中添加类似这样的内容,以使 eslint 允许“窗口”作为全局变量,但我一定做错了什么。从文档看来我可能需要在一个单独的文件中做这样的事情,但是有没有办法在 package.json 文件中定义一些允许的全局变量?

4

6 回答 6

366

有一个内置environment: browser的,包括window.

示例.eslintrc.json

"env": {
    "browser": true,
    "node": true,
    "jasmine": true
  },

更多信息:http ://eslint.org/docs/user-guide/configuring.html#specifying-environments

另请参阅下面chevin99package.json答案。

于 2015-09-09T14:06:44.000 回答
111

我在这个页面上找到了它:http: //eslint.org/docs/user-guide/configuring

在 package.json 中,这有效:

"eslintConfig": {
  "globals": {
    "window": true
  }
}
于 2015-05-22T15:07:04.537 回答
62

.eslintrc在项目根目录中添加。

{
  "globals": {
    "document": true,
    "foo": true,
    "window": true
  }
}
于 2016-09-05T13:43:54.970 回答
44

您的.eslintrc.json应包含以下文本。
这样 ESLint 就知道你的全局变量了。

{
  "env": {
    "browser": true,
    "node": true
  }                                                                      
}
于 2017-12-08T09:33:51.690 回答
20

我知道他不是要内联版本。但由于这个问题有近 10 万次访问,我在这里寻找它,我将把它留给下一位程序员:

确保 ESLint 没有与--no-inline-config标志一起运行(如果这听起来不熟悉,你可能会很好)。然后,把它写在你的代码文件中(为了清晰和约定,它写在文件的顶部,但它可以在任何地方工作):

/* eslint-env browser */

这告诉 ESLint 你的工作环境是一个浏览器,所以现在它知道浏览器中有哪些可用的东西并相应地进行调整。

环境有很多,你可以同时声明多个环境,例如内联:

/* eslint-env browser, node */

如果你几乎总是使用特定的环境,最好将它设置在你的ESLint 的配置文件中,然后忘记它。

他们的文档中

环境定义了预定义的全局变量。可用的环境有:

  • browser- 浏览器全局变量。
  • node- Node.js 全局变量和 Node.js 范围。
  • commonjs- CommonJS 全局变量和 CommonJS 范围(将其用于使用 Browserify/WebPack 的仅浏览器代码)。
  • shared-node-browser- 节点和浏览器通用的全局变量。

[...]

除了环境,你可以让它忽略你想要的任何东西。如果它警告您有关使用console.log()但您不想被警告它,只需内联:

/* eslint-disable no-console */

您可以查看所有规则的列表,包括推荐的最佳编码实践规则。

于 2019-03-16T15:39:08.640 回答
2

如果您使用的是Angular,您可以通过以下方式完成:

"env": {
    "browser": true,
    "node": true
},
"rules" : {
    "angular/window-service": 0
 }
于 2017-05-05T13:43:33.257 回答