์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ ์์ ์ฝ์์ ์๋ ์๋ ๊ฒ์ฒ๋ผ ์ฐ๋ฆฌ๋ 2019๋ ์ TSLint๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ TypeScript ๋ฐ JavaScript ๋ชจ๋์ ๋ํ ํ์ค ๋ฆฐํฐ๋ก ESLint๋ก์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ง์ํ ๊ณํ์ ๋๋ค. ์ด๊ฒ์ ์ฆ๊ฐ์ ์ธ ์ง์ ์ค๋จ์ด ์๋๋๋ค. ๋ฐ๋๋ก ํ๊ท ์์ด ์ ๋๊ตฌ๋ก ์ํํ๊ฒ ์ ํํ๋ ค๋ฉด ํด์ผ ํ ์ผ์ด ๋ง์ต๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ์์ ์ ์งํ๊ณ ์ ํ๋ ๊ธฐ๋ฅ, ํ ์คํธ ์ค์ํธ ๋ฐ TSLint์ ํธ๋ฆฌํจ์ด ์์ต๋๋ค. ๋ ๋๊ตฌ ๊ฐ์ ๊ฒน์น๋ ์๊ฐ์ด ์์ ์ ์์ผ๋ฉฐ TSLint ์ผ๋ฆฌ ์ด๋ตํฐ๋ ์ ์ฒด ์ฝ๋ ๊ฒ์ฌ ๋ฒ์๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด _๋ ๋ค_ ์คํํ๋ ๊ฒ์ด ์ข์ต๋๋ค(์ฑ๋ฅ์ด ํฌ๊ฒ ์ ํ๋์ง ์๋ ํฉ๋ฆฌ์ ์ธ ์์ค๊น์ง).
ESLint / typescript-eslint ๋ก๋๋งต์์ ์ฒ๋ฆฌ๋ ๊ฒ์ผ๋ก ์์ํ๊ธฐ ๋๋ฌธ์ ์ด์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฒ์ผ๋ก ์๊ฐ๋๋ ์ด ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ผ๋ถ ๊ธฐ๋ฅ ์์ฒญ์ ๋ซ์ ๊ฒ์ ๋๋ค. __์๋ก์ด ๊ธฐ๋ฅ ์์ฒญ__์ด ๋ง๊ฐ/๊ฑฐ๋ถ๋ ๊ฐ๋ฅ์ฑ์ด ๊ฐ์ฅ ๋์ ๊ท์น ๋ฒ์ฃผ์ ํ ์๋ ์์ ๊ท์น ์ ๋๋ค. ๋๋ ์ฐ๋ฆฌ๊ฐ Palantir์์ Prettier๋ฅผ ์ฌ์ฉํ๊ณ ์ฝ๋ ์์ ์ง์ ์์ ์ ๋ ๋์ ๋๊ตฌ๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๊ท์น์ ๊ฝค ์ค๋ซ๋์ ๋ถํ ํ ๊ฒ์ ์ ์ํ์ต๋๋ค.
TSLint๋ ์ต์ ์ปดํ์ผ๋ฌ/์ธ์ด ๊ธฐ๋ฅ์ผ๋ก ์ต์ ์ํ๋ฅผ ์ ์งํ๋ ์ค์ํ ๋ฒ๊ทธ ์์ ๋ฐ ์ ๋ฐ์ดํธ์ ํจ๊ป ๊ณ์ ๋ฆด๋ฆฌ์ค๋ฉ๋๋ค.
์ ๋ฐ์ดํธ(2019๋ 6์): @JoshuaKGoldberg ๋ฐ tslint-contrib-microsoft์ ํ๋ ฅํ์ฌ ๋ณด๋ค ๊ตฌ์ฒด์ ์ธ ๋ก๋๋งต ํ์๋ผ์ธ:
์ ๋ฐ์ดํธ(2019๋ 8์): TSLint ๊ตฌ์ฑ ํ์ผ์ ESLint ๊ตฌ์ฑ ํ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ CLI ๋ช ๋ น์ tslint-to-eslint-config ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์ ๋ฐ์ดํธ(2020๋ 3์): #4914์์ ๋ ผ์๋ ํ 1์ 1์ผ ๋ง๊ฐ์ผ์ _"TypeScript ๋ณ๊ฒฝ ์ฌํญ์ ์๋ฐํ์ฌ ๋ฐ์ํ๋ ์ถฉ๋์ ๋ํ ์์ ์ฌํญ"์ ์ถ๊ฐํ์ต๋๋ค.
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 ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ณ ์ถ์ต๋๋ค. ์ด๋์๋ถํฐ ์์ํด์ผ ํ๋์?
@moulikcipherX https://github.com/typescript-eslint/typescript-eslint#how -can-i-help
์ฌ์ฉ์ ์ ์ 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 ์์ ๋ฒ์ ๊ธฐ๋ก์ ํ์ธํ์ธ์.
๊ถํ์ด ์์ต๋๋ค - @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
์๋
ํ์ธ์ 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๋ก ์ ๋ ฌ ํ ๊ฒ์ด๋ค
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
tslint.json์ eslint.json์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ณ ๋๋ฑํ ๊ท์น๊ณผ ์ต์ ์ ๋งคํํ๋ CLI ๋ช ๋ น์ด ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ์ด์์ ์ผ๋ก๋ tslint.json์์ ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์๋ ๊ท์น์ ์ ๊ฑฐํ๊ณ ์์ง ๋๋ฑํ์ง ์์(๋๋ ์ฌ์ฉ๋ ์ต์ ์ ์ง์ํ์ง ์๋) ๊ท์น์ ์ ์งํ์ฌ tslint.json์ด ๋น์ด ์์ ๋๊น์ง ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๊ท์น์ ๋ฉฑ๋ฑ์ ์ผ๋ก ๋ฐ๋ณต์ ์ผ๋ก ์คํํ ์ ์์ต๋๋ค. ์ด๋ ์์ ์์ ์ฐ๋ฆฌ๋ ESLint์ ์์ ํ ์์กดํ ์ ์์ต๋๋ค.