ESLint „no-undef” regula este de asteptare utilizarea mea de Underscore o variabilă nedefinită (Programare, Javascript, Angularjs, Gruntjs, Underscore.Js, Eslint)

turner a intrebat.

Folosesc Grunt ca instrument de construcție și ESLint ca instrument de linting pentru o aplicație la care lucrez. Folosesc, de asemenea, pachetul Underscore Node și l-am folosit în aplicația mea. Din păcate, atunci când execut ESLint pe codul meu, acesta consideră că _ este o variabilă nedefinită în următoarea linie:

return _.pluck(objects, nameColumn);

Aceasta este eroarea pe care mi-o dă:

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

Aș prefera să nu dezactivez regula no-undef pentru ESLint și am încercat să instalez pluginul Underscore, dar tot primesc această eroare. Dacă mai are cineva vreo idee despre ce să încerc cu acest lucru, v-aș fi foarte recunoscător!

Dacă pot oferi orice alte informații care ar putea ajuta pe cineva să mă ajute să rezolv această problemă, anunțați-mă!

2 răspunsuri
Marko Grešak

The documentația oficială ar trebui să vă dea o idee despre cum să rezolvați acest lucru.

Orice referință la o variabilă nedeclarată provoacă un avertisment, cu excepția cazului în care variabila este menționată explicit într-o /*global ...*/ comentariu sau specificată în globals din fișierul de configurare.

Cea mai simplă soluție ar fi să adăugați

/* global _ */

în partea de sus a fișierului.

Sau, mai bine, specificați în mod explicit că variabila este doar pentru citire, pentru a nu permite suprascrierea variabilei:

/* global _:readonly */

Dar, din moment ce va trebui să faceți acest lucru pentru fiecare fișier js nou, poate deveni enervant. Dacă folosiți des underscore, v-aș sugera să să adăugați globals la .eslintrc fișier, , de exemplu:

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

Și salvați acest lucru ca .eslintrc în rădăcina proiectului dumneavoastră sau, opțional, în directorul de origine al utilizatorului dumneavoastră. Deși unii spun că acesta din urmă nu este recomandat, uneori poate fi convenabil, dar trebuie să vă amintiți că îl aveți acolo 🙂


Explicația regulii de mai sus: "_": "readonly" (înainte era "_": false, , acum depreciată) înseamnă că o variabilă numită _ îi spune lui eslint că această variabilă este definită la nivel global și că nu va emite nicio no-undef erori pentru această variabilă. După cum a subliniat @sebastian, "readonly" (sau false – deprecated) înseamnă că variabila nu poate fi suprascrisă, astfel încât codul _ = 'something else' ar produce o eroare no-global-assign. Dacă ați utiliza în schimb "_": "writable" (sau "_": true – deprecated), aceasta înseamnă că valoarea poate fi realocată și nu se va produce eroarea menționată anterior.

Rețineți însă că acest lucru se va întâmpla numai dacă atribuiți direct variabilei globale, așa cum am arătat în exemplu. Puteți în continuare să o umbriți și eslint nu va spune nimic. De exemplu, aceste fragmente nu ar da rezultatul no-global-assign:

const _ = 'haha I broke your _' 

sau ca nume de argument al funcției, de ex.

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

Comentarii

  • nu ar trebui să setați valoarea la false pentru a interzice suprascrierea? –  > Por sebastian.
  • @sebastian depinde, ar putea exista un caz în care cineva ar dori să facă acest lucru. Dar sunt de acord că majoritatea cazurilor ar trebui să fie false, așa că am adăugat observația ta la răspuns. Bună observație! –  > Por Marko Grešak.
  • Nu ar trebui să utilizați false deoarece este depreciat. Ar trebui să scrieți readonly în schimb. Sursă: Configurația globală Eslint –  > Por Ser.
  • @Ser vă mulțumim că ați semnalat acest lucru, am actualizat răspunsul pentru a schimba false -> "readonly" și true -> "writable". –  > Por Marko Grešak.
Leon Africa

Dacă folosiți jest pentru testare – în mediul dumneavoastră – în eslintrc.json

"env":{
    "jest":true
}