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?

chevin99
quelle
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.

Laoujin
quelle
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
  }
}
chevin99
quelle
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
  }
}
Kirk Strobeck
quelle
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
  }                                                                      
}
Sergey Andreev
quelle
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 .

Carles Alcolea
quelle
2

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

"env": {
    "browser": true,
    "node": true
},
"rules" : {
    "angular/window-service": 0
 }
AndreaM16
quelle