ESLint - „okno” nie jest zdefiniowane. Jak zezwolić na zmienne globalne w pliku package.json

187

Przypisuję właściwość do globalnego obiektu okna, ale po uruchomieniu eslint otrzymuję:

„okno” nie jest zdefiniowane

Widzę to tutaj w dokumentach eslint :

poniżej definiuje okno jako zmienną globalną dla kodu, która nie powinna wyzwalać testowanej reguły:

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

Próbowałem dodać coś takiego do pliku package.json, aby eslint zezwalał „window” jako zmiennej globalnej, ale muszę robić coś złego. Z dokumentów wynika, że ​​być może będę musiał zrobić coś takiego w osobnym pliku, ale czy istnieje sposób na zdefiniowanie dozwolonych zmiennych globalnych bezpośrednio w pliku package.json?

chevin99
źródło
Do Twojej wiadomości, jeśli używasz węzła i chcesz, aby ESLint rozpoznał global, musisz upewnić się, że "node": truejest ustawiony w "env"konfiguracji.
Joshua Pinter

Odpowiedzi:

309

Jest wbudowane, environment: browserktóre obejmuje window.

Przykład .eslintrc.json:

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

Więcej informacji: http://eslint.org/docs/user-guide/configuring.html#specifying-environments

Zobacz także package.jsonodpowiedź chevin99 poniżej.

Laoujin
źródło
Absolutnie najlepsza odpowiedź, dzięki. Nawet o tym nie myślałem :)
Knight Yoshi
4
Tylko w przypadku, ktoś wpada się jak ja: To powinno być w .eslintrcniepackage.json
słoik Clay
Czy istnieje sposób, aby zastosować to tylko do jednego pliku?
AnnanFay,
W odpowiedzi Carles Alcolea poniżej znalazłem następujące : Dodaj na początku tego jednego pliku:/* eslint-env browser */
Laoujin
102

Znalazłem go na tej stronie: http://eslint.org/docs/user-guide/configuring

W pakiecie.json działa to:

"eslintConfig": {
  "globals": {
    "window": true
  }
}
chevin99
źródło
63
właściwym sposobem na to jest użycie „env”: {„browser”: true}
Nicolas
@Nicolas, tak, prawdopodobnie skorzystałbym z metody, którą zasugerowałeś, gdyby to właśnie znalazłem jako pierwszy, ale ta odpowiedź jest co najmniej przydatna w pokazaniu, że możesz mieć konfigurację eslint w pliku package.json.
chevin99
4
Możliwe jest również wstawienie globals dla eslint w następujący sposób: / * global angular: true * /
Mirko
pytanie dotyczy w szczególności sposobu korzystania z pliku package.json
virtualLast
59

Dodaj .eslintrcw katalogu głównym projektu.

{
  "globals": {
    "document": true,
    "foo": true,
    "window": true
  }
}
Kirk Strobeck
źródło
Jakoś umieszczenie eslingConfig w pliku package.json nie działało dla mnie (poza tym, że było błędne koncepcyjnie). Jednak dodanie go w pliku .eslintrc.json działa.
Petrunov,
1
@Petrunov .eslintrc.jsonmoże być.eslintrc
Kirk Strobeck
to nie działa w jednym przypadku, którego doświadczam - używam eslint z gulp do projektu rozszerzenia chrome. w globals ustawiam „chrome”: true i nadal generuje błąd, że jest nierozpoznanym globalnym.
Stephen Tetreault
42

Twój plik .eslintrc.json powinien zawierać poniższy tekst.
W ten sposób ESLint wie o twoich zmiennych globalnych.

{
  "env": {
    "browser": true,
    "node": true
  }                                                                      
}
Siergiej Andreev
źródło
14

Wiem, że nie prosi o wersję wbudowaną . Ale ponieważ to pytanie ma prawie 100 tys. Odwiedzin i wpadłem tutaj, szukając tego, zostawię to tutaj następnemu programistowi:

Upewnij się, że ESLint nie działa z --no-inline-configflagą (jeśli to nie brzmi znajomo, prawdopodobnie dobrze jest jechać). Następnie zapisz to w pliku kodu (dla zachowania przejrzystości i konwencji, jest napisane na wierzchu pliku, ale będzie działać wszędzie):

/* eslint-env browser */

To informuje ESLint, że twoje środowisko pracy jest przeglądarką, więc teraz wie, jakie rzeczy są dostępne w przeglądarce i odpowiednio się dostosowuje.

Istnieje wiele środowisk i możesz zadeklarować więcej niż jedno w tym samym czasie, na przykład:

/* eslint-env browser, node */

Jeśli prawie zawsze korzystasz z określonych środowisk, najlepiej ustawić go w pliku konfiguracyjnym ESLinta i zapomnieć o tym.

Z ich dokumentów :

Środowisko definiuje predefiniowane zmienne globalne. Dostępne środowiska to:

  • browser - zmienne globalne przeglądarki.
  • node - Zmienne globalne Node.js i określanie zakresu Node.js.
  • commonjs - Zmienne globalne CommonJS i zakres CommonJS (użyj tego dla kodu tylko do przeglądarki, który używa Browserify / WebPack).
  • shared-node-browser - Globale wspólne zarówno dla węzła, jak i przeglądarki.

[...]

Oprócz środowisk możesz sprawić, że zignoruje wszystko, co chcesz. Jeśli ostrzega cię przed używaniem, console.log()ale nie chcesz być o tym ostrzegany, po prostu wstaw:

/* eslint-disable no-console */

Możesz zobaczyć listę wszystkich reguł , w tym zalecanych reguł dla najlepszych praktyk kodowania .

Carles Alcolea
źródło
2

Jeśli używasz Angulara , możesz to zrobić za pomocą:

"env": {
    "browser": true,
    "node": true
},
"rules" : {
    "angular/window-service": 0
 }
AndreaM16
źródło