ESLint - "Fenster" ist nicht definiert. So lassen Sie globale Variablen in package.json zu


186

Ich weise dem globalen Fensterobjekt eine Eigenschaft zu, aber wenn ich eslint ausführe, erhalte ich Folgendes:

"Fenster" ist nicht definiert

Ich sehe das hier in den Eslint-Dokumenten :

Im Folgenden wird Fenster als globale Variable für Code definiert, die die getestete Regel nicht auslösen soll:

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

Ich habe versucht, der Datei package.json so etwas hinzuzufügen, damit eslint "window" als globale Variable zulässt, aber ich muss etwas falsch machen. Aus den Dokumenten geht hervor, dass ich möglicherweise so etwas in einer separaten Datei ausführen muss. Gibt es jedoch eine Möglichkeit, einige zulässige globale Variablen direkt in der Datei package.json zu definieren?


Zu Ihrer Information: Wenn Sie einen Knoten verwenden und ESLint erkennen soll global, müssen Sie sicherstellen "node": true, dass er in Ihrer "env"Konfiguration festgelegt ist.
Joshua Pinter

Antworten:


307

Es gibt eine eingebaute environment: browser, die enthält window.

Beispiel .eslintrc.json:

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

Weitere Informationen: http://eslint.org/docs/user-guide/configuring.html#specifying-environments

Siehe auch die package.jsonAntwort von chevin99 unten.


Absolut die beste Antwort, danke. Daran habe ich gar nicht gedacht :)
Knight Yoshi

4
Für den Fall , jemand anderes wird wie ich ertappt: Dies sollte in .eslintrcnichtpackage.json
A Jar of Clay

Gibt es eine Möglichkeit, dies nur für eine Datei anzuwenden?
AnnanFay

Ich fand das Folgende in der Antwort von Carles Alcolea unten : Fügen Sie oben in dieser einen Datei hinzu:/* eslint-env browser */
Laoujin

102

Ich habe es auf dieser Seite gefunden: http://eslint.org/docs/user-guide/configuring

In package.json funktioniert dies:

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

62
Der richtige Weg, dies zu tun, ist die Verwendung von "env": {"browser": true}
Nicolas

@Nicolas, yep, ich hätte wahrscheinlich die von Ihnen vorgeschlagene Methode verwendet, wenn ich diese zuerst gefunden hätte, aber diese Antwort ist zumindest nützlich, um zu zeigen, dass Sie Ihre eslint-Konfiguration in package.json haben können.
chevin99

4
Es ist auch möglich, Globals für eslint wie folgt zu inline: / * global angle: true * /
Mirko

Die Frage fragt speziell, wie man die Datei package.json verwendet
virtualLast

59

Fügen Sie .eslintrcim Projektstamm hinzu.

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

Irgendwie hat es bei mir nicht funktioniert, eslingConfig in package.json zu platzieren (abgesehen davon, dass es konzeptionell falsch ist). Das Hinzufügen in .eslintrc.json funktioniert jedoch.
Petrunov

1
@Petrunov .eslintrc.jsonkann nur sein.eslintrc
Kirk Strobeck

Dies funktioniert in einem Fall nicht, den ich erlebe - ich verwende eslint mit gulp für ein Chrome-Erweiterungsprojekt. In Globals setze ich "chrome": true und es wird immer noch ein Fehler ausgegeben, dass es sich um ein nicht erkanntes Global handelt.
Stephen Tetreault

42

Ihre .eslintrc.json sollte den folgenden Text enthalten.
Auf diese Weise kennt ESLint Ihre globalen Variablen.

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

13

Mir ist bewusst, dass er nicht nach der Inline- Version fragt . Aber da diese Frage fast 100.000 Besuche hat und ich hierher gekommen bin, um danach zu suchen, lasse ich sie hier für den nächsten Codiererkollegen:

Stellen Sie sicher, dass ESLint nicht mit dem --no-inline-configFlag ausgeführt wird (wenn Ihnen dies nicht bekannt vorkommt, können Sie wahrscheinlich loslegen ). Schreiben Sie dies dann in Ihre Codedatei (aus Gründen der Klarheit und Konvention wird es über die Datei geschrieben, funktioniert aber überall):

/* eslint-env browser */

Dies teilt ESLint mit, dass Ihre Arbeitsumgebung ein Browser ist, sodass es jetzt weiß, welche Dinge in einem Browser verfügbar sind, und sich entsprechend anpasst.

Es gibt viele Umgebungen , und Sie können mehrere gleichzeitig deklarieren, z. B. inline:

/* eslint-env browser, node */

Wenn Sie fast immer bestimmte Umgebungen verwenden, legen Sie diese am besten in der Konfigurationsdatei Ihres ESLint fest und vergessen Sie sie.

Aus ihren Dokumenten :

Eine Umgebung definiert globale Variablen, die vordefiniert sind. Die verfügbaren Umgebungen sind:

  • browser - Globale Variablen des Browsers.
  • node - Globale Variablen von Node.js und Scoping von Node.js.
  • commonjs - Globale CommonJS-Variablen und CommonJS-Gültigkeitsbereich (verwenden Sie dies für Nur-Browser-Code, der Browserify / WebPack verwendet).
  • shared-node-browser - Globale Knoten, die sowohl dem Knoten als auch dem Browser gemeinsam sind.

[...]

Neben Umgebungen können Sie festlegen, dass alles ignoriert wird, was Sie möchten. Wenn es Sie vor der Verwendung warnt console.log(), Sie aber nicht davor gewarnt werden möchten, einfach inline:

/* eslint-disable no-console */

Sie können die Liste aller Regeln anzeigen , einschließlich der empfohlenen Regeln für bewährte Codierungsmethoden .


2

Wenn Sie Angular verwenden , können Sie Folgendes erreichen:

"env": {
    "browser": true,
    "node": true
},
"rules" : {
    "angular/window-service": 0
 }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.