ESLint -“ window” ไม่ได้ถูกกำหนดไว้ วิธีการอนุญาตตัวแปรโกลบอลใน package.json


187

ฉันกำลังกำหนดคุณสมบัติให้กับวัตถุหน้าต่างโกลบอล แต่เมื่อฉันเรียกใช้ eslint ฉันจะได้รับ:

ไม่ได้กำหนด "window"

ฉันเห็นสิ่งนี้ในเอกสาร eslint :

ต่อไปนี้กำหนดหน้าต่างเป็นตัวแปรส่วนกลางสำหรับรหัสที่ไม่ควรเรียกใช้กฎการทดสอบ:

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

ฉันได้ลองเพิ่มสิ่งนี้ในไฟล์ package.json เพื่อให้ eslint อนุญาตให้ "window" เป็นตัวแปรทั่วโลก แต่ฉันต้องทำอะไรผิดพลาด จากเอกสารดูเหมือนว่าฉันอาจต้องทำสิ่งนี้ในไฟล์แยกต่างหาก แต่มีวิธีกำหนดตัวแปรโกลบอลที่อนุญาตบางไฟล์ในไฟล์ package.json หรือไม่


FYI หากคุณใช้โหนดและต้องการให้ ESLint จดจำglobalคุณต้องตรวจสอบให้แน่ใจว่า"node": trueได้ตั้งค่าไว้ภายใต้"env"การกำหนดค่าของคุณ
Joshua Pinter

คำตอบ:


309

มี builtin เป็นที่รวมenvironment: browserwindow

ตัวอย่าง.eslintrc.json:

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

ข้อมูลเพิ่มเติม: http://eslint.org/docs/user-guide/configuring.html#specifying-environment

ยังเห็นคำตอบโดย chevin99ด้านล่างpackage.json


คำตอบที่ดีที่สุดอย่างแน่นอนขอบคุณ ฉันไม่ได้คิดเช่นนั้น :)
Yoshi อัศวิน

4
ในกรณีที่คนอื่นได้รับการติดออกมาเหมือนฉัน: นี่ควรจะอยู่ใน.eslintrcไม่package.json
ขวดดิน

มีวิธีการทำเช่นนี้เพียงนำไปใช้กับไฟล์เดียว?
AnnanFay

ฉันพบคำตอบต่อไปนี้โดย Carles Alcolea ด้านล่าง : เพิ่มที่ด้านบนสุดของไฟล์นี้:/* eslint-env browser */
Laoujin

102

ฉันพบมันในหน้านี้: http://eslint.org/docs/user-guide/configuring

ใน package.json งานนี้:

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

63
วิธีที่ถูกต้องในการทำคือใช้ "env": {"เบราว์เซอร์": จริง}
Nicolas

@ Nicolas ใช่ฉันอาจจะใช้วิธีที่คุณแนะนำถ้านั่นคือสิ่งที่ฉันได้พบก่อน แต่คำตอบนี้มีประโยชน์อย่างน้อยในการแสดงว่าคุณสามารถกำหนดค่า eslint ใน package.json
chevin99

4
นอกจากนี้ยังเป็นไปได้ที่จะรวมอินไลน์ globals สำหรับ eslint เช่นนี้: / * global angular: true * /
Mirko

คำถามนี้ถามวิธีใช้ไฟล์ package.json โดยเฉพาะ
virtualLast

59

เพิ่ม.eslintrcในรูทโปรเจ็กต์

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

ยังไงก็เถอะวาง eslingConfig ใน package.json ไม่ได้ทำงานสำหรับฉัน (นอกเหนือจากการผิดแนวคิด) การเพิ่มใน. eslintrc.json สามารถใช้งานได้
Petrunov

1
@ Petrunov .eslintrc.jsonสามารถเป็นได้.eslintrc
Kirk Strobeck

กรณีนี้ใช้ไม่ได้ในกรณีที่ฉันประสบ - ฉันใช้ eslint กับ gulp สำหรับโครงการส่วนขยายของ chrome ใน globals ฉันตั้ง "chrome": จริงและมันยังคงโยนข้อผิดพลาดเกี่ยวกับมันเป็นโลกที่ไม่รู้จัก
Stephen Tetreault

42

. eslintrc.jsonของคุณควรมีข้อความด้านล่าง
วิธีนี้ ESLint จะรู้เกี่ยวกับตัวแปรโกลบอลของคุณ

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

14

ฉันรู้ว่าเขาไม่ได้ขอรุ่นอินไลน์ แต่เนื่องจากคำถามนี้มีการเข้าชมเกือบ 100 พันครั้งและฉันมาที่นี่เพื่อหาสิ่งนั้นฉันจะทิ้งไว้ที่นี่เพื่อเพื่อนรหัสถัดไป:

ตรวจสอบให้แน่ใจว่า ESLint ไม่ทำงานด้วยการ--no-inline-configตั้งค่าสถานะ (หากไม่คุ้นเคยคุณน่าจะไปได้) จากนั้นเขียนสิ่งนี้ลงในไฟล์รหัสของคุณ (เพื่อความชัดเจนและแบบแผนมันเขียนอยู่ด้านบนของไฟล์ แต่มันจะใช้ได้ทุกที่):

/* eslint-env browser */

สิ่งนี้จะบอก ESLint ว่าสภาพแวดล้อมการทำงานของคุณเป็นเบราว์เซอร์ดังนั้นในตอนนี้จึงรู้ว่ามีอะไรบ้างในเบราว์เซอร์และปรับให้เหมาะสม

มีสภาพแวดล้อมมากมายและคุณสามารถประกาศมากกว่าหนึ่งรายการในเวลาเดียวกันเช่นในบรรทัด:

/* eslint-env browser, node */

หากคุณมักจะใช้สภาพแวดล้อมบางอย่างเป็นการดีที่สุดที่จะตั้งไว้ในไฟล์ปรับแต่งของ ESLintและลืมมันไป

จากเอกสารของพวกเขา :

สภาพแวดล้อมกำหนดตัวแปรทั่วโลกที่กำหนดไว้ล่วงหน้า สภาพแวดล้อมที่ใช้ได้คือ:

  • browser - ตัวแปรทั่วโลกของเบราว์เซอร์
  • node - Node.js ตัวแปรส่วนกลางและการกำหนดขอบเขต Node.js
  • commonjs - ตัวแปรส่วนกลาง CommonJS และการกำหนดขอบเขต CommonJS (ใช้สำหรับโค้ดเฉพาะเบราว์เซอร์ที่ใช้ Browserify / WebPack)
  • shared-node-browser - Globals ใช้ร่วมกันได้ทั้ง Node และ Browser

[ ... ]

นอกจากสภาพแวดล้อมคุณสามารถทำให้มันไม่สนใจสิ่งที่คุณต้องการ หากมันเตือนคุณเกี่ยวกับการใช้งานconsole.log()แต่คุณไม่ต้องการที่จะได้รับการเตือนเกี่ยวกับมันเพียงแค่อินไลน์:

/* eslint-disable no-console */

คุณสามารถดูรายชื่อของทุกกฎรวมถึงกฎระเบียบที่แนะนำให้มีการปฏิบัติที่ดีที่สุดของการเข้ารหัส


2

หากคุณใช้แองกูลาร์คุณสามารถลงด้วย

"env": {
    "browser": true,
    "node": true
},
"rules" : {
    "angular/window-service": 0
 }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.