ESLint - "jendela" tidak ditentukan. Cara mengizinkan variabel global di package.json

187

Saya menetapkan properti ke objek jendela global, tetapi ketika saya menjalankan eslint, saya mendapatkan ini:

"jendela" tidak ditentukan

Saya melihat ini di sini di eslint docs :

jendela berikut mendefinisikan sebagai variabel global untuk kode yang seharusnya tidak memicu aturan yang diuji:

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

Saya sudah mencoba menambahkan sesuatu seperti ini ke file package.json agar eslint mengizinkan "jendela" sebagai variabel global, tetapi saya pasti melakukan sesuatu yang salah. Dari dokumen sepertinya saya mungkin perlu melakukan sesuatu seperti ini di file terpisah, tetapi apakah ada cara untuk mendefinisikan beberapa variabel global yang diizinkan tepat di file package.json?

chevin99
sumber
FYI, jika Anda menggunakan node dan ingin ESLint mengenali globalmaka Anda perlu memastikan "node": truediatur di bawah "env"konfigurasi Anda .
Joshua Pinter

Jawaban:

310

Ada builtin environment: browseryang mencakup window.

Contoh .eslintrc.json:

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

Informasi lebih lanjut: http://eslint.org/docs/user-guide/configuring.html#specifying-environmentments

Juga lihat para package.jsonjawaban dengan chevin99 bawah.

Laoujin
sumber
Benar-benar jawaban terbaik, terima kasih. Aku bahkan tidak memikirkan itu :)
Knight Yoshi
4
Untuk berjaga-jaga jika ada orang yang tertangkap seperti saya: Ini seharusnya .eslintrctidakpackage.json
A Jar of Clay
Apakah ada cara membuat ini hanya berlaku untuk satu file?
AnnanFay
Saya menemukan yang berikut dalam jawaban oleh Carles Alcolea di bawah ini : Tambahkan di bagian atas file yang satu ini:/* eslint-env browser */
Laoujin
102

Saya menemukannya di halaman ini: http://eslint.org/docs/user-guide/configuring

Dalam package.json, ini berfungsi:

"eslintConfig": {
  "globals": {
    "window": true
  }
}
chevin99
sumber
63
cara yang tepat untuk melakukannya adalah dengan menggunakan "env": {"browser": true}
Nicolas
@ Nicolas, ya, saya mungkin akan menggunakan metode yang Anda sarankan jika itu yang saya temukan pertama kali, tetapi jawaban ini setidaknya berguna dalam menunjukkan Anda dapat memiliki konfigurasi eslint Anda di package.json.
chevin99
4
Mungkin juga untuk inline global untuk eslint seperti ini: / * global angular: true * /
Mirko
pertanyaannya secara spesifik menanyakan bagaimana menggunakan file package.json
virtualLast
59

Tambahkan .eslintrcdi root proyek.

{
  "globals": {
    "document": true,
    "foo": true,
    "window": true
  }
}
Kirk Strobeck
sumber
Entah bagaimana menempatkan eslingConfig di package.json tidak bekerja untuk saya (selain karena secara konsep salah). Menambahkannya di .eslintrc.json berfungsi.
Petrunov
1
@Petrunov .eslintrc.jsonbisa saja.eslintrc
Kirk Strobeck
ini tidak berfungsi dalam satu kasus yang saya alami - saya menggunakan eslint dengan tegukan untuk proyek ekstensi chrome. di global saya atur "chrome": true dan masih ada kesalahan karena dianggap global.
Stephen Tetreault
42

.Eslintrc.json Anda harus berisi teks di bawah ini.
Dengan cara ini ESLint tahu tentang variabel global Anda.

{
  "env": {
    "browser": true,
    "node": true
  }                                                                      
}
Sergey Andreev
sumber
14

Saya sadar dia tidak meminta versi inline . Tetapi karena pertanyaan ini memiliki hampir 100 ribu kunjungan dan saya jatuh di sini mencari itu, saya akan meninggalkannya di sini untuk sesama pembuat kode:

Pastikan ESLint tidak dijalankan dengan --no-inline-configbendera (jika ini terdengar asing, Anda mungkin baik untuk pergi). Kemudian, tulis ini di file kode Anda (untuk kejelasan dan konvensi, ini tertulis di atas file tetapi akan bekerja di mana saja):

/* eslint-env browser */

Ini memberi tahu ESLint bahwa lingkungan kerja Anda adalah browser, jadi sekarang ia tahu hal-hal apa saja yang tersedia di browser dan menyesuaikannya.

Ada banyak lingkungan , dan Anda dapat mendeklarasikan lebih dari satu pada saat yang bersamaan, misalnya, sebaris:

/* eslint-env browser, node */

Jika Anda hampir selalu menggunakan lingkungan tertentu, yang terbaik adalah mengaturnya di file konfigurasi ESLint Anda dan lupakan.

Dari dokumen mereka :

Lingkungan mendefinisikan variabel global yang telah ditentukan sebelumnya. Lingkungan yang tersedia adalah:

  • browser - variabel global peramban.
  • node - Node.js variabel global dan pelingkupan Node.js.
  • commonjs - Variabel global CommonJS dan pelingkupan CommonJS (gunakan ini untuk kode khusus peramban yang menggunakan Browserify / WebPack).
  • shared-node-browser - Global yang umum untuk Node dan Browser.

[...]

Selain lingkungan, Anda dapat membuatnya mengabaikan apa pun yang Anda inginkan. Jika itu memperingatkan Anda tentang penggunaan console.log()tetapi Anda tidak ingin diperingatkan tentang hal itu, cukup sebaris:

/* eslint-disable no-console */

Anda dapat melihat daftar semua aturan , termasuk aturan yang disarankan untuk praktik koding terbaik .

Carles Alcolea
sumber
2

Jika Anda menggunakan Angular, Anda bisa mendapatkannya dengan:

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