Tslint: ๋กœ๋“œ๋งต: TSLint -> ESLint

์— ๋งŒ๋“  2019๋…„ 02์›” 23์ผ  ยท  52์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: palantir/tslint

์ด ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ ์—์„œ ์ฝ์—ˆ์„ ์ˆ˜๋„ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์šฐ๋ฆฌ๋Š” 2019๋…„์— TSLint๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ TypeScript ๋ฐ JavaScript ๋ชจ๋‘์— ๋Œ€ํ•œ ํ‘œ์ค€ ๋ฆฐํ„ฐ๋กœ ESLint๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง€์›ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ฆ‰๊ฐ์ ์ธ ์ง€์› ์ค‘๋‹จ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ํšŒ๊ท€ ์—†์ด ์ƒˆ ๋„๊ตฌ๋กœ ์›ํ™œํ•˜๊ฒŒ ์ „ํ™˜ํ•˜๋ ค๋ฉด ํ•ด์•ผ ํ•  ์ผ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์—์„œ ์œ ์ง€ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ธฐ๋Šฅ, ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ ๋ฐ TSLint์˜ ํŽธ๋ฆฌํ•จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋„๊ตฌ ๊ฐ„์— ๊ฒน์น˜๋Š” ์‹œ๊ฐ„์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ TSLint ์–ผ๋ฆฌ ์–ด๋‹ตํ„ฐ๋Š” ์ „์ฒด ์ฝ”๋“œ ๊ฒ€์‚ฌ ๋ฒ”์œ„๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด _๋‘˜ ๋‹ค_ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ์ €ํ•˜๋˜์ง€ ์•Š๋Š” ํ•ฉ๋ฆฌ์ ์ธ ์ˆ˜์ค€๊นŒ์ง€).

ESLint / typescript-eslint ๋กœ๋“œ๋งต์—์„œ ์ฒ˜๋ฆฌ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ œ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋˜๋Š” ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์ผ๋ถ€ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ๋‹ซ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. __์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์š”์ฒญ__์ด ๋งˆ๊ฐ/๊ฑฐ๋ถ€๋  ๊ฐ€๋Šฅ์„ฑ์ด ๊ฐ€์žฅ ๋†’์€ ๊ทœ์น™ ๋ฒ”์ฃผ์˜ ํ•œ ์˜ˆ๋Š” ์„œ์‹ ๊ทœ์น™ ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ Palantir์—์„œ Prettier๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ฝ”๋“œ ์„œ์‹ ์ง€์ • ์ž‘์—…์— ๋” ๋‚˜์€ ๋„๊ตฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๊ทœ์น™์„ ๊ฝค ์˜ค๋žซ๋™์•ˆ ๋ถ„ํ• ํ•  ๊ฒƒ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.

TSLint๋Š” ์ตœ์‹  ์ปดํŒŒ์ผ๋Ÿฌ/์–ธ์–ด ๊ธฐ๋Šฅ์œผ๋กœ ์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ์ค‘์š”ํ•œ ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ ์—…๋ฐ์ดํŠธ์™€ ํ•จ๊ป˜ ๊ณ„์† ๋ฆด๋ฆฌ์Šค๋ฉ๋‹ˆ๋‹ค.


์—…๋ฐ์ดํŠธ(2019๋…„ 6์›”): @JoshuaKGoldberg ๋ฐ tslint-contrib-microsoft์™€ ํ˜‘๋ ฅํ•˜์—ฌ ๋ณด๋‹ค ๊ตฌ์ฒด์ ์ธ ๋กœ๋“œ๋งต ํƒ€์ž„๋ผ์ธ:

  • __2019๋…„ 8์›” 1์ผ__: ์ƒˆ๋กœ์šด _core_ ๊ทœ์น™ ์ˆ˜๋ฝ์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๋ฒ„๊ทธ ์ˆ˜์ •, ์‚ฌ์†Œํ•œ ๊ธฐ๋Šฅ ๋ฐ ๊ทœ์น™ ๊ฐœ์„  ์‚ฌํ•ญ์„ ์ˆ˜๋ฝํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • ๊ทœ์น™์€ ํ•ญ์ƒ ์˜ต์…˜์ด๋ฉฐ ์ด ์ €์žฅ์†Œ ์™ธ๋ถ€์—์„œ ์œ ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • __2019๋…„ 11์›” 1์ผ__: ๊ธฐ๋Šฅ ๋˜๋Š” ๊ทœ์น™ ๊ฐœ์„  ์‚ฌํ•ญ ์ˆ˜๋ฝ์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค(typescript-eslint๋กœ ๋” ์‰ฝ๊ฒŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ์ œ์™ธ). ์—ฌ์ „ํžˆ ๋ฒ„๊ทธ ์ˆ˜์ •์„ ์ˆ˜๋ฝํ•ฉ๋‹ˆ๋‹ค.
  • __2020๋…„ 1์›” 1์ผ__: ๋ณด์•ˆ ์ˆ˜์ • ์‚ฌํ•ญ ๋ฐ TypeScript ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์œ„๋ฐ˜์œผ๋กœ ์ธํ•œ ์ถฉ๋Œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์‚ฌํ•ญ ์ˆ˜๋ฝ์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • __2020๋…„ 12์›” 1์ผ__: PR ์ˆ˜๋ฝ์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค ๐ŸŽ‰

์—…๋ฐ์ดํŠธ(2019๋…„ 8์›”): TSLint ๊ตฌ์„ฑ ํŒŒ์ผ์„ ESLint ๊ตฌ์„ฑ ํŒŒ์ผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” CLI ๋ช…๋ น์€ tslint-to-eslint-config ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.


์—…๋ฐ์ดํŠธ(2020๋…„ 3์›”): #4914์—์„œ ๋…ผ์˜๋œ ํ›„ 1์›” 1์ผ ๋งˆ๊ฐ์ผ์— _"TypeScript ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์œ„๋ฐ˜ํ•˜์—ฌ ๋ฐœ์ƒํ•˜๋Š” ์ถฉ๋Œ์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ"์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

Documentation

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

tslint.json์„ eslint.json์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ณ  ๋™๋“ฑํ•œ ๊ทœ์น™๊ณผ ์˜ต์…˜์„ ๋งคํ•‘ํ•˜๋Š” CLI ๋ช…๋ น์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” tslint.json์—์„œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ทœ์น™์„ ์ œ๊ฑฐํ•˜๊ณ  ์•„์ง ๋™๋“ฑํ•˜์ง€ ์•Š์€(๋˜๋Š” ์‚ฌ์šฉ๋œ ์˜ต์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”) ๊ทœ์น™์„ ์œ ์ง€ํ•˜์—ฌ tslint.json์ด ๋น„์–ด ์žˆ์„ ๋•Œ๊นŒ์ง€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๊ทœ์น™์„ ๋ฉฑ๋“ฑ์ ์œผ๋กœ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋Š ์‹œ์ ์—์„œ ์šฐ๋ฆฌ๋Š” ESLint์— ์™„์ „ํžˆ ์˜์กดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

tslint.json์„ eslint.json์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ณ  ๋™๋“ฑํ•œ ๊ทœ์น™๊ณผ ์˜ต์…˜์„ ๋งคํ•‘ํ•˜๋Š” CLI ๋ช…๋ น์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” tslint.json์—์„œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ทœ์น™์„ ์ œ๊ฑฐํ•˜๊ณ  ์•„์ง ๋™๋“ฑํ•˜์ง€ ์•Š์€(๋˜๋Š” ์‚ฌ์šฉ๋œ ์˜ต์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”) ๊ทœ์น™์„ ์œ ์ง€ํ•˜์—ฌ tslint.json์ด ๋น„์–ด ์žˆ์„ ๋•Œ๊นŒ์ง€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๊ทœ์น™์„ ๋ฉฑ๋“ฑ์ ์œผ๋กœ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋Š ์‹œ์ ์—์„œ ์šฐ๋ฆฌ๋Š” ESLint์— ์™„์ „ํžˆ ์˜์กดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์†Œ์‹.
ESLint ๋…€์„๋“ค์€ ์ด๋ฏธ TS๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด typescript-eslint ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋“ค์€ ๋˜ํ•œ ๋„์›€์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์„ฑ๋ช…์ž…๋‹ˆ๋‹ค. .

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ›„ tslint ๊ทœ์น™์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

eslint๋ฅผ JS์—์„œ TS๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋งํ•˜๊ธฐ ์‹ซ์ง€๋งŒ eslint๊ฐ€ ts๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๋˜์ง€ ์•Š์œผ๋ฉด ๊ทœ์น™์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ฆ๊ฒ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด ๋‚˜์œ, ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  eslint๊ฐ€ ์•„๋‹ˆ๋ผ typescript-eslint๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”.

repo์˜ readme.md์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋„๋ก ์ด ๊ณ„ํš์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ํŠน์ • ์‚ฌ๋žŒ๋“ค๋งŒ ์ด ๊ณ„ํš์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™๊ณ  ์ผ๋ฐ˜์ ์ธ ์ง€์‹์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

@joeyj-msft ์‹ค์ œ๋กœ adidahiya๊ฐ€ a395501739bf7f0f166e5b0ccb355c0e9500445a์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

typescript-eslint ์—์„œ TSLint ๊ทœ์น™(https://palantir.github.io/tslint/rules/)์˜ ์ผ๋ถ€ "์š”์•ฝ"์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. palantir์˜ "ESLint" ํ”Œ๋ž˜๊ทธ์—ฌ์•ผ ํ•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด https://github.com/typescript-eslint/typescript-eslint์˜ ์ƒˆ ๋ชฉ๋ก์ด์–ด์•ผ ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์ด๋™ํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

@JoshuaKGoldberg ์ €๋Š” tslint์—์„œ typescript-eslint๋กœ ์ „ํ™˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. TSLint๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ๊ทœ์น™์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. TSLint์—์„œ ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ์ž ์ง€์ • ๊ทœ์น™์„ ๊ณ„์† ์ƒ์„ฑํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋‚ด ํ”„๋กœ์ ํŠธ๋Š” Javascript ๋ฐ Typescript ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ํ•ด๋‹น ํŒŒ์ผ์— ๋Œ€ํ•ด ๋‹จ์ผ ๊ทœ์น™๋งŒ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@moulikcipherX ์ข‹์€ ์งˆ๋ฌธ์„ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

typescript-eslint/packages/eslint-plugin-tslint ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ESLint ๋‚ด์—์„œ TSLint ๊ทœ์น™์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. TSLint ๊ตฌ์„ฑ์„ ๋ž˜ํ•‘ํ•˜๊ณ  TSLint๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋ฆฐํŠธํ•ฉ๋‹ˆ๋‹ค.

ESLint์—์„œ ๊ทœ์น™์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด typescript-eslint/packages/eslint-plugin ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ๊ทธ README.md์—๋Š” ์ง€์›๋˜๋Š” ๋ชจ๋“  ๊ทœ์น™์˜ ๋ชฉ๋ก์ด ์žˆ์Šต๋‹ˆ๋‹ค _(๋ชฉ๋ก์ด ์ƒ๋‹นํžˆ ์ปค์กŒ์Šต๋‹ˆ๋‹ค!)_. ROADMAP.md ์—๋Š” ๊ธฐ์กด TSLint ๊ทœ์น™์„ ์ƒˆ ๊ทœ์น™์— ๋งคํ•‘ํ•˜๋Š” ๋‚ด์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@JoshuaKGoldberg ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ TSLint์—์„œ์™€ ๋™์ผํ•œ TypeScript์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ๊ทœ์น™์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋™์ผํ•œ ๋ฐฉ๋ฒ•์„ ๋” ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ : ์ด ์Šค๋ ˆ๋“œ์˜ ์›๋ž˜ ๊ฒŒ์‹œ๋ฌผ์„ ๋ณด๋‹ค ๊ตฌ์ฒด์ ์ธ ๋กœ๋“œ๋งต ํƒ€์ž„๋ผ์ธ์œผ๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€์˜ ๋งจ ์œ„๋กœ ์Šคํฌ๋กคํ•˜์—ฌ ๋ณด์‹ญ์‹œ์˜ค.

์–ด, ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ๋„ https://github.com/palantir/tslint/tree/gh-pages/_posts ์— ์žˆ์–ด์•ผ ํ•˜๊ณ  https://github.com/palantir/tslint/blob/master/ ์—์„œ ๋งํฌ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. README.md ?

gh-pages ์›น์‚ฌ์ดํŠธ์˜ @SamB ๋ธ”๋กœ๊ทธ๋Š” ๊ฝค ์˜ค๋ž˜๋˜์–ด ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŠธ๋Š” README ์ƒ๋‹จ์— ๋งํฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

@adidahiya @JoshuaKGoldberg
typescript-eslint ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์–ด๋””์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋‚˜์š”?

์‚ฌ์šฉ์ž ์ •์˜ tslint ๊ทœ์น™์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ eslint ๊ทœ์น™ ์œผ๋กœ ์˜ ๋™๋“ฑํ•œ ๋ณ€ํ™˜์ด ํ–ฅํ›„ typescript-supported-eslint ์—์„œ ์ง€์›๋ฉ๋‹ˆ๊นŒ?

๋‚ด๊ฐ€ ๋งํ•˜๋ ค๋Š” ๊ฒƒ์€ custom-tslint-rule์˜ JS ํŒŒ์ผ์„ ํ•ด๋‹น eslint ํ˜ธํ™˜ linting ๊ทœ์น™์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํŠน์ • CLI ๋ช…๋ น์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. eslint์— ๋Œ€ํ•œ tslint์˜ ๊ทœ์น™์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์ •๋ง ํž˜๋“  ์ž‘์—…์ด ๋  ๊ฒƒ์ด๋ผ๋Š” ์ ์—์„œ ๋งŽ์€ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค...

@a20185 , ์˜ˆ, ์ง€๊ธˆ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค! https://github.com/typescript-eslint/tslint-to-eslint-config

ํ›Œ๋ฅญํ•œ ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์•ž์œผ๋กœ์˜ ๋ชจํ—˜์—์„œ ์ตœ์„ ์„ ๋‹คํ•˜์‹œ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋ชจํ—˜์ด๋ผ๊ณ  ํ•˜๋ฉด ์ด๊ฒƒ์€ ํ™•์‹คํžˆ ํ•˜๋‚˜์˜€์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์–ด์จŒ๋“ , ๋‹น์‹ ์—๊ฒŒ ์ตœ์„ ์„,
ํ•  ๊ฒƒ์ด๋‹ค

2019๋…„ ๋ง(์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ์ถ”์ •๋˜๋Š” ํ•ด)์ด ๋‹ค๊ฐ€์˜ด์— ๋”ฐ๋ผ ์ง€๊ธˆ์ด NPM์— ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ƒˆ ์„ค์น˜๊ฐ€ ESLint๋กœ ์ง€์ •๋˜๋„๋ก ํ•˜๊ธฐ์— ์ข‹์€ ์‹œ๊ธฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

readme๋ฅผ ์ข€ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ(์ตœ์ƒ์œ„ ์ˆ˜์ค€) ์•Œ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž๋ฅผ typescript-eslint๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ๋„ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฑฐ์˜ ๋ชจ๋“  ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ESLint์— ์˜ํ•ด ๋‹ค๋ฃจ์–ด์กŒ์œผ๋ฏ€๋กœ ์ง€๊ธˆ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๊ณ„ํš์ž…๋‹ˆ๊นŒ?

๋‚˜๋Š” ๋˜ํ•œ tslint๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ๋•Œ eslint๊ฐ€ ๋” ๋งŽ์€ ์••๋ ฅ์„ ๋ฐ›๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๊ทธ๊ฒƒ์— ๋” ์ง‘์ค‘ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ํฌ๋งํ•ฉ๋‹ˆ๋‹ค.

tslint-to-eslint-config ๋Š” tslint.json ๋ฅผ .eslinerc.js ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์ง€๋งŒ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์ธ๋ผ์ธ tslint:disable:<rule> ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์ผ๋ถ€ ๊ทœ์น™์ด ์ œ๋Œ€๋กœ ๊ตฌ์„ฑ๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์•„์ง eslint์—์„œ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

tslint์—์„œ eslint๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ ์—ฌ์ „ํžˆ ์ผ๋ถ€ ๊ฐ€์žฅ์ž๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. typescript ํŒŒ์ผ์— eslint๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ํƒ€์ดํ”„์Šคํฌ๋ฆฝํŠธ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฐ„์˜ ์ผ๊ด€์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋ ค๋ฉด?
ํ”„๋กœ์ ํŠธ์—์„œ javascript ํŒŒ์ผ ์—†์ด typescript๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•œ ํ›„์—๋„ ์—ฌ์ „ํžˆ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

tslint-to-eslint-config ๋Š” tslint.json ๋ฅผ .eslinerc.js ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์ง€๋งŒ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
์ธ๋ผ์ธ tslint:disable:<rule> ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ: https://github.com/typescript-eslint/tslint-to-eslint-config/issues/136
์›ํ•œ๋‹ค๋ฉด ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! https://github.com/typescript-eslint/tslint-to-eslint-config/pull/246 ์— ์ง„ํ–‰ ์ค‘์ธ PR์ด ์žˆ์œผ๋ฉฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

tslint์—์„œ eslint๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ ์—ฌ์ „ํžˆ ์ผ๋ถ€ ๊ฐ€์žฅ์ž๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. typescript ํŒŒ์ผ์— eslint๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ์Šค๋ ˆ๋“œ์˜ ์ƒ๋‹จ์— ์–ธ๊ธ‰๋œ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ ์— ๋‚˜์—ด๋œ ์ด์œ ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@beenotung

TSLint๋Š” ESLint์— ๋น„ํ•ด ํ•ญ์ƒ ์ œํ•œ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ESLint์—๋Š” ์—†์—ˆ๋˜ ๊ทœ์น™์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ํ›จ์”ฌ ๋” ํฐ ์ปค๋ฎค๋‹ˆํ‹ฐ/์ง€์›์€ ESLint๊ฐ€ ํ•ญ์ƒ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ์€ ๋งํ•  ๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์šฐ๋ฆฌ ์ค‘ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์–ด๋””์—์„œ๋‚˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ‹์ง€๊ฒŒ ๊ตฌ์„ฑ๋œ eslintrc ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ TSLint ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๋ถˆ์ผ์น˜๊ฐ€ ๋˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค(์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ).

TSLint์— ์žˆ๋Š” ESLint์—์„œ ๋ˆ„๋ฝ๋œ ๊ฒƒ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋„๊ตฌ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ๋„๋ก ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

eslint์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. eslint๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ tslint์—์„œ eslint๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ eslint์— ์œ ํ˜• ๊ฐœ๋…์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ถ€ ๊ฐ€์žฅ์ž๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ๊ณ ์น  ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ ์ œ๋„ค๋ฆญ ์œ ํ˜•์˜ ๋“ค์—ฌ์“ฐ๊ธฐ๊ฐ€ ๊นจ์ง).

eslint์˜ ๋„๊ตฌ ์ง€์›(ํŠนํžˆ ๊ตฌ์„ฑ ํŒŒ์ผ์˜ IDE ํžŒํŠธ)๊ณผ ๊ด€๋ จํ•˜์—ฌ. ์–ธ์  ๊ฐ€ ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ผ์ง€๋งŒ ํ˜„์žฌ ๊ฒฝํ—˜์ด ์—†๊ณ  ์ž์œ ๋กญ๊ฒŒ ์ผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. (์ ์–ด๋„ ๋‚ด ๋ชฉ๋ก์˜ ๋งจ ์œ„์— ์žˆ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด tslint๋Š” ์—ฌ์ „ํžˆ ์ž˜ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค)

๋œ ๊ณ ํ†ต์Šค๋Ÿฌ์šด ๋ฐฉ๋ฒ•์€ typescript ํŒŒ์ผ์— tslint๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  javascript ํŒŒ์ผ์— eslint๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ์„ธ๊ณ„๊ฐ€ '์ผ๊ด€์„ฑ'์„ ์ฆ๊ธธ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

npm์€ TSLint๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ๋Œ€์‹  ESLint๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๋ช…์‹œ ํ•˜๋ฏ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ์•„์•ผ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

@cdalexndr ์‚ฌ๋žŒ๋“ค์ด ์ง€์› ์ค‘๋‹จ์˜ ๊ทผ๊ฑฐ์— ๋Œ€ํ•ด ๋ฐฐ์šฐ๊ณ  ์ตœ์‹  ์—…๋ฐ์ดํŠธ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ์ด ๋ฌธ์ œ๋ฅผ ๊ณต๊ฐœํ•˜๋Š” ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ์˜ˆ์ • ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ ์€ typescript-eslint ์— ๋Œ€ํ•œ ๊ธฐ์ˆ ์ ์ธ ์„ธ๋ถ€ ์‚ฌํ•ญ์— ์ดˆ์ ์„ ๋งž์ถ”์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
TSLint ์‚ฌ์šฉ์ž ๋Š” typescript-eslint ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ „์ฒด typescript-eslint/README ํŒŒ์ผ์—๋Š” ํˆฌ๋ช…ํ•œ ์ „ํ™˜์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ์ž์ฒด๊ฐ€ npm์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด ์š”์ฒญ ์ฒ˜๋Ÿผ?

@niklasR ๋ฒ„์ „ 6.0.0์€ NPM์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜์—ˆ์œผ๋ฉฐ ๋ชจ๋“  ์ง€์˜ฅ์ด ๋ฌด๋„ˆ์กŒ์Šต๋‹ˆ๋‹ค.

#4919 ๋ฐ #4914๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

ํ•˜์ง€๋งŒ ๐Ÿ˜›... ์‚ฌ๋žŒ๋“ค์€ TSLint ์‚ฌ์šฉ์„ ์ค‘๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ๋ฒ„์ „์„ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œํ•œ ์ ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. https://www.npmjs.com/package/tslint ์—์„œ ๋ฒ„์ „ ๊ธฐ๋ก์„ ํ™•์ธํ•˜์„ธ์š”.
Screenshot showing 6.0.0 as deprecated on npm but later versions not

๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค - @adidahiya ?

์˜ค, ์ด์ƒํ•˜๊ฒŒ๋„, ์—ฌ๊ธฐ ๋ฌธ์„œ์—์„œ ์ด ๋ช…๋ น์ด ๋ฒ”์œ„์— ์†ํ•˜๋Š” ๋ชจ๋“  ์ž ์žฌ์ ์ธ ํ–ฅํ›„ ๋ฒ„์ „์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ œ์•ˆํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค .

npm deprecate tslint@^6.0.0 "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information."

...ํ•˜์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@adidahiya ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ NPM ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/npm/cli/issues/1165

์ด์ „ ๋ฒ„์ „๋„ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์–ด๋–ป๊ฒŒ ์š”์ฒญ ํ•ฉ๋‹ˆ๊นŒ ?

๋‚ด๊ฐ€ ๋ฌป๋Š” ์ด์œ ๋Š” ํŒจํ‚ค์ง€๋ฅผ ESLint๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ ค๊ณ  ํ•˜์ง€๋งŒ TSLint ^5๋ฅผ ์ƒ๋‹นํžˆ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋ฉฐ ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ (300+) ์ €์žฅ์†Œ๋ฅผ ์Šค์บ”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ํ•„์š”ํ•œ ๋ชจ๋“  ํ•ญ๋ชฉ์— ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜๋Š” ์ง€์› ์ค‘๋‹จ ์•Œ๋ฆผ.

์‚ฌ์šฉ ์ค‘๋‹จ์€ ํ•ญ์ƒ ๊ธฐ์กด ๋ฒ„์ „์—๋งŒ ์ ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฒ„์ „์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ๊ฒŒ์‹œ ํ›„ ํ•ญ์ƒ ์ˆ˜๋™์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ github ํŽ˜์ด์ง€ https://palantir.github.io/tslint/์—์„œ TSLint ์ง€์› ์ค‘๋‹จ์— ๋Œ€ํ•ด ๋งค์šฐ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€ ์•Š์„๊นŒ์š”?

๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ๋‚ด๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค! ๋ˆ„๊ตฐ๊ฐ€ tslint์—์„œ eslint๋กœ์˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ๋‹จ๊ณ„๋ณ„ ์ง€์นจ์„ ์ œ์‹œํ•ด ์ฃผ์„ธ์š”.

TSLint ๋ฌธ์„œ ์›น์‚ฌ์ดํŠธ๋Š” ๊ฝค ์˜ค๋žซ๋™์•ˆ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์•˜์ง€๋งŒ ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ README๋Š” ์ตœ์‹  ์ƒํƒœ์ด๋ฉฐ typescript-eslint README ์—๋Š” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์— ๋Œ€ํ•œ ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ๋ฅผ ํฌํ•จํ•˜์—ฌ ์œ ์šฉํ•œ ์ •๋ณด๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์ˆ˜์ •
[https://stackoverflow.com/questions/61605380/angular-9-issue-unable-to-run-the-initial-application]
npm ์„ค์น˜ ์ดˆํ‚ค๋‹ค๋ฅด
npm ์บ์‹œ ์ •๋ฆฌ --force
npm install -g @angular/ cli@latest

install error
์•ˆ๋…•ํ•˜์„ธ์š” Angular ํŒ€, ์ €๋Š” Angular๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋™์•ˆ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ๋„์™€์ฃผ์„ธ์š”.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” Angular ํŒ€, ์ €๋Š” Angular๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋™์•ˆ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ๋„์™€์ฃผ์„ธ์š”.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ์ž˜๋ชป๋œ ์žฅ์†Œ์— ์žˆ์Šต๋‹ˆ๋‹ค
์ด๊ฒƒ์€ palantir ์ด๋ฉฐ angular ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
https://github.com/angular/angular/issues ์—์„œ ๋ฌธ์ œ๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”.
๋˜๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ด๋ฏธ ์žˆ๋Š”์ง€ ์ฐพ์•„๋ณด์„ธ์š”.
๋„์›€์ด ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋ต™๊ฒ ์Šต๋‹ˆ๋‹ค.

Angular์˜ ๋„์›€์„ '์—ฌ๊ธฐ'์— ์š”์ฒญํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์–ด๋ฆฌ๋‘ฅ์ ˆํ•  ์ •๋„๋กœ.. ๊ทธ๋“ค์˜ ๋กœ๊ณ ๊ฐ€ ์˜๊ตญ ์ „์› ์†Œ์ผ“์ฒ˜๋Ÿผ ์ƒ๊ฒผ๋‹ค๋Š” ์ ์— ๊นŠ์€ ์ธ์ƒ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

@JoshuaKGoldberg ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋ณด๊ด€/์ž ๊ทธ๋Š” ๋‚ ๋„ ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ๋Š” ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ์ง€๊ธˆ ๋ฒ„๊ทธ๋ฅผ ์ฐพ์œผ๋ฉด ์†”๋ฃจ์…˜์€ ์˜ค๋ž˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํŒŒํ—ค์น˜๋Š” ๋Œ€์‹  ESLint๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ์ง€๊ธˆ ๊ทธ๊ฒƒ์„ ๋– ๋‚˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์„ ๋ณด๋Š” ๊ฒƒ์€ ์ข‹์ง€๋งŒ ์ด๊ฒƒ์„ ํฌ๊ธฐํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋” ๋ช…ํ™•ํ• ์ˆ˜๋ก ๋” ์ข‹์Šต๋‹ˆ๋‹ค.

2020๋…„ 9์›”๋ถ€ํ„ฐ ts-lint๋ฅผ ๋” ์ด์ƒ eslint ๋Œ€์‹  ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์—์„œ ์—ฌ์ „ํžˆ ts-lint๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
https://github.com/typescript-eslint/tslint-to-eslint-config ํ™•์ธ

ํ•˜์ง€๋งŒ typescript-eslint๋Š” ์‹ค์ œ๋กœ ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/FAQ.md#why -dont-i-see -typescript-errors-in-my-eslint-์ถœ๋ ฅ

๐Ÿ˜ข

ํ•˜์ง€๋งŒ typescript-eslint๋Š” ์‹ค์ œ๋กœ ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/FAQ.md#why -dont-i-see -typescript-errors-in-my-eslint-์ถœ๋ ฅ

๐Ÿ˜ข

์ด๊ฒƒ์ด TSLint์˜ ๊ฒฝ์šฐ์—๋„ ๊ฑฐ์˜ ์‚ฌ์‹ค์ด๋ฉฐ TSLint๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ Linting ์Šคํฌ๋ฆฝํŠธ์—์„œ tsc --noEmit ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„์ „ 8๋กœ ์ƒˆ๋กœ์šด ๊ฐ๋„ ์•ฑ์„ ์ƒ์„ฑํ–ˆ์œผ๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ tslint๊ฐ€ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ํ—ˆ์Šคํ‚ค ๊ตฌํ˜„์„ ์œ„ํ•ด ts config๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์งˆ๋ฌธ์€ ์•ž์œผ๋กœ ๋ช‡ ๋…„ ๋™์•ˆ ๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ Angular 8์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ๋Š” ์‚ฌ์‹ค์„ ๊ฐ์•ˆํ•  ๋•Œ ๊ถŒ์žฅ๋˜๋Š”๋Œ€๋กœ typescript-eslint๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ž…๋‹ˆ๊นŒ?

@mayankkalbhor ๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ Angular์˜ ๊ธฐ๋ณธ๊ฐ’์€ ์—ฌ์ „ํžˆ โ€‹โ€‹TSLint๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Angular CLI์˜ ๋ชจ๋“  ๊ธฐ๋ณธ ๊ตฌ์„ฑ์ด ESLint์— ๋Œ€ํ•ด ๊ตฌ์„ฑ๋  ๋•Œ๊นŒ์ง€ Angular 11 ์ด์ƒ์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ๋กœ๋“œ๋งต: https://angular.io/guide/roadmap#migration -to-eslint๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ด๋ฏธ ์„ค์ •ํ•œ ๊ฒƒ์ด ์žˆ๋Š” ๊ฒฝ์šฐ TSLint ๋Œ€์‹  ESLint๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œํ•˜๋Š” ๊ฒƒ์€ ์—†๋Š” ๋™์•ˆ ์ง์ ‘ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ „์ ์œผ๋กœ ๋‹น์‹ ์˜ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ESLint์˜ ๊ธฐ๋Šฅ์„ ์„ ํ˜ธํ•˜๊ฑฐ๋‚˜ ์‹ค์ œ๋กœ ๊ทœ์น™์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ๊ณ„ํš์ด๋ผ๋ฉด ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ์ ์ ˆํ•œ ๊ฒฝ๋กœ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ TSLint ๊ทœ์น™์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํ• ์• ํ•˜์ง€ ์•Š๊ณ  ๊ทœ์น™์— ๋งŒ์กฑํ•œ๋‹ค๋ฉด ๋ฌด๊ธฐํ•œ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌด๊ธฐํ•œ์˜ ๋ฒ„๊ทธ ์ˆ˜์ •๊ณผ ๊ธฐ๋Šฅ ์—…๋ฐ์ดํŠธ๋Š” ์ „ํ˜€ ๊ธฐ๋Œ€ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

Angular ๊ฐœ๋ฐœ์ž์˜ ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋Š” Angular๊ฐ€ Angular 10์—์„œ 11 ๋˜๋Š” 11์—์„œ 12๋กœ ์•„๋งˆ๋„ ํ–ฅํ›„ Angular ์—…๊ทธ๋ ˆ์ด๋“œ์— ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํฌํ•จํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ˆ„๊ตฌ๋‚˜ ์ž์œ ๋กญ๊ฒŒ ESLint๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์‹ ์„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ์œ ์ผํ•œ ์‹ค์ œ ์ฐจ๋‹จ๊ธฐ๋Š” ์‹œ๊ฐ„์ด ์žˆ๊ณ  ํ˜„์žฌ ๋™๋“ฑํ•œ ESLint ๊ตฌ์„ฑ์— ์—†๋Š” ๊ธฐ๋Šฅ์„ ์žƒ์–ด๋„ ์ƒ๊ด€ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ด์ „์— Codelyzer ๋ฅผ ํ†ตํ•ด ์ผ๋ถ€ ๋ฆฐํŠธ ๊ตฌ์„ฑ์ด ์žˆ์—ˆ๊ณ  ์ด์ œ ์—ฌ๊ธฐ์— ์ž„๋ฐ•ํ•œ ๊ต์ฒด ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. angular-eslint

์šฐ๋ฆฌ๊ฐ€ ์†Œํ”„ํŠธ์›จ์–ด์˜ EOL์— ๋„๋‹ฌํ•จ์— ๋”ฐ๋ผ typescript-eslint๊ฐ€ ๋ฐ˜๋Œ€๋กœ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐ ๊ทœ์น™ ๋ฌธ์„œ์— typescript-eslint ๋ฌธ์„œ์˜ ๋Œ€์ฒด ๊ทœ์น™์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์žˆ์œผ๋ฉด ๊ต‰์žฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ 2021๋…„ 1์›” 1์ผ ์ดํ›„์— ๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ tslint๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ํ˜„์žฌ ๋‚ด ๋นŒ๋“œ๋Š” tslint๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. npm ์›น ์‚ฌ์ดํŠธ์— tslint๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ช…๋ น์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  tslint๋Š” ์ด์ œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ๋‚ด ์งˆ๋ฌธ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์–ด๋–ค ์‹์œผ๋กœ๋“  ์ง€์›์„ ๋ฐ›์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ๋” ์ด์ƒ ์—…๋ฐ์ดํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
์˜ˆ, eslint๋กœ ์ด๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ tslint๋Š” ๋” ๋งŽ์€ ์œ ํ˜•์˜ ์ž๋™ ์ˆ˜์ •์„ ์ง€์›ํ•˜๋ฏ€๋กœ eslint๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— 'tslint --fix'๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ทธ๋™์•ˆ ์ƒํ™ฉ์ด ๋ฐ”๋€Œ์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ฝ”๋“œ ya๋กœ ์ •๋ ฌ ํ•  ๊ฒƒ์ด๋‹ค

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