ESLint-未定义“窗口”。如何在package.json中允许全局变量


186

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

“窗口”未定义

在eslint docs中看到了这一点

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

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

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


仅供参考,如果您正在使用节点并希望ESLint能够识别,global则需要确保"node": true已在您的"env"配置下进行了设置。
约书亚·品特

Answers:


308

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

范例.eslintrc.json

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

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

还看到package.json由chevin99答案如下。


绝对是最好的答案,谢谢。我什至都没想到:)
奈泽骑士(Knight Yoshi)

4
以防万一有人像我一样被抓到:这应该.eslintrc不是package.json
一罐黏土

有没有办法使它仅适用于一个文件?
AnnanFay

我在以下Carles Alcolea答案中找到以下内容:在此文件的顶部添加:/* eslint-env browser */
Laoujin

102

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

在package.json中,这有效:

"eslintConfig": {
  "globals": {
    "window": true
  }
}

62
正确的方法是使用“ env”:{“ browser”:true}
Nicolas

@Nicolas,是的,如果那是我首先发现的,我可能会使用您建议的方法,但是此答案至少对显示可以在package.json中包含eslint配置很有用。
chevin99 '16

4
也可以像这样内联eslint的全局变量:/ * global angular:true * /
Mirko

这个问题专门询问如何使用package.json文件
virtualLast

59

添加.eslintrc项目根目录。

{
  "globals": {
    "document": true,
    "foo": true,
    "window": true
  }
}

以某种方式将eslingConfig放置在package.json中对我来说不起作用(除了概念上是错误的)。不过,将其添加到.eslintrc.json中是可行的。
Petrunov

1
@Petrunov .eslintrc.json可以是.eslintrc
Kirk Strobeck'1

这在我遇到的情况下不起作用-我在chrome扩展项目中使用带有gulp的eslint。在全局变量中,我将“ chrome”设置为true,并且仍然无法识别全局变量,但仍会引发错误。
Stephen Tetreault


13

我知道他不是要内联版本。但是,由于这个问题有将近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 */

您可以看到所有规则的列表,包括为获得最佳编码实践而推荐的规则。


2

如果您使用的是Angular,则可以通过以下方式将其关闭:

"env": {
    "browser": true,
    "node": true
},
"rules" : {
    "angular/window-service": 0
 }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.