ทำไม JSHint จึงส่งสัญญาณเตือนถ้าฉันใช้ const?


316

นี่เป็นข้อผิดพลาดที่ฉันได้รับเมื่อใช้ const:

<error line="2" column="1" severity="warning" message="&apos;const&apos; is available in ES6 (use esnext option) or Mozilla JS extensions (use moz)." source="jshint.W104" />

รหัสของฉันมีลักษณะเช่นนี้:

const Suites = {
    Spade: 1,
    Heart: 2,
    Diamond: 3,
    Club: 4
};

รหัสทำงานได้ดีเพียง JSHint เตือนฉันทุกครั้ง


ฉันไม่เห็นคำถามใด ๆ ในข้อความ "use esnext option"แต่อาจจะได้คำตอบแล้วมัน และทำไม? ข้อความแสดงข้อผิดพลาดนั้นไม่ชัดเจนหรือไม่ constยังไม่ได้เป็น JS มาตรฐาน (ยัง)
Teemu

5
หรือใช้ eslint แทน jshint
Rakka Rage

คำตอบ:


557

เมื่อใช้คุณสมบัติ ECMAScript 6 เช่นconstคุณควรตั้งค่าตัวเลือกนี้เพื่อ JSHint จะไม่เพิ่มคำเตือนที่ไม่จำเป็น

/ * jshint esnext: true * / ( แก้ไข 2015.12.29 : อัปเดตไวยากรณ์เพื่อสะท้อนความคิดเห็นของ @ Olga )

/*jshint esversion: 6 */

const Suites = {
    Spade: 1,
    Heart: 2,
    Diamond: 3,
    Club: 4
};

ตัวเลือกนี้ตามชื่อแนะนำบอกกับ JSHint ว่าโค้ดของคุณใช้ไวยากรณ์เฉพาะ ECMAScript 6 http://jshint.com/docs/options/#esversion

แก้ไข 2017.06.11 : เพิ่มตัวเลือกอื่นตามคำตอบนี้

ในขณะที่การกำหนดค่าแบบอินไลน์ทำงานได้ดีสำหรับไฟล์แต่ละไฟล์คุณยังสามารถเปิดใช้งานการตั้งค่านี้สำหรับทั้งโครงการโดยการสร้าง.jshintrcไฟล์ในรูทโครงการของคุณและเพิ่มเข้าไปที่นั่น

{
  "esversion": 6
}

1
มันใช้งานได้ ... แน่นอนว่ามันจะเป็นบรรทัดคำสั่งบางส่วน! ... hint hint jshint folk
Scott Stensland

9
ตอนนี้เอกสารอธิบายว่าWarning This option has been deprecated and will be removed in the next major release of JSHint. Use esversion: 6 instead.แม้ว่าปลั๊กอินในตัวของ Webstorm ของฉันไม่รู้จักตัวเลือกใหม่ ฉันสิ้นสุดการระบุทั้งสอง
Olga

5
สำหรับผม .jshintrc ไม่ .jshint ไม่แน่ใจว่ามีความแตกต่างในรุ่น jshint
teknopaul

อุ่ย ใช่คุณ การแก้ไข
James Hibbard

1
จากนั้นรีสตาร์ท Atom ของคุณหากเป็นเช่นนั้น
Vitor Braga

280

คุณสามารถเพิ่มไฟล์ชื่อ.jshintrcใน app ของรากที่มีเนื้อหาดังต่อไปนี้จะใช้การตั้งค่านี้สำหรับวิธีการแก้ปัญหาทั้งหมด :

{
    "esversion": 6
}

คำตอบของเจมส์แนะนำว่าคุณสามารถเพิ่มความคิดเห็น/*jshint esversion: 6 */สำหรับแต่ละไฟล์ได้ แต่จะทำงานได้มากกว่าที่จำเป็นถ้าคุณต้องการควบคุมไฟล์จำนวนมาก


1
มีการกำหนดค่าสำหรับการใช้สิ่งนี้หรือไม่? jshint .jshintrcของฉันเพียงแค่ไม่สนใจสิ่งที่อยู่ภายใน
อีธานหยาง

1
@EthanYang เลขที่ไม่มีการกำหนดค่าเพิ่มเติม เพียงตรวจสอบให้แน่ใจว่า JSHint สามารถพบไฟล์ได้ จากเอกสาร:JSHint will start looking for this file in the same directory as the file that's being linted. If not found, it will move one level up the directory tree all the way up to the filesystem root. (Note that if the input comes from stdin, JSHint doesn't attempt to find a configuration file)
Zanon

59

ฉันได้รับคำเตือนเดียวกันนี้เมื่อใช้คำสั่งส่งออก ฉันใช้ VS Code และใช้วิธีการคล้ายกับโซลูชันของ Wenlong Jiang

  1. การตั้งค่าผู้ใช้
  2. การกำหนดค่า JSHint
  3. "jshint.options": {} (แก้ไข)
  4. ใช้เครื่องหมายคำพูดคู่เมื่อระบุ"esversion"

    หรือคัดลอกตัวอย่างนี้ลงในการตั้งค่าผู้ใช้:

    "jshint.options": {
      "esversion": 6,
    }

การสร้าง.jshintrcไฟล์ไม่จำเป็นถ้าคุณต้องการกำหนดการตั้งค่าโกลบอล jshint สำหรับโปรแกรมแก้ไขของคุณ


8
ขอบคุณ. คำตอบที่ดีที่สุดแน่นอนสำหรับผู้ใช้รหัสภาพสตูดิโอ สำหรับการอ้างอิงการตั้งค่าผู้ใช้ผ่านทาง (Mac :) "รหัส"> การตั้งค่า> การตั้งค่า
CopyJosh

1
ขอบคุณสำหรับการแก้ไขเพิ่มเติมนี้ มันมีประโยชน์มาก
dprogramz

41

หากคุณใช้ VSCode:

1

  • ไปที่การตั้งค่า -> การตั้งค่า ( cmd + ,)
  • พิมพ์jshint.optionsลงในแถบค้นหา
  • โฮเวอร์เหนือมันและคลิกที่ไอคอนดินสอ
  • ตอนนี้มันผนวกอยู่ทางด้านขวา
  • เพิ่ม"esversion": 6ไปยังวัตถุตัวเลือก

2

หรือเพิ่มสิ่งนี้ลงในการตั้งค่าผู้ใช้ของคุณ:

"jshint.options": {
    "esversion": 6
}

[อัพเดท] การตั้งค่า vscode ใหม่

  • ไปที่การตั้งค่า -> การตั้งค่า ( cmd + ,)
  • พิมพ์jshintลงในการค้นหา

การตั้งค่า VSCode

  • ดำเนินการต่อด้วยขั้นตอน 2.

32

ฉันใช้เวลานานหลายปีในการแก้ไขปัญหานี้ โซลูชันทุกตัวพูดถึง 'ตัวเลือกการตั้งค่า' ฉันไม่รู้ว่ามันหมายถึงอะไร ในที่สุดฉันก็คิดออก /*jshint esversion: 6 */คุณก็สามารถรวมสายออกความเห็นที่ด้านบนของไฟล์

สารละลาย


24
ปัญหาเดียวของการทำเช่นนี้ตามที่ฉันค้นพบคือคุณต้องเพิ่มความคิดเห็นไว้ด้านบนของทุกไฟล์ที่คุณใช้ ทางออกที่ดีกว่าคือการสร้างไฟล์ใหม่ในโฟลเดอร์รูทของแอพที่คุณตั้งชื่อ.jshintrcแล้วเพิ่มรหัสต่อไปนี้ลงในไฟล์{ "esnext": true }
Josh Pittman

17
{ "esnext": true }คือตอนนี้เลิกใช้ ตอนนี้คุณควรใช้{ "esversion": 6 }แทน
cybersam

3
ฉันต้องใช้ JSHint รุ่นล้าสมัยเพราะใช้เพียงเท่านั้นที่"esnext": trueฉันสามารถแก้ไขปัญหานี้ได้ "esversion": 6ไม่มีผล
Joncom

4
จากนั้นอัปเกรด JShint ของคุณ😉
Cyril Duchon-Doris

18

คุณสามารถระบุesversion: 6ภายในวัตถุตัวเลือก jshint โปรดดูภาพ ฉันใช้ปลั๊กอิน grunt-contrib-jshint

ป้อนคำอธิบายรูปภาพที่นี่


2
วิธีนี้ใช้ได้กับผู้ที่ใช้ Grunt เพิ่มลงใน gruntfile.js
JoeTidee

1
ขอบคุณทำงานเหมือนมีเสน่ห์สำหรับฉันไม่จำเป็นต้องละเว้นไฟล์และการใช้งาน esversioning ในหน้าพิเศษเฉพาะบุคคล
sg28

3

เมื่อคุณเริ่มใช้ ECMAScript 6 ข้อผิดพลาดนี้เกิดจาก IDE ของคุณ

มีสองตัวเลือก:

หากคุณมีไฟล์เดียวและต้องการใช้ es6 ให้เพิ่มบรรทัดด้านล่างที่ด้านบนของไฟล์

/*jshint esversion: 6 */

หรือถ้าคุณมีจำนวนไฟล์ js หรือคุณกำลังใช้เฟรมเวิร์กใด ๆ (เช่น nodejs express) คุณสามารถสร้างไฟล์ใหม่ที่มีชื่อ.jshintrcในไดเรกทอรีรากของคุณและเพิ่มรหัสด้านล่างในไฟล์:

{
    "esversion": 6
}

หากคุณต้องการใช้รุ่น es6 เป็นต้นไปสำหรับแต่ละโครงการคุณสามารถกำหนดค่า IDE ของคุณ


2

ใน package.json ของคุณคุณสามารถบอก Jshint ให้ใช้ es6 เช่นนี้

"jshintConfig":{
    "esversion": 6 
}

ตอบรับในเดือนเมษายน 2020 สำหรับรหัส Visual Studio
ArifMustafa

1

หากคุณกำลังใช้ Webstorm และหากคุณไม่มีไฟล์กำหนดค่าของคุณเองให้เปิดใช้งานEcmaScript.nextในตัวเลือกการผ่อนคลาย

การตั้งค่า | ภาษาและกรอบงาน JavaScript | เครื่องมือคุณภาพรหัส JSHint

ดูคำถามนี้ทำอย่างไรฉันแก้ไขข้อผิดพลาด JSHint-ES6- เหล่านี้


1

หากคุณกำลังใช้การกำหนดค่า Grunt คุณต้องทำตามขั้นตอนต่อไปนี้

ข้อความเตือนใน Jshint:

ป้อนคำอธิบายรูปภาพที่นี่

สารละลาย:

  1. ตั้งค่าตัวเลือก jshint และแม็พไฟล์. jshintrc.js

ป้อนคำอธิบายรูปภาพที่นี่

  1. สร้างไฟล์. jshintrc.js ในไฟล์นั้นเพิ่มรหัสต่อไปนี้
{  
  "esversion": 6  
} 

หลังจากกำหนดค่านี้แล้วให้เรียกใช้อีกครั้งมันจะข้ามคำเตือน

ป้อนคำอธิบายรูปภาพที่นี่


0

สร้างไฟล์ชื่อ jshint_opts ด้วยเนื้อหานี้: {"esversion": 6}

จากนั้นเรียก jshint ด้วยบางสิ่งเช่นบรรทัดคำสั่งนี้:

jshint --config jshint_opts lib / *. js


0

สำหรับ SublimeText 3 บน Mac:

  1. สร้างไฟล์. jshintrc ในไดเรกทอรีรากของคุณ (หรือที่ใดก็ได้ที่คุณต้องการ) และระบุ esversion:
    # .jshintrc
    {
      "esversion": 6
    }
  1. อ้างอิง pwd ของไฟล์ที่คุณเพิ่งสร้างในการตั้งค่าผู้ใช้ SublimeLinter (ข้อความ Sublime> การตั้งค่า> การตั้งค่าแพคเกจ> SublimeLinter> การตั้งค่า)
    // SublimeLinter Settings - User
    {
      "linters": {
        "jshint": {
          "args": ["--config", "/Users/[your_username]/.jshintrc"]
        }
      }
    }
  1. ออกและเปิดใช้งาน SublimeText อีกครั้ง

0

พฤษภาคม 2020 นี่เป็นทางออกที่ง่ายฉันพบและมันจะแก้ปัญหาสำหรับทุกโครงการของฉันบน Windows หากโครงการของคุณเป็นหนึ่งภายใน C: ไดเรกทอรีสร้าง .jshintrc ไฟล์ใหม่และบันทึกไว้ในไดเรกทอรี C เปิดแฟ้ม .jshintrc นี้และเขียน{ "esversion": 6}และว่า มัน. คำเตือนควรหายไปเหมือนกันจะทำงานในไดเรกทอรี d

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่ ใช่คุณยังสามารถเปิดใช้งานการตั้งค่านี้สำหรับโครงการเฉพาะโดยการสร้างไฟล์. jshintrc เดียวกันในรูทของโครงการและเพิ่ม { "esversion": 6}


0

สร้าง.jshintrcไฟล์ในroot dir และเพิ่มชุดที่นั่นเป็นเวอร์ชั่น js ล่าสุด: "esversion": 9และเวอร์ชั่น asi: "asi": true(มันจะช่วยให้คุณหลีกเลี่ยงการใช้เครื่องหมายอัฒภาค)

{
    "esversion": 9,
    "asi": true
}

0

ในการแก้ไขปัญหานี้ใน Dreamweaver CC 2018 ฉันไปที่การกำหนดค่าตามความชอบแก้ไขชุดกฎ - เลือก JS แก้ไข / ใช้การเปลี่ยนแปลงค้นหา "esnext" และเปลี่ยนการตั้งค่าเท็จเป็นจริง มันทำงานให้ฉันหลังจากชั่วโมงการวิจัย หวังว่าจะช่วยผู้อื่น


-1

หากใช้ Sublime Text 3:

  • ไปที่ ตั้งค่า -> การตั้งค่า
  • ภายใต้Preferences.sublime-settings— ผู้ใช้เพิ่ม"esversion": 6

-2

ใน Dreamweaver เวอร์ชั่นใหม่เพื่อแก้ไขข้อผิดพลาดนี้

  • ไปที่ Edit-> Preference-> Linting
  • และไปแก้ไข js ชุดกฎและที่ผ่านมา

    "jshintConfig": {"esversion": 6}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.