Die “no-undef”-Regel von ESLint nennt meine Verwendung von Underscore eine undefinierte Variable

Lesezeit: 3 Minuten

Ich verwende Grunt als mein Build-Tool und ESLint als mein Linting-Tool für eine App, an der ich arbeite. Ich verwende auch das Underscore Node-Paket und habe es in meiner App verwendet. Wenn ich ESLint in meinem Code ausführe, denkt es leider, dass _ eine undefinierte Variable in der folgenden Zeile ist:

return _.pluck(objects, nameColumn);

Dies ist der Fehler, den es mir gibt:

78:21 error "_" is not defined no-undef

Ich würde es vorziehen, die no-undef-Regel für ESLint nicht zu deaktivieren, und ich habe versucht, das Underscore-Plugin zu installieren, aber ich erhalte immer noch diesen Fehler. Wenn jemand noch eine Idee hat, was man damit versuchen könnte, wäre ich sehr dankbar!

Wenn es weitere Informationen gibt, die ich geben kann und die mir helfen würden, das herauszufinden, lassen Sie es mich einfach wissen!

Benutzer-Avatar
Markus Gresak

Das amtliche Dokumentation sollte Ihnen eine Idee geben, wie Sie dies beheben können.

Jeder Verweis auf eine nicht deklarierte Variable führt zu einer Warnung, es sei denn, die Variable wird ausdrücklich in a erwähnt /*global ...*/ Kommentar, oder in der angegeben globals Schlüssel in der Konfigurationsdatei.

Die einfachste Lösung wäre das Hinzufügen

/* global _ */

oben in Ihrer Datei.

Oder besser, geben Sie explizit an, dass die Variable schreibgeschützt ist, um das Überschreiben der Variablen zu verhindern:

/* global _:readonly */

Aber da Sie das für jede neue js-Datei tun müssen, kann es lästig werden. Wenn Sie häufig Unterstriche verwenden, würde ich vorschlagen fügen Sie Globals zu Ihrer hinzu .eslintrc Dateizum Beispiel:

{
    "globals": {
        "_": "readonly"
    }
}

Und speichern Sie diese als .eslintrc in Ihrem Projektstamm oder optional in Ihrem Benutzer-Home-Verzeichnis. Obwohl einige sagen, dass letzteres nicht empfohlen wird, kann es manchmal praktisch sein, aber Sie müssen bedenken, dass Sie es dort haben 🙂


Erläuterung der obigen Regel: "_": "readonly" (früher "_": falsejetzt veraltet) bedeutet, dass eine Variable namens _ teilt eslint mit, dass diese Variable global definiert ist und keine ausgeben wird no-undef Fehler für diese Variable. Wie @sebastian betonte, "readonly" (oder false – veraltet) bedeutet, dass die Variable nicht überschrieben werden kann, so der Code _ = 'something else' würde einen Fehler liefern no-global-assign. Wenn Sie stattdessen verwenden würden "_": "writable" (oder "_": true – veraltet), bedeutet dies, dass der Wert neu zugewiesen werden kann und der zuvor erwähnte Fehler nicht auftritt.

Beachten Sie jedoch, dass dies nur geschieht, wenn Sie direkt auf die globale Variable zuweisen, wie ich es im Beispiel gezeigt habe. Sie können es immer noch beschatten und eslint wird nichts sagen. Diese Ausschnitte würden beispielsweise nicht die no-global-assign:

const _ = 'haha I broke your _' 

oder als Funktionsargumentname, zB

function (_) {
  console.log(_, 'might not be the _ you were looking for') 
}

  • sollten Sie den Wert nicht auf setzen false um das Überschreiben zu verbieten?

    – Sebastian

    11. September 2017 um 13:30 Uhr

  • @sebastian es kommt darauf an, es könnte einen Fall geben, in dem man das tun möchte. Aber ich stimme zu, dass die meisten Fälle falsch sein sollten, also habe ich Ihre Beobachtung der Antwort hinzugefügt. Großer Fang!

    – Marko Gresak

    11. September 2017 um 14:03 Uhr

  • Sie sollten nicht verwenden false da es veraltet ist. Du solltest schreiben readonly stattdessen. Quelle: Globale Eslint-Konfiguration

    – Ser

    10. November 2020 um 11:39 Uhr


  • @Ser danke für den Hinweis, ich habe die Antwort aktualisiert, um sie zu ändern false -> "readonly" und true -> "writable".

    – Marko Gresak

    17. November 2020 um 13:55 Uhr


Benutzer-Avatar
Leon Afrika

Wenn Sie jest zum Testen verwenden – in Ihrer Umgebung – in eslintrc.json

"env":{
    "jest":true
}

1146170cookie-checkDie “no-undef”-Regel von ESLint nennt meine Verwendung von Underscore eine undefinierte Variable

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy