Less.js: ES6 ๋ฐ ๋กค์—…

์— ๋งŒ๋“  2015๋…„ 09์›” 14์ผ  ยท  62์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: less/less.js

(์‹œ๊ฐ„์ด ๋œ๋‹ค๋ฉด) ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

  • [x] ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ es6/์œผ๋กœ ์ด๋™
  • [x] es6/์„ es5/ ํด๋”๋กœ ๋ณ€ํ™˜
  • [x] ๋กค์—… ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ € ๋‹จ์ผ ํŒŒ์ผ ๋นŒ๋“œ

๊ทธ๊ฒƒ์€ ์ƒˆ๋กœ์šด ์ฃผ์š” ๋ฆด๋ฆฌ์Šค๊ฐ€ ๋  ๊ฒƒ์ด๋ฉฐ ๋‹ค๋ฅธ ๋ฌธ์ œ์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋ธŒ๋ผ์šฐ์ € ๋ฒˆ๋“ค ์•ฝ์†๋„ ์ œ๊ฑฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์„ํ•˜๊ธฐ ์ „์— ์–ด๋–ค ์ด์˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” require(๋กค์—…์šฉ) ์ด์™ธ์˜ ๋ชจ๋“  ๊ฒƒ์„ es6์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ์›ํ•˜๋Š” ๊ฒฝ์šฐ es6์„ ๋ฐฐ์šฐ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ less.js "์—…๊ทธ๋ ˆ์ด๋“œ"๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


_Update by @matthew-dean -- ๋‚˜๋Š” ๊ฒฐ๊ตญ lib/ ๋ฅผ ๊ฐ™์€ ํด๋”์— ๋ณด๊ด€ํ•˜์—ฌ git ๊ธฐ๋ก์„ (์ผ๋ถ€?) ์œ ์ง€ํ•˜๊ณ , ๋™์‹œ์— ํŠธ๋žœ์ŠคํŒŒ์ผ(์—…-ํŠธ๋žœ์ŠคํŒŒ์ผ?)ํ•˜๋Š” ๋Œ€์‹  ์ด๋™ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์€ es5/ ๋˜๋Š” ์ด์— ์ƒ์‘ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ปดํŒŒ์ผ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  Node 6+์šฉ CommonJS ๋‹จ์ผ ํŒŒ์ผ ๋นŒ๋“œ์™€ ๋ธŒ๋ผ์šฐ์ € ๋นŒ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค._

feature request high priority

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

๋ณ€ํ™˜์ด ์™„๋ฃŒ๋˜๊ณ  ๋ณ‘ํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ์ฐธ์กฐ: https://github.com/less/less-meta/issues/32

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

์•„๋‹ˆ์š”. ๋‚˜๋Š” ์ž ์‹œ ๋™์•ˆ ๊ฐ™์€ ๋ผ์ธ์„ ๋”ฐ๋ผ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์ฝ”๋“œ ํžŒํŠธ/์‹ค์ œ ๊ฐœ์ฒด ์—ฐ๊ฒฐ์„ ๊ฐ–๋Š” ๊ฒƒ์ด ๊ฐœ๋ฐœ/๊ธฐ์—ฌ๋ฅผ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ง€์‹ ๋ถ€๋‹ด/์žฅ๋ฒฝ์„ ์ค„์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ.

๋‚˜๋Š” ๋˜ํ•œ ํŒŒ์‹ฑ/AST์— es6 ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•œ ๋‹ค์Œ https://github.com/Benvie/harmony-collections์™€ ๊ฐ™์€ es5 ๋นŒ๋“œ์— ํด๋ฆฌํ•„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋งฅ๋ฝ์—์„œ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. es6 ํ™˜๊ฒฝ(์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ˜„์žฌ Node.js)์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๊ฐ์†Œํ•˜๊ณ  AST ๊ตฌ์„ฑ์ด ๋นจ๋ผ ์ด๋ก ์ ์œผ๋กœ ๊ตฌ๋ฌธ ๋ถ„์„/ํ‰๊ฐ€ ์†๋„๊ฐ€ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค.

TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์ฝ”๋“œ ํžŒํŠธ/์‹ค์ œ ๊ฐœ์ฒด ์—ฐ๊ฒฐ์„ ๊ฐ–๋Š” ๊ฒƒ์ด ๊ฐœ๋ฐœ/๊ธฐ์—ฌ๋ฅผ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ง€์‹ ๋ถ€๋‹ด/์žฅ๋ฒฝ์„ ์ค„์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ.

ES6 ์ดํ›„์—๋Š” typescript๋„ es6 ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ์ด๊ธฐ ๋•Œ๋ฌธ์— es6์ด typescript๋ฅผ ๋ฐฐ์ œํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ดํ›„ ์ถ”๊ฐ€ ๋‹จ๊ณ„๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์ƒ๋‹นํ•œ ์ถ”๊ฐ€ ์ž‘์—…์ด๋‚˜ ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•˜์ง€ ์•Š๋Š” ํ•œ typescript๋ฅผ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. IMO ํƒ€์ดํ”„์Šคํฌ๋ฆฝํŠธ

  • + typescript๋ฅผ ๋” ์‰ฝ๊ฒŒ ์•„๋Š” ์ƒˆ๋กœ์šด ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ๊ฐœ๋ฐœ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • + ์œ ์ง€๋ณด์ˆ˜์„ฑ ์ฆ๊ฐ€

    • ์‚ฌ๋žŒ๋“ค์ด ์ตœ์†Œํ•œ์˜ ํƒ€์ดํ”„์Šคํฌ๋ฆฝํŠธ๋ฅผ ์•Œ๊ฑฐ๋‚˜ ๋ฐฐ์›Œ์•ผ ํ•จ


    • ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ํŒŒ์‹ฑ/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/blob/55380d49e96a6ed561cac4d13a774830aa3c17a3/lib/less/import-manager.js#L5

๋…ธ๋“œ ์ธก์—์„œ ์ด ๋ฌธ์ œ๊ฐ€ ์•„์ง ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/less/less.js/issues/3121

๊ทธ๋Ÿฌ๋‚˜ ํ”ผ๋“œ๋ฐฑ์ด ์—†๊ณ  ์ƒ๋‹นํžˆ ์ ๋‹นํ•œ ์–‘์˜ ๊ธฐ์—ฌ์ž๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ๋กœ์„œ๋Š” Node 4+๊ฐ€ ๊ฐˆ ๊ธธ์ด๋ผ๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์„œ/ํ…Œ์ŠคํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@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 {} ๊ฐ€ ๋˜๋Š” ๊ฒƒ์€ ๋” ์ด์ƒ ์›๋ณธ ์†Œ์Šค ํŒŒ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ฆ‰, ๋‚˜๋ž€ํžˆ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์˜ ์ด์ ์„ ์–ป์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

๊ด€๋ จ ๋ฌธ์ œ

heavyk picture heavyk  ยท  3์ฝ”๋ฉ˜ํŠธ

Oskariok picture Oskariok  ยท  6์ฝ”๋ฉ˜ํŠธ

renoth picture renoth  ยท  6์ฝ”๋ฉ˜ํŠธ

awebdev picture awebdev  ยท  4์ฝ”๋ฉ˜ํŠธ

chricken picture chricken  ยท  6์ฝ”๋ฉ˜ํŠธ