ESLint - "finestra" non è definita. Come consentire le variabili globali in package.json


187

Sto assegnando una proprietà all'oggetto finestra globale, ma quando eseguo eslint, ottengo questo:

"finestra" non è definita

Lo vedo qui nei documenti eslint :

quanto segue definisce window come una variabile globale per il codice che non dovrebbe attivare la regola testata:

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

Ho provato ad aggiungere qualcosa del genere al file package.json per far sì che eslint consenta "window" come variabile globale, ma devo fare qualcosa di sbagliato. Dai documenti sembra che potrei aver bisogno di fare qualcosa del genere in un file separato, ma c'è un modo per definire alcune variabili globali consentite proprio nel file package.json?


Cordiali saluti, se si utilizza il nodo e si desidera che ESLint lo riconosca, globalè necessario assicurarsi che "node": truesia impostato nella propria "env"configurazione.
Joshua Pinter,

Risposte:


310

C'è un builtin environment: browserche includewindow .

Esempio .eslintrc.json:

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

Maggiori informazioni: http://eslint.org/docs/user-guide/configuring.html#specifying-environments

Vedi anche la package.jsonrisposta di chevin99 di seguito.


Assolutamente la migliore risposta, grazie. Non ci avevo nemmeno pensato :)
Knight Yoshi

4
Solo nel caso qualcun altro viene catturato fuori come me: Questo dovrebbe essere in .eslintrcnonpackage.json
un barattolo di argilla

C'è un modo per fare in modo che questo si applichi solo a un file?
AnnanFay,

Ho trovato quanto segue nella risposta di Carles Alcolea di seguito : Aggiungi all'inizio di questo file:/* eslint-env browser */
Laoujin

102

L'ho trovato in questa pagina: http://eslint.org/docs/user-guide/configuring

In package.json, funziona:

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

63
il modo giusto per farlo è usare "env": {"browser": vero}
Nicolas

@Nicolas, sì, probabilmente avrei usato il metodo che hai suggerito se fosse quello che avevo trovato prima, ma questa risposta è almeno utile nel mostrare che puoi avere la tua configurazione eslint in package.json.
chevin99,

4
È anche possibile inline globals per eslint in questo modo: / * global angular: true * /
Mirko

la domanda chiede in particolare come utilizzare il file package.json
virtualLast

59

Aggiungi .eslintrcnella radice del progetto.

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

In qualche modo mettere eslingConfig in package.json non ha funzionato per me (a parte essere concettualmente sbagliato). Aggiungendolo in .eslintrc.json funziona però.
Petrunov,

1
@Petrunov .eslintrc.jsonpuò essere solo.eslintrc
Kirk Strobeck il

questo non funziona in un caso che sto riscontrando - sto usando eslint con gulp per un progetto di estensione di Chrome. in globals ho impostato "chrome": true e genera ancora un errore sul fatto che è un globale non riconosciuto.
Stephen Tetreault,

42

Il tuo .eslintrc.json dovrebbe contenere il testo seguente.
In questo modo ESLint conosce le tue variabili globali.

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

14

Sono consapevole che non sta chiedendo la versione in linea . Ma poiché questa domanda ha quasi 100.000 visite e sono caduta qui a cercarla, la lascerò qui per il prossimo collega programmatore:

Assicurati che ESLint non sia eseguito con il --no-inline-configflag (se questo non suona familiare, probabilmente sei a posto). Quindi, scrivi questo nel tuo file di codice (per chiarezza e convenzione, è scritto sopra il file ma funzionerà ovunque):

/* eslint-env browser */

Questo dice a ESLint che il tuo ambiente di lavoro è un browser, quindi ora sa quali cose sono disponibili in un browser e si adatta di conseguenza.

Esistono molti ambienti e puoi dichiararne più di uno contemporaneamente, ad esempio in linea:

/* eslint-env browser, node */

Se usi quasi sempre ambienti particolari, è meglio impostarlo nel file di configurazione di ESLint e dimenticartene.

Dai loro documenti :

Un ambiente definisce le variabili globali predefinite. Gli ambienti disponibili sono:

  • browser - variabili globali del browser.
  • node - Variabili globali Node.js e ambito Node.js.
  • commonjs - Variabili globali CommonJS e ambito CommonJS (utilizzare questo per il codice solo del browser che utilizza Browserify / WebPack).
  • shared-node-browser - Globali comuni sia al nodo che al browser.

[...]

Oltre agli ambienti, puoi farlo ignorare tutto quello che vuoi. Se ti avverte di utilizzare console.log()ma non vuoi essere avvisato, usa solo:

/* eslint-disable no-console */

È possibile visualizzare l'elenco di tutte le regole , incluse le regole consigliate per le migliori pratiche di codifica .


2

Se stai usando Angular puoi farlo con:

"env": {
    "browser": true,
    "node": true
},
"rules" : {
    "angular/window-service": 0
 }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.