Jshint: ๋น„๋™๊ธฐ ํ•จ์ˆ˜ ์ง€์›

์— ๋งŒ๋“  2015๋…„ 07์›” 30์ผ  ยท  23์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: jshint/jshint

์ œ์•ˆ: https://github.com/tc39/ecmascript-asyncawait

2015๋…„ 7์›” 30์ผ 2๋‹จ๊ณ„๋กœ ์ง„ํ–‰ https://github.com/tc39/ecma262

gh-2601์— ๋”ฐ๋ผ ๋‹ค๋ฆ„

ES7 P2 Proposal

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด์ œ ๋…ธ๋“œ 8์ด ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Async/Await๊ฐ€ ๊ณต์‹์ ์œผ๋กœ ์ง€์›๋ฉ๋‹ˆ๋‹ค.
jsHint์—์„œ ๊ณง ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ ํ•ด์š”,

๋ชจ๋“  23 ๋Œ“๊ธ€

2077์ด ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” #2601์— ๋Œ“๊ธ€์„ ๋‹ฌ์•˜์ง€๋งŒ, ์ด๊ฒƒ์€ ํŠนํžˆ async/await์— ๋Œ€ํ•ด ๋Œ“๊ธ€์„ ๋‹ฌ๊ธฐ์— ์ ์ ˆํ•œ ์žฅ์†Œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

async/await๋Š” ์ด์ œ ์™„๋ฃŒ ๋˜๊ณ  ES2017 ์‚ฌ์–‘์—

#2077 ๋จผ์ง€๋ฅผ ํ„ธ์–ด๋‚ผ ์‹œ๊ฐ„์ด ๋˜์—ˆ๋‚˜์š”?

์ด์ œ ๋…ธ๋“œ 8์ด ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Async/Await๊ฐ€ ๊ณต์‹์ ์œผ๋กœ ์ง€์›๋ฉ๋‹ˆ๋‹ค.
jsHint์—์„œ ๊ณง ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ ํ•ด์š”,

๋‚˜๋Š” ์ด๊ฒƒ์„ ์—ฌ๊ธฐ์— ๋‚จ๊ธธ ๊ฒƒ์ด๋‹ค: http://eslint.org/

์—ฌ๊ธฐ์— ๋‚จ๊ฒจ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค: https://github.com/eslint/eslint#what -about-experimental-features ๐Ÿ˜œ

๋‹น์‹ ์€ ๋ฐฉ๊ธˆ jshint์— ๋Œ€ํ•œ ๊ด€์‹ฌ์„ ์žƒ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค, ์ฒœ์ฒœํžˆ.

Node.js๋Š” async/await๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €๋Š” async/await๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. JSHint๋Š” ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์ฃผ์ œ๋Š” 2์„ธ์ž…๋‹ˆ๋‹ค.

JSHint ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ง€์†๋˜๋Š” ๋™์•ˆ ์ข‹์•˜์Šต๋‹ˆ๋‹ค.

ESLint๋กœ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” ํŒ€,

๋น„๋™๊ธฐ ์‚ฌ์–‘์ด 4๋‹จ๊ณ„์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ธ์ œ ์ง€์›์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

RIP Jshint

๋„์›€์ด ๋˜๋Š” ๋Œ“๊ธ€์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ถ€์ •์ ์ธ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํŒจ์น˜๋ฅผ ์ œ์ถœํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋Š” jshint์˜ ํŒฌ์ด์—ˆ์ง€๋งŒ ์ง€๊ธˆ์€ eslint๋กœ ์˜ฎ๊ธฐ๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ECMA์˜ ์ƒˆ๋กœ์šด ๋ฆด๋ฆฌ์Šค ์ฃผ๊ธฐ์™€ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ ์ƒ์„ฑ์˜ ๋ชฉํ‘œ๋Š” ์‚ฌ๋žŒ๋“ค์ด JavaScript์˜ ์ตœ์‹  ๊ธฐ๋Šฅ์„ ์กฐ๊ธฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Async/await๋Š” ํ˜„์žฌ ํ•œ ๋‹ฌ์ด ๋„˜๋Š” ๊ธฐ๊ฐ„ ๋™์•ˆ 4๋‹จ๊ณ„์— ์žˆ์—ˆ์ง€๋งŒ(๋…ธ๋“œ ๋ฐ ๋งŽ์€ ์ฃผ๋ฅ˜ ๋ธŒ๋ผ์šฐ์ €์— ๋” ์˜ค๋ž˜ ์ ์šฉ๋จ) jshint๋Š” ์•„์ง ์ง€์›์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋งค์ผ jshint๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ jslint๋ณด๋‹ค ์œ ์—ฐํ•œ ๊ฒƒ์„ ๋งŒ๋“ค์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ตœ์‹  ES ๊ธฐ๋Šฅ๊ณผ ์‹คํ—˜ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ๋ณด๋‹ค ๊ฐ•๋ ฅํ•˜๊ณ  ์ตœ์‹  ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋‘ ์ œ์ผ ์ข‹๋‹ค.

jshint๋กœ ๊ฒ€์ฆ๋œ ์ˆ˜์‹ญ๋งŒ ๊ฐœ์˜ ์ฝ”๋“œ ๋ผ์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ฝ”๋“œ๋Š” Promises๋ฅผ ์ฒ ์ €ํžˆ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 6๊ฐœ์›” ์ „์— ์šฐ๋ฆฌ๋Š” ์„œ๋ฒ„ ์ธก ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด async/await๋ฅผ ๋„์ž…ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค(promise๋Š” ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์†Œํ•˜์ง€ ์•Š์„ ๋•Œ ์ฝœ๋ฐฑ๊ณผ ์œ ์‚ฌํ•œ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. await๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์šฐ๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ฝ๊ธฐ ์‰ฝ๊ณ  ์œ ์ง€ํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค).
๋ฌธ์ œ๋Š” OMG, jshint์˜€์Šต๋‹ˆ๋‹ค. eslint๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒƒ์€ ์‰ฌ์šด ์ผ์ด ์•„๋‹ˆ๋ฉฐ JSHINT๋กœ ์•ฝ๊ฐ„์˜ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ง€๋‚œ 3๋…„ ๋™์•ˆ ์ข‹์€ ์ž‘์—…๊ณผ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋งˆ์ด๋„ˆ ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•œ ์ง€์›์„ ์œ„ํ•ด ์—ด์‹ฌํžˆ ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜ผ๋™์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์ œ ์ œ๋ชฉ์—์„œ "์‹คํ—˜์ "์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์ œ๊ฑฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•ด +1!

์šฐ๋ฆฌ๋Š” @jsfiddle์˜ ํ›Œ๋ฅญํ•œ ๋„๊ตฌ์— ๋Œ€ํ•œ ๊ฐ์‚ฌ๋ฅผ JSHint์˜ ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š”!

async ๋ฐ await ๋Œ€ํ•ด ๋ถˆํ‰ํ•˜๋Š” ๋ฆฐํ„ฐ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ถˆ๋งŒ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@jugglinmike ๋‹˜ ์˜ ๋Œ“๊ธ€์ด 3๊ฐœ์›” ์ „์— ์ž‘์„ฑ ๊ฐ™ ๋‚˜์š”?

async/await ์ง€์›์˜ ํ˜„์žฌ ์ƒํƒœ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ข‹์€ ์งˆ๋ฌธ, @colxi ๋ฐ @oskarkrawczyk. ๋‚˜๋Š” ์ง€๋‚œ ๋ช‡ ๋‹ฌ ๋™์•ˆ ๋น„๋™๊ธฐ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ง€์› ์ž‘์—…์„ ํ•ด์™”์ง€๋งŒ ์ €์žฅ์†Œ์˜ ์ƒํƒœ์—์„œ ์ „ํ˜€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ๋ฅผ ํŒ”๋กœ์šฐํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์šฐ๋ฆฌ๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง„ํ–‰ ์ค‘์ธ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค. gh-3272

async/await ๊ธฐ๋Šฅ์— ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค. ์ด ๋ฉ‹์ง„ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ํ•„์ˆ˜ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ต๋ช… ํ•จ์ˆ˜์— ์‚ฌ์šฉํ•  ๋•Œ ์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Expected '(' and instead saw '{'.

+3๋…„์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!!

์ถฉ๋ถ„ํžˆ ๊ธฐ๋‹ค๋ ธ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•ˆ๋…• JSHint. ์ข‹์€ ์‹œ๊ฐ„์ด์—ˆ์Šต๋‹ˆ๋‹ค.

async/await ๋Š” ์ด์ œ 2.10.1 ๋ฒ„์ „์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค. .jshintrc ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก "esversion": 9 .jshintrc ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ

CHANGELOG.md๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

@nodesocket esversion: 8 ํ”Œ๋ž˜๊ทธ๋Š” async ๋ฐ await ๋Œ€ํ•ด ๋ถ„๋ช…ํžˆ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ ๋ณ€๊ฒฝ ๋กœ๊ทธ์— ๋”ฐ๋ฅด๋ฉด esversion: 9 ํ”Œ๋ž˜๊ทธ๊ฐ€ _์žˆ์Šต๋‹ˆ๋‹ค).

์–ด๋–ค ๊ฒฝ์šฐ์—๋„; ๋งˆ์นจ๋‚ด ์ด๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@nodesocket ์ด ์˜ณ์•˜์Šต๋‹ˆ๋‹ค-๋น„๋™๊ธฐ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ง€์›์€ JSHint์—์„œ o 2.10.0์œผ๋กœ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ๋œ ๋Œ€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰