(์๊ฐ์ด ๋๋ค๋ฉด) ํ๊ณ ์ถ์ต๋๋ค.
๊ทธ๊ฒ์ ์๋ก์ด ์ฃผ์ ๋ฆด๋ฆฌ์ค๊ฐ ๋ ๊ฒ์ด๋ฉฐ ๋ค๋ฅธ ๋ฌธ์ ์์ ์ธ๊ธํ๋ฏ์ด ๋ธ๋ผ์ฐ์ ๋ฒ๋ค ์ฝ์๋ ์ ๊ฑฐํ ๊ฒ์ ๋๋ค.
๋ด๊ฐ ๊ทธ๊ฒ์ํ๊ธฐ ์ ์ ์ด๋ค ์ด์๊ฐ ์์ต๋๊น? ๋๋ require(๋กค์ ์ฉ) ์ด์ธ์ ๋ชจ๋ ๊ฒ์ es6์ผ๋ก ๋ณํํ๊ธฐ ์์ํ์ง ์์ ๊ฒ์ด์ง๋ง ๋ค๋ฅธ ์ฌ๋๋ค์ ์ํ๋ ๊ฒฝ์ฐ es6์ ๋ฐฐ์ฐ๋ ๋ฐฉ๋ฒ์ผ๋ก less.js "์ ๊ทธ๋ ์ด๋"๋ฅผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
_Update by @matthew-dean -- ๋๋ ๊ฒฐ๊ตญ lib/
๋ฅผ ๊ฐ์ ํด๋์ ๋ณด๊ดํ์ฌ git ๊ธฐ๋ก์ (์ผ๋ถ?) ์ ์งํ๊ณ , ๋์์ ํธ๋์คํ์ผ(์
-ํธ๋์คํ์ผ?)ํ๋ ๋์ ์ด๋ํ๊ฒ ๋์์ต๋๋ค. ๋ชจ๋์ es5/
๋๋ ์ด์ ์์ํ๋ ๊ฒ์ผ๋ก ์ปดํ์ผ๋์ง ์์ต๋๋ค. ๋์ Node 6+์ฉ CommonJS ๋จ์ผ ํ์ผ ๋น๋์ ๋ธ๋ผ์ฐ์ ๋น๋๊ฐ ์์ต๋๋ค._
์๋์. ๋๋ ์ ์ ๋์ ๊ฐ์ ๋ผ์ธ์ ๋ฐ๋ผ ์๊ฐํ์ต๋๋ค. TypeScript๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ์ฝ๋ ํํธ/์ค์ ๊ฐ์ฒด ์ฐ๊ฒฐ์ ๊ฐ๋ ๊ฒ์ด ๊ฐ๋ฐ/๊ธฐ์ฌ๋ฅผ ๋ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๊ฒ์ด ์ง์ ๋ถ๋ด/์ฅ๋ฒฝ์ ์ค์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง.
๋๋ ๋ํ ํ์ฑ/AST์ es6 ์ปฌ๋ ์ ์ ์ฌ์ฉํ ๋ค์ https://github.com/Benvie/harmony-collections์ ๊ฐ์ es5 ๋น๋์ ํด๋ฆฌํ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํ๋ค๋ ๊ฒ๊ณผ ๊ฐ์ ๋งฅ๋ฝ์์ ์๊ฐํ๊ณ ์์์ต๋๋ค. es6 ํ๊ฒฝ(์ต์ ๋ธ๋ผ์ฐ์ ์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ฌ Node.js)์์๋ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๊ฐ ๊ฐ์ํ๊ณ AST ๊ตฌ์ฑ์ด ๋นจ๋ผ ์ด๋ก ์ ์ผ๋ก ๊ตฌ๋ฌธ ๋ถ์/ํ๊ฐ ์๋๊ฐ ๋นจ๋ผ์ง๋๋ค.
TypeScript๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ์ฝ๋ ํํธ/์ค์ ๊ฐ์ฒด ์ฐ๊ฒฐ์ ๊ฐ๋ ๊ฒ์ด ๊ฐ๋ฐ/๊ธฐ์ฌ๋ฅผ ๋ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๊ฒ์ด ์ง์ ๋ถ๋ด/์ฅ๋ฒฝ์ ์ค์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง.
ES6 ์ดํ์๋ typescript๋ es6 ํธ๋์คํ์ผ๋ฌ์ด๊ธฐ ๋๋ฌธ์ es6์ด typescript๋ฅผ ๋ฐฐ์ ํ์ง ์๋๋ค๊ณ ์๊ฐํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์ดํ ์ถ๊ฐ ๋จ๊ณ๊ฐ ๋ ๊ฒ์ ๋๋ค.
์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์๋นํ ์ถ๊ฐ ์์ ์ด๋ ๋ฆฌํฉํ ๋ง์ด ํ์ํ์ง ์๋ ํ typescript๋ฅผ ๊ถ์ฅํ์ง ์์ต๋๋ค. IMO ํ์ดํ์คํฌ๋ฆฝํธ
๋๋ ๋ํ ํ์ฑ/AST์ es6 ์ปฌ๋ ์ ์ ์ฌ์ฉํ ๋ค์ https://github.com/Benvie/harmony-collections์ ๊ฐ์ es5 ๋น๋์ ํด๋ฆฌํ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํ๋ค๋ ๊ฒ๊ณผ ๊ฐ์ ๋งฅ๋ฝ์์ ์๊ฐํ๊ณ ์์์ต๋๋ค. es6 ํ๊ฒฝ(์ต์ ๋ธ๋ผ์ฐ์ ์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ฌ Node.js)์์๋ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๊ฐ ๊ฐ์ํ๊ณ AST ๊ตฌ์ฑ์ด ๋นจ๋ผ ์ด๋ก ์ ์ผ๋ก ๊ตฌ๋ฌธ ๋ถ์/ํ๊ฐ ์๋๊ฐ ๋นจ๋ผ์ง๋๋ค.
๋๋ ๊ทธ ํด๋ฆฌํ์ ์ฌ์ฉํ์ง ์์ ๊ฒ์ด๊ณ , ํ๋ก์ ํธ๋ ์ฃฝ์ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค(์๋ง๋ ํ๋ชจ๋๋ผ๋ ์ด๋ฆ์ด ์ฃฝ์๊ธฐ ๋๋ฌธ์ผ ๊ฒ์ ๋๋ค).
๋ํ ๋ถํํ๋ ES6 ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ด ๋ ๋น ๋ฅธ์ง ํ์ ํ ์ ์์ต๋๋ค( https://jsperf.com/property-access-object-array-map-weakmap/6). ์๋ฅผ ๋ค์ด Promise ํด๋ฆฌํ์ด ๊ธฐ๋ณธ ๊ตฌํ๋ณด๋ค ๋น ๋ฅธ ๋ฐฉ๋ฒ์ ์ฌํ ์ผ์ ๋๋ค.
:+1:
๋ชจ๋ ์ข์ ์ . ES6/Babel์์ ํ์คํํ๋ฉด ํนํ ํ๋กํ ํ์ ์์์ ์ํํ ๋ ์ฐ๊ธฐ๋ฟ๋ง ์๋๋ผ ์ฝ๊ธฐ๋ ๋ ์ฌ์์ง๋๋ค.
jsperf ํ ์คํธ์ ๊ดํ ํ, ๊ทธ๊ฒ์ ์ค์ ๋ก ๊ณต์ ํ ์๊ฐ ์๋๋๋ค. Weakmap์ด ํด๋น ํน์ ํ ์คํธ์์ ๋ ๋๋ฆฌ๊ฒ ์ํ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ์ด๋ก ์์ผ๋ก ๋ค์ํ ๊ฐ์ฒด ๋ชจ์๊ณผ ์ ํ์ ๋ง๋ ๋ค์ ํ๊ฐํ๋ ๋ฐ ์์ด Less๊ฐ ๋ ๋์ ์ ์์ต๋๋ค. ํ์คํ์ง ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ "๋ฒค์น๋งํน ํํฌ"๋ฅผ ๋ฃ์ง ์๊ณ ๋ ๊ฐ๋ณ ๊ธฐ๋ฅ์ ์ฐ๊ฒฐํ์ฌ ์ธ๋ถํ๋ ๋ฒค์น๋งํน์ ์ํํ ์ ์๋ ๊ณณ์์ ์ต์ข ์ ์ผ๋ก ํ ์คํธ(๊ทธ๋ฆฌ๊ณ ์ถ๊ฐํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค)ํ๊ณ ์ถ์ ๋ช ๊ฐ์ง ์ข์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์์ต๋๋ค. ๋๋ ๋น์ ์ด Less.js ๋ด์ ํจ์์ ๋ํด ์ผ์ข ์ jsperf ํ ์คํธ๋ฅผ ํ ์ ์๋๋ก ๋ฌด์ธ๊ฐ๋ฅผ ์ค์ ํ๊ธฐ๋ฅผ ๋ฐ๋ผ๊ณ ์์ต๋๋ค. ํ์ฌ ๋ฆด๋ฆฌ์ค์ด๋ฉฐ ๋ช ๊ฐ์ง ์ข ๋ฅ์ ํ ์คํธ .less ํ์ผ์ ์ฌ์ฉํฉ๋๋ค. ์ด์ ์ ์ธ๊ธํ๋ฏ์ด ํน์ ์ฌ์ฉ ์ฌ๋ก์ ๋ํด ์ด๋ ๊ฒ์ด ๋ ๋น ๋ฅธ์ง ์ถ์ธกํ ํ์๊ฐ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ก ์ ์ผ๋ก ์ผ๋ถ ๊ธฐ๋ฅ ์์ค ๋ ์์ ๊ฐ์ฒด์์ WeakMap์ ์ํ๊ณ ํด๋น ์์น์์ ๋ฒค์น๋งํฌ๋ฅผ ์คํํ๊ณ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
@lukeapage ๋ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
IMO ํ์ดํ์คํฌ๋ฆฝํธ
- + typescript๋ฅผ ๋ ์ฝ๊ฒ ์๋ ์๋ก์ด ์ฌ๋๋ค์ ์ํ ๊ฐ๋ฐ์ ๋ง๋ญ๋๋ค.
- + ์ ์ง๋ณด์์ฑ ์ฆ๊ฐ
- ์ฌ๋๋ค์ด ์ต์ํ์ ํ์ดํ์คํฌ๋ฆฝํธ๋ฅผ ์๊ฑฐ๋ ๋ฐฐ์์ผ ํจ
- ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ์๊ฐ์ด ๋ ์ค๋ ๊ฑธ๋ฆฝ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ธ๊ธ๋์ง ์์ ๋งค์ฐ ์ค์ํ ์ด์ ์ค ํ๋๋ ๊ฑด๋๋ฐ๋ ๊ฒ์
๋๋ค.
TypeScript์ ์ ํ ์ง์ ๋ชจ๋๋ ์์ ์ ์ธ ๋ณ์ ์ ํ์ ์ฌ์ฉํ๋๋ก ๊ฐ์ ํ์ฌ ์์ ์ ์ธ ์ ํ ๋ชจ์์ ์ ์ฉํ์ฌ ์ปดํ์ผ๋ฌ๊ฐ ์ฝ๋๋ฅผ ์ ์ ์ผ๋ก _๋ฐ_ ๋์ ์ผ๋ก ๋ถ์ํ ์ ์๋ ๋ฅ๋ ฅ์ ํฅ์์์ผ ์ต์ ํ๋ ์ฝ๋๋ฅผ _ํจ์ฌ ๋ ๋์_ ์์ฑํ๊ณ ์ต์ ํ๋ ์ฝ๋๋ฅผ ๋๋ฆฐ ํด์ ์ฝ๋๋ก ๋๋๋ฆฝ๋๋ค.
TypeScript๋ก ์ด๋ํ๋ ๊ฒ์ด ES6์ผ๋ก ์ด๋ํ๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ ๊ธฐ์ฌ๋ฅผ ํ ๊ฒ์ ๋๋ค.
์ ๋ ฅ ๋ชจ๋๋ผ๋ ๊ฒ์ ๊ธ์ง๋ Any?๋ฅผ ์๋ฏธํฉ๋๊น?
๋๋ ์์ ํ๋ก์ ํธ์์ ๊ทธ๊ฒ์ ์๋ํ๊ณ ๋๋ ๋์ฒ์ ์ฃผ์์ ๊ฐ์ก์ต๋๋ค.
ํธ๋์คํ์ผ๋ฌ๊ฐ ๋งค์ฐ ๋๋ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ง์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
์ผ๋ง๋ ๋ง์ ๋ณ์์ ๋ณ์ด๋ ๋ณ์ ์ ํ์ด ์๋์ง ํ์คํ์ง ์์ต๋๋ค. ๊ทธ๋์..
์ฑ๋ฅ์์ ์ด์ ์ด ๋์ ๋ ๊ฒ์ด๋ผ๊ณ ํ์ ํ์ง ๋ชปํ์ต๋๋ค.
@rjgotten TypeScript ๋ฅผ ์ฌ์ฉํ์ง ์์์ง๋ง ์ข์ ์ ์ ๋๋ค. TypeScript์ intellisense/autocomplete ํ๊ฒฝ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ ๋ ์ ํ/๊ฐ์ฒด ๋ชจ์์ ์์ฑํ๋ฏ๋ก ์ค์ ๋ก ์๋ก์ด ๊ธฐ์ฌ์์๊ฒ ๋์์ด ๋ ์ ์์ต๋๋ค. ์ ์ ํ๊ฒ ์ค๊ณ๋๋ฉด ์ฝ๋ ๋ณ๊ฒฝ์ ๊ธฐ์ฌํ๋ ๋๊ตฐ๊ฐ์๊ฒ ์ผ์ข ์ ์์ฒด ๋ฌธ์ํ/์ต์ํ/์ค๋ฅ ๋ฐฉ์ง ๋๊ตฌ ์ญํ ์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ ์ด์ ๋ ์๋ง๋ TypeScript ๋์์ธ์ ์์ ๊ฒ์ ๋๋ค.
์ ๋ฐ์ ์ผ๋ก ์ฑ๋ฅ์์ ์ด์ ์ด ์์ต๋๊น? ๊ฒฐ์ ํ๊ธฐ๊ฐ ๋ ์ด๋ ต์ต๋๋ค. ๊ทธ๊ฒ์ ์บ๋ฒ์ค๋ณด๋ค ๋ ์์ ๊ฐ์ ๋๋ค.
๋ด ์์ ์ ํ๋ก์ ํธ์ TypeScript๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๊ณ ์์ง๋ง @lukeapage ์ ๋ ๋์ํ๋ ๊ฒฝํฅ์ด ์์ ๊ฒ์ ๋๋ค. ์๋ํ๋ฉด ์ฌ๊ธฐ์ ์๋ ์ฐ๋ฆฌ ์ค ๋๊ตฌ๋ TypeScript ์ ๋ฌธ๊ฐ๊ฐ ์๋ ํ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์์ง ํ์ ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๊ฒ์ ์ฒ์์.
๋ํ ES6์ผ๋ก ์ด๋ํ๋ค๊ณ ํด์ ์์ผ๋ก TypeScript๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ง์ ์๋ ์์ต๋๋ค. Microsoft/Google์ ๋ชฉํ๋ TypeScript 2.0์ ES6 ์์ ์งํฉ์ผ๋ก ๋ง๋๋ ๊ฒ์ด๋ฏ๋ก ํญ์ ES6/Babel๋ก ์์ํ๊ณ ๋์ค์ ์ ์ ํ ์ ํ์ ์ถ๊ฐํ๊ณ TypeScript ๋ณํ๊ธฐ๋ก ์ ํํ ์ ์์ต๋๋ค. ๋ด ์์ฌ์ TypeScript๊ฐ ๋ณํ๋ ์ธ์ด๋ฅผ "์น๋ฆฌ"ํ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ๋จ์ง ์ปดํ์ผ ์๊ฐ/์๋ ์์ฑ ์ด์ ์ด ์ ํ์ด ์ง์ ๋์ง ์์ JavaScript๋ณด๋ค ํจ์ฌ ํฌ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋์... TypeScript๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ถ๊ฐํผํ๋ค๊ณ ์๊ฐํ์ง๋ง ๊ทธ๋ ๋ค๊ณ ํด์ ๋ฐ๋ก ์ฌ์ฉํด์ผ ํ๋ ๊ฒ์ ์๋๋๋ค.
์ธ์ ๊ฐ Less์ ๋ํ ๋ค๋ฅธ ์ํคํ ์ฒ ์ ๊ทผ ๋ฐฉ์์ ๋ํด ๋ ผ์ํ๊ณ ์ถ์ต๋๋ค.
์ ๋ ฅ ๋ชจ๋๋ผ๋ ๊ฒ์ ๊ธ์ง๋ Any?๋ฅผ ์๋ฏธํฉ๋๊น?
์๋์. ์ผ๋ฐ์ ์ผ๋ก ์ ํ์ด ์ง์ ๋ ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก Any์ ์ฌ์ฉ์ ๊ธ์งํ ์ _์_ ์์ง๋ง, ํ์ดํ ์์คํ ์ ๋ง์กฑ์ํค๊ธฐ ์ํด ๋ง์ ์ฝ๋ ํฝ์ฐฝ์ ์ด๋ํ๋ ๊ฒฝํฅ์ด ์๊ธฐ ๋๋ฌธ์ (์ ์ด๋ ์ค์ง์ ์ผ๋ก) ๋์ ์๊ฐ์ ๋๋ค.
๊ทธ๋ฌ๋ ํจ์์์ ์ ํ์ด ์ง์ ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ํธ์ถ์(์ ์ด๋ TypeScript๋ก ์์ฑ๋ ํธ์ถ์)๊ฐ ์ฃผ์ด์ง ์ ํ์ _๋ฐ๋์_ ์กด์คํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ์ ํ์ด ์ง์ ๋ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ ํ ๊ฒฝ์ฐ Less ์ปดํ์ผ๋ฌ์ ๋ด๋ถ ์์ ์์ ์ ํ ์์ ์ฑ์ ๋ณดํธํ๊ณ ํนํ ์ค์ํ ํจ์๊ฐ ์ ์ต์ ํ๋๋๋ก ๋ณด์ฅํ ์ ์์์ ์๋ฏธํฉ๋๋ค. (์์ง ๋ง์ธ์. JS ์์ง์ ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ๋ฅ ์์ค์์ ์ต์ ํ๋ฉ๋๋ค...)
์์ ์์ - https://github.com/less/less.js/tree/rollup
๊ฝค ๋ฉ์ง ์ํ. ํ ๋ก ์ ๋ํ Germaine, ๋๋ ์ฝ๋๋ฅผ๋ณด๊ณ ๋นจ๋ฆฌ ๋ฐ๊ฒฌํ์ต๋๋ค.
if (typeof index === 'number') {
AFAIK ์ ํ์ ์จ์ ์ฑ ๊ฒ์ฌ๋ TypeScript์์ ์ ๋ ํ์ํ์ง ์์ต๋๋ค. ๊ฐ์ ์ ํ์ ํ์ธํ๊ธฐ ์ํด ๋ฌธ์์ด ๋น๊ต๋ฅผ ์ํํ ๋๋ง๋ค ๋ฐํ์์ ์ธ๋ฑ์ค ์ ํ์ ๋ฌธ์์ด๋ก ๋ณํํ๋ ๊ฒฝ์ฐ ๊ทธ๋ฐ ์ผ์ด ์ถ๊ฐ๋ ์ ์์ต๋๋ค. TypeScript์์ ์ธ๋ฑ์ค๋ฅผ ์ ๋ฌํ ํจ์์ ๋ํ ํธ์ถ์ด ์์์ง๋ง ํด๋น ํ์์ด ์ซ์๊ฐ ์๋ ๊ฒฝ์ฐ๊ฐ ์๊ณ ์ธ๋ฑ์ค๋ง _accepted_ ์ซ์์ธ ๊ฒฝ์ฐ ํ์์ด ์ผ์นํ์ง ์์ ์ปดํ์ผ ์๊ฐ์ ํจ์๊ฐ ์คํจํฉ๋๋ค. ์ด๋ฌํ ๊ฒ์ฌ๊ฐ ๋ ๋น์ ๋ ๋ฐํ์์ ํ ์คํธ๋ฉ๋๋ค.
๋ฐ๋ฉด์ ์ด๊ฒ์ ๊ณ ๋ฆฝ๋๊ณ ๋๋ฌธ ์์ผ ์ ์์ต๋๋ค. ๊ด๋ จ์ฑ์ด ์์ด ๋ณด์๋ ๊ฒ์ ๋ด๊ฐ ๋ฐ๊ฒฌํ ๊ฒ๋ฟ์ ๋๋ค.
๋ช ์์ ์ ํ์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๋ ๊ฐ๋ ฅํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ํจ์๋ฅผ ํธ์ถํ๊ฑฐ๋ ์ฌ์ ์ํ๋ ๋ชจ๋ (๊ทธ๋ฆฌ๊ณ ์ ์ผํ) ์์น๋ฅผ ์ฐพ๋ ๊ฒ์ ๋จ์ง ํค๋ณด๋ ๋จ์ถํค์ ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฐ์ฒด๊ฐ ์ด๋ค ๊ธฐ๋ฅ์ ํ๋์ง ์ฐพ๋ ๊ฒ์ ์์ ์ด ํ์ ์์ผ๋ฉฐ ์ปดํ์ผ๋ฌ๊ฐ ๋ ๋ง์ ์ค๋ฅ๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ ๋ฆฌํฉํ ๋ง์ด ๋ ์์ ํฉ๋๋ค. ๋ํ ์๋ก์ด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ ์ฝ๊ฒ ๋ฐฐ์ธ ์ ์์ต๋๋ค. ํฐ ๊ทธ๋ฆผ์ ๋ณด๊ณ , ์ฝ๋์ ์ด๋ ๋ถ๋ถ์ด ์์กดํ๋์ง ์์๋ด๊ฑฐ๋, ์คํํ์ง ์๊ณ ์ฝ๋ ํ๋ฆ์ ๋ฐ๋ฅด๋ ๊ฒ์ ์๋ฐ๋ณด๋ค ์๋ฐ์์ ๋ ์ด๋ ต์ต๋๋ค(์๋ฅผ ๋ค์ด). ์ ํ ํธ์ง๊ธฐ๊ฐ ๋ ๊ฐ๋ ฅํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์์ง TypeScript๋ฅผ ์ฌ์ฉํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋๊ตฌ๊ฐ ๊ทธ๋งํ ๊ฐ์น๊ฐ ์์ ๋งํผ ์ฑ์ํ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. javascript์ ์ฅ์ ์ ๋ชจ๋๊ฐ ์๊ณ ์๊ณ TypeScript๋ ๋ ์๋ ค์ ธ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ ๋ฐ์ ์ผ๋ก ๋ ํฐ ๋ฆฌํฉํ ๋ง์ด๋ ๊ฑฐ๋ํ ์ ๊ธฐ๋ฅ์ ๊ณํํ๋ค๋ฉด TypeScript๋ก์ ์ ํ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ์์ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ ๋์์๋ ๋๋ฌด ๋ง์ ์์ ์ด ํ์ํ ์ ์์ต๋๋ค.
๋ ํฐ ๋ฆฌํฉํ ๋ง์ด๋ ๊ฑฐ๋ํ ์ ๊ธฐ๋ฅ์ ๊ณํํ๋ค๋ฉด TypeScript๋ก์ ์ ํ์ด ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์์ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ ๋์์๋ ๋๋ฌด ๋ง์ ์์ ์ด ํ์ํ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ์ฌ์ค์ผ ์ ์์ผ๋ฉฐ ์ค์ ๋ก๋ @lukeapage ๊ฐ ์ด๋ฏธ ์์ ์ ์ํํ๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฐ ์ด ์์ ์์ ์ต์ข ๊ฒฐ์ ์ ๋ด๋ ค์ผ ํ๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. :-)
์ด๋ด, ์ด๊ฒ์ ๋ํด : ์ฌ๋๋ค์๊ฒ ์ฝ๋๋ฒ ์ด์ค๊ฐ ๋ณ๊ฒฝ๋๊ณ ์์์ ์๋ฆฌ๊ธฐ ์ํด ์ฐ๋ฆฌ๊ฐํด์ผ ํ ์ผ์ด ์์ต๋๊น? ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ณํฉ ์ถฉ๋์ด ๋ฐ์ํ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค.
์๋, ๋๋ฌด ๋ง์ ์ถฉ๋์ด ์์ด์ผ ํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ es6 ๋ชจ๋์ผ ๋ฟ์
๋๋ค.
ํ์ผ์ ์ฎ๊ธฐ๋ฉด babel์ด๋ typescript๋ฅผ ํฌ๋ช
ํ๊ฒ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์๋ , ์๋ค์, ์ง๊ธ์ ์ด๋?
๋๋ ์ด ์ผ์ ํ ์ ์๋ค. @matthew-dean ํ ๋ฆฌํ์คํธ๋ฅผ ์๋ฝํ์๊ฒ ์ต๋๊น?
@alexlur ํ์คํ! ๋ด ์ ์ผํ ๊ด์ฌ์ฌ๋ 3.x
๋ถ๊ธฐ์ ๋ํ ๋ฆฌํฉํ ๋ง๊ณผ ๋ณํฉ ์ถฉ๋์ด ๋ฐ์ํ์ง ์๋ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ ๊ฑฐ๊ธฐ์์ ๋ถ๊ธฐ/๋ถ๊ธฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ํ ์ด ๋ฌธ์ ๊ฐ ์์ฑ๋์์ผ๋ฏ๋ก ์ด์ src/
๋ฐ dist/
๋ฅผ ์ฌ์ฉํ๋ ์ ์ ๋ฆฝ๋ ๊ท์น์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ lib/
๋ ๋๋๋ก src/
๋ก ์ฌ์ฉ๋๋ฏ๋ก ์ด๋ฆ์ ๋ฐ๊ฟ ํ์๊ฐ ์์ ๊ฒ์
๋๋ค.
๋ํ ํ
์คํธ์์ lib/
๊ฐ ์๋ ๋น๋๋ฅผ ์ฌ์ฉํ๋๋ก Gruntfile์ ์ฝ๊ฐ ๋ค์ ์์ฑํด์ผ ํฉ๋๋ค. (๋ธ๋ผ์ฐ์ ํ
์คํธ๊ฐ ํ๋ ์ผ์ dist/
test/
์์ ๋น๋ํ๋ ๊ฒ์
๋๋ค. dist/
ํด๋๋ ์ ๋ฆด๋ฆฌ์ค๋ฅผ ์ํ ํน๋ณํ Grunt ์์
์
๋๋ค. ํ
์คํธํ ๋ ๋น๋ํด์ผ ํฉ๋๋ค. test/
) ๊ทธ๋ ๊ฒ ํ ํ ํ
์คํธ๋ฅผ ํต๊ณผํ๋ ํ ๊ด์ฐฎ์ ๊ฒ์
๋๋ค.
@matthew-dean ์๋ ํ์ธ์. ๋ฆฌํฉํ ๋ง์ ์๋ฃํ์ง๋ง ์๋ก ๋น๋๋ ํ์ผ์์ ํ ์คํธ๋ฅผ ์คํํ๋๋ก Gruntfile์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋ด๊ฐ ํ ์ ์๋ ์ผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณ๋์ ๋ถ๊ธฐ๋ก ๋ณํฉํ๊ณ ํ
์คํธ ํตํฉ์ ๋ํด ๋ณด๋ ๊ฒ์
๋๋ค. ๋๋ ๋จ์ง ๋น์ ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋น ๋ฅด๊ฒ ์ดํด๋ณด๊ณ ์์์ต๋๋ค. ๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ ์ ํด ์ฃผ์ง๋ง at-rule
๊ฐ assignment
๋
ธ๋๊ฐ ์๋ชป๋์์ต๋๊น? ์๋๋ฉด Github๊ฐ ๊ทธ๊ฒ์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ ์๋ง์ผ๋ก ๋ง๋ค์์ต๋๊น?
์ ์ก์์ต๋๋ค. ์๋ชป๋ ํ์ผ์ ์ฌ์ฉํ์ต๋๋ค.
less.js๊ฐ ์ง์ํด์ผ ํ๋ ๋ธ๋ผ์ฐ์ /Node.js์ ์ต์ ๋ฒ์ ์ด ์์ต๋๊น? Node.js๋ Promise
(0.12 ์ดํ)์ ๋ํด ์๋นํ ์ข์ ์ง์์ ์ ๊ณตํ๋ ๋ฐ๋ฉด, ๋ธ๋ผ์ฐ์ ์ฌ์ฉ์ ์ผ๋ฐ์ ์ผ๋ก ์ด์จ๋ ์ด๋ฏธ ์ต์ ๋ธ๋ผ์ฐ์ ๋ฒ์ ์ ์คํํ๊ณ ์๋ ๊ฐ๋ฐ์๋ฅผ ์ํ ๊ฒ์
๋๋ค.
ํธ์งํ๋ค:
Less.js๋ ๋ชจ๋ ์ต์ ๋ธ๋ผ์ฐ์ (Chrome, Firefox, Safari, IE11+ ๋ฐ Edge์ ์ต์ ๋ฒ์ )๋ฅผ ์ง์ํฉ๋๋ค.
Internet Explorer 11์๋ง Promise
๊ฐ ๋ด์ฅ๋์ด ์์ง ์์ต๋๋ค.
@alexlur
๋ธ๋ผ์ฐ์ ๋ด ๋ฒ์ ์ Less์ ๊ฒฝ์ฐ less.Promise
์์ฑ์ ๋ง๋ค๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก window.Promise
๋ก ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ Less๊ฐ less.Promise
๋ฅผ ํตํด Promise ํด๋์ค๋ฅผ ์ฌ์ฉํ๋๋ก ํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ต์ ๋ธ๋ผ์ฐ์ ์ฌ์ฉ์์ Less๊ฐ ๋ก๋๋๊ธฐ ์ ์ Promise๊ฐ ์ ์ญ์ ์ผ๋ก ํด๋ฆฌํ๋ ์ฌ์ฉ์๋ ๋ชจ๋ ๊ฒ์ด ๋ง๋ฒ์ฒ๋ผ ์๋ํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ธ๊ณ์ ์ผ๋ก ํด๋ฆฌํ์ ์ํ์ง ์๊ฑฐ๋ ์ด๋ค ์ด์ ๋ก๋ ํ์ฉ๋์ง ์๋ ์ฌ์ฉ์๋ ์์ ์ถ๊ฐ ๋จ๊ณ๋ก ์์
์ ์ํํ ์ ์์ต๋๋ค. ์ค์ ๋ก Less๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ์ ํํ Promise ๊ตฌํ์ less.Promise
์ ์๋์ผ๋ก ํ ๋นํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
@rjgotten @alexlur Less.js์๋ ์ด๋ฏธ Promise
ํด๋ฆฌํ์ด ์ด๋ฏธ ์ค์ ๋์ด ์์ต๋๋ค. ๊ฑฐ๊ธฐ์์ ์ถ๊ฐ ์์
์ ์ํํ ํ์๊ฐ ์์ต๋๋ค. ๋๋ถ๋ถ์ ์ฝ๋๋ ๋ค์ ํจํด์ ์ฌ์ฉํฉ๋๋ค.
๋ ธ๋ ์ธก์์ ์ด ๋ฌธ์ ๊ฐ ์์ง ์ด๋ ค ์์ต๋๋ค. https://github.com/less/less.js/issues/3121
๊ทธ๋ฌ๋ ํผ๋๋ฐฑ์ด ์๊ณ ์๋นํ ์ ๋นํ ์์ ๊ธฐ์ฌ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ํ์ฌ๋ก์๋ Node 4+๊ฐ ๊ฐ ๊ธธ์ด๋ผ๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. ์ด๋ฅผ ๋ฐ์ํ๊ธฐ ์ํด ๋ฌธ์/ํ ์คํธ๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
@matthew-dean ๋ณ๋์ ๋ถ๊ธฐ๋ก ๋ณํฉํ ์ค๋น๊ฐ ๋์ด ์์ด์ผ ํฉ๋๋ค.
@alexlur ๊ฐ์ฌํฉ๋๋ค! ์กฐ๋ง๊ฐ ๋ณด๋ ค๊ณ ํฉ๋๋ค. ์๋ง๋ ๋ค์ ์ฃผ์ ์์ ๊ฒ์ ๋๋ค(๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ ๊ทธ๊ฒ์ ํ์ธํ ์ฌ์ ๊ฐ ์๋ ํ).
์ด ๋ฌธ์ ๋ ์ต๊ทผ ํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ค๋๋ ๊ฒ์ผ๋ก ํ์๋์์ต๋๋ค. ๋ ์ด์ ํ๋์ด ์์ผ๋ฉด ํ์๋ฉ๋๋ค. ๊ทํ์ ๊ธฐ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
TypeScript๋ก ๋ฆฌํฉํ ๋ง ๋ ํฌํฌ ๋ฅผ ๋ง๋ค์์ต๋๋ค.
TypeScript๋ก ๋ฆฌํฉํ ๋ง๋ ํฌํฌ๋ฅผ ๋ง๋ค์์ต๋๋ค.
@glixlur ๐ฎ ์์ฐ, ๋ชจ๋ ํ
์คํธ๊ฐ ํต๊ณผ๋์๋์? ๊ทธ๋ฆฌ๊ณ dist/
์ ๋์ผํ less.js๋ฅผ ๋น๋ํฉ๋๊น?
@matthew-dean ์์ง ์์ ์ค์ด์ง๋ง ๋ธ๋ผ์ฐ์ ์ฉ ๋น๋์๋ ์ผ์ผ ๋๋ผ์ด๋ฒ๋ก์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์์์ต๋๋ค. ๊ธฐ์ ์ ์ผ๋ก ๋กค์ ์ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ ๋ฉด์์ ์ฐ์๋ฅผ ์ ํ ์ ์์ง๋ง ๋ฐฑ์ ํ ๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค.
@less/core ์ผํ์ฑ ๋ณํ์ ์ํด ์ด๊ฒ์ ์๋ํํ ์ ์๋์ง ํ์ธํ๊ธฐ ์ํด ์กฐ์ฌํด์ผ ํฉ๋๋ค. - https://github.com/lebab/lebab
@matthew-dean ์๋ฃ๋๋ฉด ํ ๋ฆฌํ์คํธ๋ฅผ ๋ณด๋ด ๋๋ฆฌ๊ฒ ์ต๋๋ค.
@glixlur ์ค! ์ข์ต๋๋ค. ์ด์ PR ์์ ์๊ฐ์ด ์๋ค๊ณ ํ์ จ์ต๋๋ค. ์์ง ์์ ์ค์ด์๋ผ๋ฉด ๐
@matthew-dean ES6์ผ๋ก ๋ณํํ๋ ๊ฒ์ผ๋ก ์ ํํ๊ณ TypeScript ๋ถ๋ถ์ ๋์ค์ ๋จ๊ฒจ๋๊ฒ ์ต๋๋ค.
@glixlur ์ ์๊ฐ์ ES6์ ์๋ง๋ ๊ฐ์ฅ "์ปค๋ฎค๋ํฐ ์นํ์ "์ผ๋ก ๋์๊ฐ๋ ์ฒซ ๋ฒ์งธ ๋จ๊ณ์ผ ๊ฒ์ด๋ฏ๋ก ์๋ฒฝํฉ๋๋ค. ๋ชจ๋ ์ฌ๋์ด TypeScript๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง ํ์ ํ ์ ์์ง๋ง ES6 ํ๋ฆ์ ํ์คํ ์ข์ ๊ฒ์ ๋๋ค.
@matthew-dean ์ง์๋๋ ๊ฐ์ฅ ๋ฎ์ ํ๋ซํผ์ด Node 6๊ณผ IE11์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๊น?
@glixlur Appveyor๋ ํ์ฌ Node 4๋ฅผ ํ
์คํธํ๋๋ก ์ค์ ๋์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ํฉ์ด ๋ ์ด๋ ค์์ง๊น์? ์ด์์ ์ผ๋ก๋ ๋
ธ๋/๋ธ๋ผ์ฐ์ ์ฉ ๋ฐฐํฌ๋ฅผ ์ํด src/
ํด๋๋ฅผ lib/
(๋ฐ ๋ธ๋ผ์ฐ์ ์ ๊ฒฝ์ฐ dist/
) ํด๋๋ก (๋์ฒด) Babel ๋ณํํฉ๋๋ค. ๊ทธ๋์ ๋๋ Babel์ด ES5๋ก์ ํธ๋์คํ์ผ ์์
์ ๋๋ถ๋ถ์ ํ๊ณ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
์๋ฃ ๋์์ง๋ง ํ ์คํธ๊ฐ ์๋ํ๋๋ก ํด์ผ ํฉ๋๋ค. PhantomJS๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ ES5 ์ดํ์๋ ์ง์ํ์ง ์์ต๋๋ค.
@glixlur ์ข์์ ! Re: PhantomJS, ์ ๋ง๋ก Chromy์ ๊ฐ์ ๊ฒ์ผ๋ก ๋์ฒด๋์ด์ผ ํฉ๋๋ค. ์ฐธ์กฐ: https://github.com/less/less.js/issues/3240
@glixlur ๋ํ ์ด๊ฒ์ Chromy / headless Chrome ๊ด๋ จ์ ๋๋ค. https://github.com/less/less.js/issues/3262
@glixlur PhantomJS ์ ๊ด๋ จํ์ฌ - ํด๋น ํ ์คํธ๋ ๋ฒ๋ค ๋ธ๋ผ์ฐ์ ๋ฒ์ ์ ๋ํด ์คํ๋๋ฉฐ, ์๋ง๋ ES5๋ก ํธ๋์คํ์ผ๋ ๊ฒ์ ๋๋ค. ๋ง์ต๋๊น? PhantomJS๊ฐ ES5 ์ถ๋ ฅ ๋ฒ๋ค๊ณผ ํจ๊ป ์๋ํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
@matthew-dean ์, ํ์ง๋ง Babel ๋ณํ ํ์ผ๋ก PhantomJS๋ฅผ ์คํํ ๋ Symbol
๊ฐ ์ฌ์ฉ๋๋ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค.
@glixlur ํธ๋์คํ์ผ๋ ์ถ๋ ฅ์ babel-polyfill
๊ฐ ํ์ํฉ๋๋ค. ์์ง ์ ๋๋ก ๋ณํ๋์ง ์๊ณ ์๋ค๋ ์ข์ ์งํ์
๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ฐธ์กฐํ์ญ์์ค. https://github.com/babel/babel-preset-env/issues/203
@matthew-dean babel-polyfill
๋ ์ถ๋ ฅ ํ์ผ์ ์ถ์๋ 87.3KB๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๋น์ ์ ์๋ง ๊ทธ๊ฒ์ ์ํ์ง ์์ ๊ฒ์
๋๋ค.
@glixlur
babel-polyfill
์ ์ํ์ง ์๋ ๋ค๋ฅธ ์ด์ ๊ฐ ์์ต๋๋ค. ์ฆ window
Array
๊ฐ์ ๊ธฐ๋ณธ ์ ํ์ ํ๋กํ ํ์
์ ์์ ํ์ฌ ์ ์ญ ๋ค์์คํ์ด์ค์ ์ํฅ์ ๋ฏธ์น๋ค๋ ์ฌ์ค์
๋๋ค.
๋์ babel-runtime
๋ฐ babel-plugin-transform-runtime
ํจํค์ง๋ฅผ ์ดํด๋ณด์ญ์์ค.
๋ํ Babel ํ์ babel-env
์ฌ์ ์ค์ ์ ํ ์ธ์ด ๋ณํ๊ณผ ๋์ผํ ๋ผ์ธ์ ๋ฐ๋ผ transform-runtime
๋ฒ๋ค๋ก ๋ฌถ์ธ ํด๋ฆฌํ์ ์ ํํ๋ ์์
์ ํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋ํ ๊ทธ๋ค์ ์์
์ ์์ง ์๋ฃ๋์ง ์์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ์ด์จ๋ ์์ง ๋ฒ ํ ๋ฒ์ ์ด๋ฏ๋ก ์ง์ ์ ์ผ๋ก ์ ์ฉํ์ง ์์ Babel 7์ผ๋ก ๋๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ๋ฏธ๋์๋ ํ์คํ ๋ฐ๋์งํฉ๋๋ค.
@glixlur @rjgotten ์. re: Babel์ ์ฌ์ฉํ ์๋ฃจ์
์ด ๋ฌด์์ธ์ง ์ ํํ ๋ชจ๋ฅธ๋ค๋ ์ ์ ๋ถ๋ช
ํ ํ์ด์ผ ํ์ต๋๋ค. Symbol
๊ฐ ํด๋ฆฌํ(ํฌ๋ํ?)์ด ์๋๊ธฐ ๋๋ฌธ์ ์ ์๋์ง ์์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด๋ IE11์์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. ๋ฐ๋ผ์ ํด๋ฆฌํ์ด ์๋ ์๋ ์์ง๋ง ์ฌ๋ฐ๋ฅธ Babel ์ค์ ์ ์ฌ์ฉํ๋ฉด ๋ฒ์๊ฐ ์ง์ ๋ Symbol
์ ์๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค. ๊ทธ๋์ ์๋ง๋ ์ต์ ๋ธ๋ผ์ฐ์ ๋ฒ์ ์ด ๋ฌธ์ ์ผ๊น์?
์ฌ๋ฐ๋ฅธ Babel ์ค์ ์ ์ฌ์ฉํ๋ฉด ๋ฒ์๊ฐ ์ง์ ๋
Symbol
์ ์๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค.
์ ๋ง ๊ทธ๋ด ๊ฒ์ด๋ค.
์ด๋ฌํ ์ค์ ์ babel-polyfill
์ ์์กดํ๋ ๋์ $ transform-runtime
ํ๋ฌ๊ทธ์ธ๊ณผ Symbol
์ ๊ฐ์ ์๋ก์ด ๋ด์ฅ ๊ธฐ๋ฅ์ ๋ํ ๋ณ์นญ์ ์ฝ์
ํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
phantomjs๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์์ผ ํฉ๋๊น?
์ฃฝ์๋ค๊ณ ์๊ฐํ๋ฉด?
์๋ง ๊ทธ๋ ์ต๋๋ค.
@glixlur ์ฐธ์กฐ: https://github.com/less/less.js/issues/3240
๋ณํ์ด ์๋ฃ๋๊ณ ๋ณํฉ๋์์ต๋๋ค! ์ฐธ์กฐ: https://github.com/less/less-meta/issues/32
Welp, ์ด๋ฒ ์ฃผ์ JavaScript์ Class
๊ฐ ๋จ์ํ ํจ์ ํ๋กํ ํ์
์ ๋ํ ๊ตฌ๋ฌธ ์คํ์ด ์๋๋ผ ์ด ๋ฌธ์ ๋ฅผ ์ผ์ผ์ผฐ๋ค๋ ๊ฒ์ ๋ฐฐ์ ์ต๋๋ค: https://github.com/less/less.js/issues/3414
์์ด๋ฌ๋ํ๊ฒ๋ ๋๋ 2์ฃผ ์ ์ Less์ ๊ด๋ จ์ด ์๋ ๋ ๋ค๋ฅธ ์ฝ๋๋ก ๋๊ฐ์ ์ผ์ ๊ฒช์๊ณ ๊ทธ ์๊ฐ์ ๋ถ๋ช ํ ๊ธฐ์ตํฉ๋๋ค.
์ด๋ฐ, Less์ ๋ํ ES6 ๋ณํ์ด ์ด๋ฌํ ์ ํ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋์ง ๊ถ๊ธํฉ๋๋ค.
์: ์ง๋ฌธ์ ๋ต์ด ๋์จ ๊ฒ ๊ฐ์๋ฐ์?
๋๋ @matthew-dean๋, ๋น์ ์ ์์
์ ๋ถ๋ง์ ์์๋ถ๋ ํญํ์ฐ๋ฅผ ๋ถ๋ฌ์ํ์ง ์์ต๋๋ค. ๋น์ ์ ๊ทธ ์ํฉ์ ์ฒ๋ฆฌํด์ผ ๋ด ๋์ ์ด ์์ต๋๋ค. :์๋ค:
์ด ์ข๊ฒ๋ ์๋ฌด๋ ์ข
๋ง์ ๊ณ ํ์ง ์์๊ณ ์ง์ ์๊ฒ ์ฒ๋ฆฌ๋ ๊ฒ ๊ฐ์ต๋๋ค.
@rjgotten lol ๋ด ๋ง์, ์ด๋ป๊ฒ ๊ทธ๋ฐ ๊ฒ์ ์์ํ ์ ์๋จ ๋ง์ธ๊ฐ? ๊ฐ์ฅ ์์ ํ ๋ฐฉ๋ฒ์ ์ ํ ๋ณํํ์ง ์๊ฑฐ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด์ง๋ง ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ ์ฅํฉํ๊ฒ ๋ง๋ญ๋๋ค(์, ์ ์ฌ์ ์ผ๋ก ๋ ์ ๋ฆฌํ ๊ธฐํ๊ฐ ๋ง์ต๋๋ค). ๊ธฐ์ ์ ์ผ๋ก (๊ณผ๊ฑฐ) Less์ less-loader
ํตํฉ์ API๋ฅผ ์๋ชป ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์(๋ฌธ์ํ๋์ง ์์/์ง์๋์ง ์๋ API ์ฌ์ฉ ์ฌ์ฉ) ์ด๋ ๊ทธ๋ค ๋ถ๋ถ์ ์ค์์์ต๋๋ค. ๋น๋ ์คํจ๋ฅผ ์ผ์ผํค๋ ๋น์ฃผ์ ํฌ์ธํธ ๋ฆด๋ฆฌ์ค.
์๋ฅผ ๋ค์ด ๋๊ตฐ๊ฐ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋กํ ํ์ ์ ํดํนํ๋ ๊ฒฝ์ฐ ๋ฐฉ์ด์ ์ผ๋ก ์ฝ๋ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
๐คทโโ
@rjgotten
๊ธฐ์ ์ ์ผ๋ก, ๋๋ ๋ณํ ํ ๋ ๊ฐ์ ๋ฒ ํ ๋ฒ์ ์ ์ถ์ํ์ง๋ง... ์๋ฌด๋ ๊ทธ๋ค์ ํ์ดํ๋ผ์ธ์ Less ๋ฒ ํ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์ต๋๋ค. ๋ฐ๋ผ์ Less์ ํตํฉ๋๊ณ ํ ์คํธ๋ฅผ ์คํํ๋ 800,000๊ฐ์ ์ ์ฅ์๋ฅผ ํ ์คํธํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. NPM ์ข ์์ฑ์ ์ฌ์ฉํ๋ฉด ์ค์ ๋ก ๊ฑฐ๊ธฐ์ ๋๊ณ ๋ฌด์์ด ์ค๋จ๋๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
๋ฏธ๋์ ์ฐ๋ฆฌ๊ฐ ํ ์ ์๋ ํ ๊ฐ์ง๋ ํ ์คํธ์ ๋ ํฐ Less ์ข ์ ํญ๋ชฉ์ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค.
๋ด๊ฐ ํ ์ ์์๋ ๋ ๋ค๋ฅธ ์ผ์ ๊ทธ๊ฒ์ ๋ฉ์ด์ ๋ฒ์ ์ผ๋ก ์ถ์ํ๋ ๊ฒ์ด์ง๋ง.... ๊ธฐ์ ์ ์ผ๋ก (์๋์ ์ธ) ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ต๋๋ค. ์ฆ, ์ง์๋๋ ๊ธฐ๋ฅ์ด ๋์ผํ๊ณ ์ผ๋ถ ๋ฒ๊ทธ ์์ ์ด ํฌํจ๋์ด ์์ต๋๋ค. .. ๋๋ ๋ชฐ๋ผ, ์ด๊ฒ์ ๊น๋ค๋ก์ด ๊ฒ์ด์๋ค.
์. ๊น๋ค๋ก์ด ์ผ์ด์์ต๋๋ค.
.next
ํ๊ทธ์ ๋ฌด์ธ๊ฐ๋ฅผ ์ถ๊ฐํ๊ณ ์ฌ๋๋ค์ด ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋ ํ์ดํ๋ผ์ธ์ ํ
์คํธํ๋๋ก ์๋ฆด ์ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ณผ๊ฑฐ์ ๊ฒฝํ์ ๋ฐ๋ฅด๋ฉด ๊ทธ๋ฐ ์ข
๋ฅ์ ์ผ์ ์ผ๋ฐ์ ์ผ๋ก ๋ค๋ฆฌ์ง ์์ต๋๋ค.
์ด๋ ์ชฝ์ด๋ , ๋ฉ์ด์ ๋ฒ์ ์ด๋ ์๋๋ , ๋น์ ์ ์๋ง๋ "ํ๋ฒ ํด๋ณด๊ธฐ"๋ง ํ๊ณ ๋ฌด์์ด ์ค๋จ๋๋์ง ๋ณผ ์๋ฐ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
ํ์ง๋ง ์คํดํ์ง ๋ง์ญ์์ค. ๋ฆฌํฉํฐ๋ง์ ๋งค์ฐ ์ข์ ๊ธฐ๋ฅ์ ๋๋ค. ์์ผ๋ก ๋์๊ฐ๋ฉด ์ผ๋ฐ์ ์ผ๋ก ์ ์ง ๊ด๋ฆฌ ๋ถ๋ด์ด ์ค์ด๋ค ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด ๋๊ตฐ๊ฐ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋กํ ํ์ ์ ํดํนํ๋ ๊ฒฝ์ฐ ๋ฐฉ์ด์ ์ผ๋ก ์ฝ๋ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
๋น์ ์ ๋ง ๊ทธ๋๋กํ์ง ์์ต๋๋ค.
์ฌ๋๋ค์ด C#์ ๋น๊ณต๊ฐ ๋ฉค๋ฒ์ ์ก์ธ์คํ๊ธฐ ์ํด ์ ์คํ๊ฒ ์กฐ์ ๋ ๋ฐํ์ ๋ฐฉ์ถ IL์ด ๋ถ ๋ฆด๋ฆฌ์ค์์ ์ค๋จ๋๋ค๊ณ ๋ถํํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ๋ด๋ถ ๋ฌธ์ ์ ๊ฐ์ญํ๋ ๊ฒฝ์ฐ ๊ตฌ๋งคํ๋ ค๋ ํญ๋ชฉ์ ์์์ผ ํฉ๋๋ค. :์๋ค:
@rjgotten ๋ฆฌํฉํ ๋ง์ ๋ํด ๋งํ์๋ฉด...
..... Less ์ฝ๋๋ฒ ์ด์ค์์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ฐ๊ฒฌํ ๊ฒ ์ค ํ๋๋ AST์ ๊ฐ์ฒด์ ์ฝ๊ฐ/๋ฏธ๋ฌํ ๋์ฐ๋ณ์ด๊ฐ ์๋ ๊ณณ์ด ์ฌ๋ฌ ๊ณณ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์ ์ ์์ฑ์ด ์์ต๋๋ค/์ฌ๊ธฐ์ ์ธ์คํด์ค์ ๋ฉ์๋๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. JavaScript์์๋ ์ํ๋ ๋๋ก ์ธ์ ๋ ์ง ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ณํฉํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ด ์์ ์ ์ํํ ์ ์ด ์์์ ์์ ํ ์ธ์ ํฉ๋๋ค. ํด๋น ์์ฑ์ ๋ฌธ์ํ/์ ์ํ๋์ง ์ฌ๋ถ.
TypeScript์ ์ต์ JS๊ฐ ๋ต์ด ๋ ๊ฒ์ธ์ง์ ๋ํ ํ ๋ก ์ด ์์์ต๋๋ค. ์ ํ์ด๋ ๋ช ํํ ๊ฐ์ฒด ์ธํฐํ์ด์ค๊ฐ ์์ผ๋ฉด ๋ฌธ์์ ์์ด ๋ง์ง ์๊ฑฐ๋ JSDoc์ผ๋ก๋ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ์์ผ๋ก Less ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ถ๋ก ํ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค.
JSDoc์ ์ ์ ํ ์ ํ์ด ์๋ ๊ฒฝ์ฐ TypeScript linting์ ํ์ฉํ๋๋ก ์ ํ์ดํ๋ผ์ธ์ ์ค์ ํ์ง๋ง ์ ๋ ฅ์ JSDoc์ ์ฌ์ฉํ๋ ๊ฒ์ TypeScript๋ณด๋ค ๋ ์ฅํฉํ๊ณ ์๊ฐ์ ์ผ๋ก ์๋๋ฝ๊ณ TS๊ฐ JSDoc ์ฃผ์๋ง์ผ๋ก๋ ์ง์ํ์ง ์๋ ์ผ๋ถ ์ ๋ ฅ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. . TS๊ฐ ๋ฌด๋ฃ๋ก ์ ๊ณตํ๋ ์ด๋ฌํ ๋ฌธ์ ์ค ์ผ๋ถ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋๊ตฌ์ JSDoc/ESLint ์กฐํฉ์ ์์ต๋๋ค.
๊ทธ๋์ ์ ๊ฐ ๋งํ๊ณ ์ ํ๋ ๊ฒ์ ์๋ ์ TypeScript๋ฅผ ํฌ๊ฒ ์ฌ์ฉํ๊ณ Less ์ฝ๋๋ฒ ์ด์ค์์ ๋ช ๋ ์ ๋ณด๋ธ ํ Less๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ํ์ ํ๋ ํผ๋/์ ๋ง/ํ์ต ๊ณก์ ์ 95%๋ผ๊ณ ๋งํ ์ ์์ต๋๋ค. ๊ฐ์ฒด์ ์ปดํ์ผ ํ์ ์ ํ์ด ์ ์ฉ๋ ๊ฒฝ์ฐ ํผํ์ต๋๋ค. ์ ๋ ์ข ์ข ์ค๋จ์ ์ ์ค์ ํ๊ณ ํ์ผ์ ์ ์๋ ๋ฐฉ์ ๋์ ๊ฐ์ฒด์ ์์ฑ์ด _actually_ ๋ฌด์์ธ์ง ํ์ ํ๋ ๋ฐ๋ง ๋๋ฒ๊ฑฐ์์ ๋ง์ ์๊ฐ์ ๋ณด๋์ต๋๋ค.
์๋ฅผ ๋ค์ด ํ๊ฐ ์ค์ Ruleset
๋
ธ๋์ paths
์์ฑ์ ์์กดํ๋ Less์๋ ์ฌ๋ฌ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ์ด ์์ฑ์ ์์ paths
์์ฑ์ด ๋ฌด์์ธ์ง, ์ด๋ค ๋ชจ์์ ๊ฐ๊ฒ ๋ ์ง ์๋ ค์ฃผ์ค ์ ์๋์? (ํํธ: ๊ฑฐ๊ธฐ์ ์๊ธฐ ๋๋ฌธ์ ํ ์ ์์ต๋๋ค.)
TypeScript(๊ณตํต tsconfig ์ค์ ์ฌ์ฉ)์์๋ ์ด๊ฒ์ด ํ์ฉ๋์ง ์์ต๋๋ค. ์ปดํ์ผ์กฐ์ฐจ ๋์ง ์์ ๊ฒ์
๋๋ค. paths
์ ๋ชจ์์ ์ง์ ํด์ผ ํ๊ณ ๊ทธ ์์ ์ ํํ ๋ฌด์์ด ๋ค์ด๊ฐ์ง ์ง์ ํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ํ์ํ๋ ์ฌ๋์๊ฒ ๋ช
ํํ๊ณ ๊ตฌ์ฒด์ ์ธ ๋ฌธ์(๋ฐ ์ฝ๋ ํํธ)๊ฐ ์ ๊ณต๋ฉ๋๋ค.
๊ทธ๋์ ์ ๋ ์ด ์์ ์์ "TypeScript๋ ๊ณ ๋ คํด์ผ ํ ๋์์ ๋๋ค"๋ผ๋ ์๊ฐ์์ "๊ณต๊ฐ ํ๋ก์ ํธ๊ฐ TypeScript์ ์์ผ๋ฉด ํฐ ๊ธฐ์ ์ ๋ถ์ฑ๊ฐ ์๋ ๊ฒ์ ๋๋ค."๋ผ๋ ์๊ฐ์ผ๋ก ๋ฐ๋์์ต๋๋ค. ๋๋ ๋ณธ์ง์ ์ผ๋ก ์๋น ๊ฐ๋ฅ์ฑ๊ณผ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅ์ฑ์ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋๊ธฐ ๋๋ฌธ์ ์คํ ์์ค ์ ์ฅ์ ์์ด๋ ์์ํ์ง ์์ ๊ฒ์ ๋๋ค. ์ฌ์ ํ ๋ช ํํ ๋ฌธ์๊ฐ ํ์ํ์ง๋ง ์ต์ํ ๋งค์ฐ ๋ช ํํ๊ณ ์์ง๋ ฅ ์๋ ์ฝ๋ฉ์ ์ํํฉ๋๋ค.
์ฌ๊ธฐ์์ ์ด๋๋ก ๊ฐ์ผํ ์ง, ์์ผ๋ก์ ๊ณ ์ถฉ์ ์๋ฐฉํ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํ๋ ๊ฒ์ ๋๋ค.
_( ๋ถ๋ก : ๋ช ํํ์ง ์์ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ์ ๋ Less ์ฝ๋๋ฒ ์ด์ค์์ ๋ค๋ฅธ ์ฌ๋์ ์ญ์ฌ์ ์์ ์ 100% ๋น๋ํ์ง ์์ต๋๋ค. ์ ๊ฐ ์ ์ํ๊ณ , ์น์ธ์ ๋ฐ๊ณ , ์ฝ๋๋ฒ ์ด์ค์ ๋ณํฉ๋ ๋ง์ ๊ฒ๋ค์ด ์์ต๋๋ค. "์, ๊ทธ๋ ๊ฒ ํ์ง ์์๋๋ผ๋ฉด ์ข์์ ํ ๋ฐ." ์๋๋ฉด ๋ค๋ฅด๊ฒ ํ์ผ๋ฉด ์ข์์ ํ ๋ฐ. ๊ทธ๋ฆฌ๊ณ ์ง๊ธ ๋ด๊ฐ ๊นจ๋ซ๊ณ ์๋ ๊ฒ๋ค์ ํ์คํ ์ถ๊ฐํด์ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅ์ฑ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์ณค์ ์๋ ์์ต๋๋ค. ๋ชจ๋๊ฐ ์ต์ ์ ๋คํ์ต๋๋ค.)_
@matthew-dean
JSDoc์ ์ ์ ํ ์ ํ์ด ์๋ ๊ฒฝ์ฐ TypeScript ๋ฆฐํธ๋ฅผ ํ์ฉํ๋๋ก ์ ํ์ดํ๋ผ์ธ์ ์ค์ ํ์ง๋ง ์ ๋ ฅ์ JSDoc์ ์ฌ์ฉํ๋ ๊ฒ์ TypeScript๋ณด๋ค ๋ ์ฅํฉํ๊ณ ์๊ฐ์ ์ผ๋ก ์๋๋ฝ๊ณ TS์์ JSDoc ์ฃผ์๋ง์ผ๋ก๋ ์ง์ํ์ง ์๋ ์ผ๋ถ ์ ๋ ฅ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. . TS๊ฐ ๋ฌด๋ฃ๋ก ์ ๊ณตํ๋ ์ด๋ฌํ ๋ฌธ์ ์ค ์ผ๋ถ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋๊ตฌ์ JSDoc/ESLint ์กฐํฉ์ ์์ต๋๋ค.
์ค์ ๋ก; JSDoc ์ง์์ด ์ ํ ์ถ๋ก ์ ๋ํด์๋ ๋ง์ฐฌ๊ฐ์ง๋ผ๋ ๋ฌธ์ ๋ฅผ ๊ฒช์์ต๋๋ค.
์ด ์ข๊ฒ๋ .js
.d.ts
์ ์ธ ํ์ผ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. TypeScript ์ ์ฒด๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ปดํ์ผ๋ฌ๊ฐ ํ์ํ์ง ์์ต๋๋ค.
์ ์ธ ํ์ผ๋ก ์์
ํ๋ ๊ฒ์ด ํจ์ฌ ๋ ์ด๋ ค์ ์ง๋ง ์ต์ ๋ฒ์ ์ TypeScript ์ปดํ์ผ๋ฌ๋ .d.ts ํ์ผ๊ณผ .js
ํ์ผ์ด ๋ชจ๋ ์ด๋ฆ์ด ์ง์ ๋์ด ์๋ ํ ์๋์ผ๋ก .d.ts
ํ์ผ์ ๋๋ํ ์ฐ๊ฒฐํฉ๋๋ค. ๋๊ฐ๋ค.
๊ทธ๊ฒ์ด ๋น์ ์ด ์ฐพ๊ณ ์๋ ๊ฒ์ผ ์ ์์ต๋๋ค.
@rjgotten ์ด๊ฒ์ด Less์ ์ฝ๋๋ฒ ์ด์ค์ ์ด๋ป๊ฒ ์ ์๋ํ ์ ์๋์ง์ ๋ํด ์ข ๋ ์ค๋ช
(๋๋ ์ข์ ๋ฆฌ์์ค๋ฅผ ์๊ณ ์๋ ๊ฒฝ์ฐ ๋งํฌ)ํ ์ ์์ต๋๊น? ์์์ ๊ฐ์ด ํ์ผ ์์ค๋ณ๋ก ํ์ผ์์ ์ด ์์
์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์
๋๊น? .js
.d.ts
ํ์ผ์ด ์์ต๋๊น? ์๋๋ฉด ๊ทธ๋ฃนํํฉ๋๊น?
.d.ts
ํ์ผ์ ๊ฐ์ง๊ณ ์๋ ๊ฒ๊ณผ ์์ค์์ TypeScript๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ฅ์ ์ ๋ฌด์์
๋๊น? ํ์ผ์์ ํด๋น ์ ํ์ ์ ์ํ๋ ๋์ .d.ts
ํ์ผ์ ๋ง๋๋ ๋ฐ ์๊ฐ์ ์๋นํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
@rjgotten ์ค๋ Chevrotain ๊ฐ๋ฐ์์ ์ด์ผ๊ธฐ๋ฅผ ๋๋์๋๋ฐ ๊ทธ๊ฐ ํ๋ ์ผ์ TS์์ ๊ฐ๋ฐํ๋ ๊ฒ์ด๋ผ๊ณ ํฉ๋๋ค. ํ์ง๋ง ์ค์ ๋ก๋ api.d.ts
ํ์ผ์ ๋ณ๋์ ๊ด์ฌ์ฌ๋ก ๊ด๋ฆฌํ๊ณ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์์ค ํ์ผ์ ์ ํ ๋ณ๊ฒฝ(์: ํธ๋ฆฌ ๋
ธ๋)์ด API ์ ํ ํ์ผ์ ๋ช
์์ ๋ณ๊ฒฝ ์์ด ๊ณต๊ฐ API๋ฅผ ํฌ๋ช
ํ๊ฒ/๋ณด์ด์ง ์๊ฒ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ๊ทธ๋ ๋ด๋ถ ์ ํ๊ณผ ๊ณต๊ฐ API ์ ํ์ด ์ผ์นํ๋ค๋ ์ฃผ์ฅ๊ณผ ํจ๊ป ํ ์คํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค. -> https://github.com/SAP/chevrotain/blob/master/packages/chevrotain/test_integration/definitions/api_type_checking.ts#L1 - L2
Chevrotain์ ๋ฐฉ์์ ๊ณต๊ฐ API๊ฐ ์ค์๋ก ๋ณ๊ฒฝ๋์ง ์๋๋ก ํ๋ ์ข์ ๋ฐฉ๋ฒ์ ๋๋ค. ํด๋น ์์ค์ ๋ณดํธ๊ฐ ํ์ํ๋ค๊ณ ์๊ฐ๋๋ ๊ฒฝ์ฐ ๋งค์ฐ ๊ฐ๋ ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฝ๊ฐ์ ์ค๋ฒํค๋๋ ๋ฐ์ํฉ๋๋ค.
.js
ํ์ดํ์ ๋ด๊ธฐ ์ํ $ .d.ts
์ ์ธ ํ์ผ์ ์ฌ์ฉ์ ๊ดํ์ฌ:
์ฌ์ค ๋ ๋ค์
๋๋ค.
๋๋ํ ์งํํ๋ฉด ์๋ ์ ์, ๋ฆฐํ
๋ฑ์ ์ํด TypeScript ์ปดํ์ผ๋ฌ๊ฐ ์ง์ํ๋ ๋ชจ๋ IDE๊ฐ ์๋์ผ๋ก ์
๋ ฅ์ ์ ํํฉ๋๋ค. Afaik _๋ํ_ ๋๋ํ ์
๋ ฅํ๋ ์คํฌ๋ฆฝํธ๋ฅผ node_modules
์์ ๊ฐ์ ธ์ค๋ฉด ๊ฝค ์ข์ต๋๋ค.
api.d.ts
์ ๊ฐ์ ๋จ์ผ(์ธํธ) .d.ts
ํ์ผ์ ์
๋ ฅํ ๋ค์ JSDoc์ ์ฌ์ฉํ์ฌ ์ ์ธ๋ ์ ํ์ ๋ช
์์ ์ผ๋ก ๊ฐ์ ธ์ฌ ์๋ ์์ต๋๋ค. TypeScript์ JSDoc ์ง์์๋ ๊ฐ์ ธ์ค๊ธฐ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ํน์ํ @typedef
๊ฐ ์์ต๋๋ค. ์
/**
* <strong i="17">@typedef</strong> {import("../api.d.ts").MyType } MyType
*/
ํจํค์ง๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ ์ ํธ๋์คํ์ผ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ผ ํ๋ ๊ฒฝ์ฐ ๋จ์ผ ๋ฒ๋ค ํ์ดํ ํ์ผ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ์ค์ ๋ก require()
๋๋ import {}
๊ฐ ๋๋ ๊ฒ์ ๋ ์ด์ ์๋ณธ ์์ค ํ์ผ์ด ์๋๋๋ค. ์ฆ, ๋๋ํ ์
๋ ฅํ๋ ๊ฒ์ ์ด์ ์ ์ป์ง ๋ชปํ ๊ฒ์
๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ณํ์ด ์๋ฃ๋๊ณ ๋ณํฉ๋์์ต๋๋ค! ์ฐธ์กฐ: https://github.com/less/less-meta/issues/32