ํ๋ก์ ํธ์ ๋น๋ ํ๋ก์ธ์ค ์ค์ ์ฝ 80๊ฐ์ Less ๋น๋๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ๊ณ Less.js์ ์ ๋ฒ์ ์ด ๋๋ฌด ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋๊ฐ ์ถฉ๋ํ๊ธฐ ๋๋ฌธ์ ๋น๋๊ฐ ์ต๊ทผ์ ์คํจํ๊ธฐ ์์ํ์ต๋๋ค. ์ฐ๋ฆฌ๋ Less.js์์ 3.9.0์์ 3.10.3์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ๋ ๋์ ์ถฉ๋์ ์ถ์ ํ์ต๋๋ค.
ํ์ผ์ ์์ฐจ์ ์ผ๋ก ์ปดํ์ผํ๋๋ก Less ์คํฌ๋ฆฝํธ๋ฅผ ๋ณ๊ฒฝํ๊ณ (ํ ๋ฒ์ 2๊ฐ์ ํ์ผ ๋น๋) ํ๋ก์ธ์ค ์ค์ Node์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ํ๋งํ์ฌ ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ์ป์์ต๋๋ค.
Less.js๋ ํ์ฌ 130% ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ ์ปดํ์ผํ๋ ๋ฐ ์ฝ 100% ๋ ์ค๋ ๊ฑธ๋ฆฝ๋๋ค.
Less.js๋ฅผ ๋ฒค์น๋งํนํ๋์ง ๊ทธ๋ฆฌ๊ณ ๋น์ทํ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋๋์ง ๊ถ๊ธํฉ๋๋ค.
๊ทธ๊ฑฐ ์ด์ ํ๋ค. ๋น์ ์ ๋ ธ๋ ๋ฒ์ ์ ๋ฌด์์ ๋๊น?
@PatSmuk360 3.10.0์ ๋ฉ๋ชจ๋ฆฌ ํ๋กํ์ ํ ์คํธํ๊ณ ๊ฐ์ ธ์์ ๋ค๋ฅธ์ง ํ์ธํ ์ ์์ต๋๊น?
์ต์ ๋ฒ์ ์ 10(10.16.3)์ ์คํํ๊ณ ์์ต๋๋ค.
์ด์ ํ ์ค๋ ์ท:
๋ค์ ์ดํ์ ํ ์ค๋ ์ท:
๋ํ Node 12.10.0์์ ์๋ํ๋๋ฐ ์์ฐจ ๋น๋์ ํ ์ง์ ์์ 587MB์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋๋ฌํ์ฌ ํจ์ฌ ๋ ๋๋น ๋ณด์ ๋๋ค.
์ด์ CPU ํ๋กํ:
CPU-20190916T133934.cpuprofile.zip
๋ค์ ์ดํ์ CPU ํ๋กํ:
CPU-20190916T134917.cpuprofile.zip
@PatSmuk360 ๋ฐ๋ผ์ ๊ธธ๊ณ ์งง์ ๊ฒ์ ํด๋น ๋ฒ์ ์ ์ฐจ์ด์ ์ ์ฝ๋๋ฒ ์ด์ค๊ฐ ES6 ๊ตฌ๋ฌธ์ผ๋ก ๋ณํ๋์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ ๊ธฐ์ ์ ์ผ๋ก ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋๋ฏ๋ก ์ฃผ์ ๋ฒ์ ์ด ์๋๋๋ค.
ํ์ง๋ง... ๋ด ์์ฌ์ ๊ฐ์ฒด/๋ฐฐ์ด ํ์ฐ ๊ตฌ๋ฌธ๊ณผ ๊ฐ์ ๊ฒ์ ๋ํ ์ผ๋ถ Babel ๋ณํ์ด ๋ ์ฅํฉํ ES5 ๋ฒ์ ๋ณด๋ค ๋ ํจ์จ์ ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ์๋ Node 6 ์ด์๊ณผ ํธํ๋๋ ํธ๋์คํ์ผ ํจํค์ง๋ฅผ ๋ด๋ณด๋ด๊ณ ์์์ง๋ง ํด๋์ค ๊ตฌ๋ฌธ์ ์ฒ๋ฆฌํ ์ ์๋ ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํตํฉ์ด ์ค๋จ ๋์๊ธฐ ๋๋ฌธ์ 3.10.0์ ํ ์คํธํ ์ ์๋์ง ๋ฌป๋ ์ด์ ์ ๋๋ค. ๊ทธ๋์ ํด๋์ค ๊ตฌ์ฑ์ด ์๋ ๋ ธ๋ 4๋ก ์ด๋ํ์ต๋๋ค.
์ด๋ค ES5 ๋ณํ์ด ์ ๋๋ก ์ํ๋์ง ์๋์ง ์ ํํ ํ์ ํ ์ ์๋ค๋ฉด ์ด๋ก ์ ์ผ๋ก ๋ ์ฑ๋ฅ์ด ์ข์ ๋ด๋ณด๋ด๊ธฐ๋ก ์ด๋ฌํ Babel ๋ด๋ณด๋ด๊ธฐ ์ค์ ์ ๋ ์ธ๋ถํํ ์ ์์ต๋๋ค.
@PatSmuk360 ๋ง๋ถ์ฌ์, ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๋ ๊ทธ split
ํจ์๋ ๋ฌด์์
๋๊น?
@matthew-dean String.prototype.split
๊ฒ ๊ฐ์ต๋๋ค. chrome devtools์์ ํ๋กํ์ ์ด๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์์์ผ๋ก ๊ตฌ๋ถ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๋ณ๋ชฉ ํ์์ ๊ฒ์ฌํ๊ธฐ ์ฝ๋๋ก ํ๋กํ์ https://cdn.jsdelivr.net/npm/[email protected]/dist/less.cjs.js
์์ค๋ก ๋งํฌํ๋๋ก ๋ณ๊ฒฝํ๋ ค๊ณ ํฉ๋๋ค. *.cjs.js
~ *.js
ํ์ผ์ ์ฌ์ฉํ ์ ์๋ ์์ค ๋งต์ด ์์ต๋๊น? https://cdn.jsdelivr.net/npm/[email protected]/dist/less.min.js.map
ํ์ผ์ .min
ํ์ผ์ ES6 ์์ค์ ๋งคํํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฒ์ญ์ด ๋ณ๋ชฉ ํ์์ ์ผ์ผํค๋ ์์น๋ฅผ ํ์
ํ ์ ์๋๋ก ์์ค ๋งต์ ๊ฐ๋ฐ ๋๊ตฌ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
ํน์ https://github.com/less/less.js/blob/cae5021358a5fca932c32ed071f652403d07def8/lib/less/source-map-output.js#L78์ ์ด ์ค์ CPU ์๊ฐ์ด ๋ง์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ด ์ํํ๋ ์์ ์ ๊ณ ๋ คํ ๋ ๊ทธ๊ฒ์ ๋์๊ฒ ์ ์ ํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
ํ ํ๋กํ์ ๋ํ ๊ฒฝํ์ด ๋ง์ง๋ ์์ง๋ง ๋์ ๋๋ ๊ฒ์ (closures), (system), (array), system / Context
์ ์์ด ์ฆ๊ฐํ ๊ฒ์
๋๋ค. ์ด๋ฅผ CPU ํ๋กํ์ ์ฐ๊ฒฐํ๋ ค๊ณ ํ๋ฉด ์ด๋ฌํ ๊ฐ์ฒด์ ์ฆ๊ฐ๋ก ์ธํด ๊ฐ๋น์ง ์์ง์ ์์๋๋ ์๊ฐ์ด ํฌ๊ฒ ์ฆ๊ฐํ๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค.
@kevinramharak ์ผ๋ฐ์ ์ผ๋ก _n_ ๊น์ด์ Less์ ๊ฐ์ AST๋ฅผ CSS์ ๊ฐ์ ์ง๋ ฌํ๋๊ณ ํํํ ์ถ๋ ฅ ํธ๋ฆฌ๋ก ๋ณํํ๋ ค๋ฉด ๋ง์ ์์ ๊ฐ์ฒด ์์ฑ์ด ํ์ํฉ๋๋ค. ๋ฐ๋ผ์ ์ด๋ค ์ผ์ด ์ผ์ด๋ ์ ์๋์ง๋ ํน์ ๋ณํ์ผ๋ก ์ธํด ์ถ๊ฐ _x_๋์ ๊ฐ์ฒด๊ฐ ์ถ๊ฐ๋๋ค๋ ๊ฒ์ ๋๋ค. ์ผ์์ ์ผ๋ก๋ผ๋ ๊ฐ ๋ ธ๋๊ฐ 2-3๋ฐฐ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ธฐํ๊ธ์์ ํจ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ๋ ธ๋ ์๋ฅผ ๊ณฑํ๊ณ ๊ท์น์ ํ๋ฉดํํด์ผ ํ๋ ํ์๋ฅผ ๊ณฑํ๋ฉด... ๋ํด์ง๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ES6 ๊ตฌ๋ฌธ์ ๋ณธ์ง์ ์ผ๋ก ES5 ๊ตฌ๋ฌธ์ ๊ตฌ๋ฌธ ์คํ์ผ๋ก ๋ณธ์ง์ ์ผ๋ก ์๊ฐํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์์งํ์ ๊ฒ์ ๋๋ค. (JavaScript ๊ฐ๋ฐ์๋ ์ผ๋ฐ์ ์ผ๋ก ์ด์ ๋ํด ์ ์ฃ์ ๋๋ค.) ์ค์ ๋ก ์๋ก์ด ๊ตฌ๋ฌธ์ ๋ณํํ๋ฉด ์ฑ๋ฅ์ด ์ข์ง ์์ ES5 ํจํด์ด ์์ฑ๋ ์ ์์ต๋๋ค. 99%์ ๊ฐ๋ฐ์์๊ฒ ์ด๊ฒ์ ํฐ ๋ฌธ์ ๊ฐ ์๋๋๋ค. ์๋ํ๋ฉด ๊ทธ๋ค์ ํด๋น ์ฝ๋๋ฅผ ์ด๋น ์๋ฐฑ ๋๋ ์์ฒ ๋ฒ ๋ฐ๋ณตํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋ค๋ฅธ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์๊ธฐ ๋๋ฌธ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง์ ๋ํ ์ ์ถ์ธก์ ๋๋ค.
@kevinramharak Re: ์์ค ๋ผ์ธ - ์ด๋ ์๋ Less ํ์๊ฐ ์ ๋ ฅ์ ํ/์ด์ ์ถ์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ์์ค ๋งคํ์ด ์ถ๊ฐ๋์์ ๋ ์๋ณธ์ ๋งคํํ๋ ๋ฐฉ๋ฒ์ ํ์ ํ๊ธฐ ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๋ ฅ์ ํ์ผ๋ก ์ฒญํฌํด์ผ ํ์ต๋๋ค. ์์ฒ. ์ด๊ฒ์ 4.x+์์ ๋ฌธ์ ๊ฐ ๋์ง ์์ ๊ฒ์ด์ง๋ง, ๊ทธ๊ฒ์ด ์ ๊ทธ๊ฒ์ด ์ง๊ธ ๊ฑฐ๊ธฐ์์ ๋ง์ ์๊ฐ์ ๋ณด๋ด๋์ง ์ดํด๊ฐ ๋ฉ๋๋ค.
๋ธ๋ผ์ฐ์ ์์ less.min.js๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ 3.10.3์ ์ด์ ์ ์ฌ์ฉํ๋ 2.7.3๋ณด๋ค 2๋ฐฐ ๋๋ฆฝ๋๋ค. ํฌ๋กฌ๊ณผ ํ์ด์ดํญ์ค ๋ ๋ค.
@PatSmuk360 ์ด ์ง์ ์ ํ์ธํ ์ ์์ต๋๊น? https://github.com/matthew-dean/less.js/tree/3.11.0
์์ปจ๋, Babel์ ES5๋ก์ ๋ณํ์ ๋ค์ ๋์ฐํ๋ฉฐ ํด๋์ค๋ฅผ ๋ณํํ๊ธฐ ์ํด ์๋ง์ Object.defineProperty ํธ์ถ์ ์ฌ์ฉํฉ๋๋ค. ๋๋ ํจ์ ํ๋กํ ํ์ ์ ์ถ๋ ฅ์ด ํจ์ฌ ๋ ๋์ TypeScript๋ก ๋ณํ์ ์ ํํ์ต๋๋ค.
์ด๊ฒ์ ๋ชจ๋ ํ๋ฅญํ๊ณ ๋ฉ์ง๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๊ฒ ํ ํ Less์ ๋ธ๋ผ์ฐ์ ํ ์คํธ๋ ๋งค์ฐ ์ค๋๋๊ณ ์ค๋๋ PhantomJS๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์คํ๋์ง ์์ผ๋ฉฐ ์ง๊ธ๊น์ง ์๋ฌด๋(์ ๋ฅผ ํฌํจํ์ฌ) PhantomJS์์ ํ ์คํธ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์์์ต๋๋ค. ํค๋๋ฆฌ์ค ํฌ๋กฌ์.
๊ทธ๋ฌ๋ ํ ๋ฒ์ ํ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ํด๋น ๋ถ๊ธฐ์ dist ์์ค์ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๊ฐ ์์ผ๋ฉด ๋ธ๋ผ์ฐ์ ํ ์คํธ๋ผ๋ ํผ๋์ ํด๊ฒฐํ ์ ์์ต๋๋ค.
Less ๋ธ๋ผ์ฐ์ ํ ์คํธ๋ฅผ Headless Chrome์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๋ฐ ์ฑ๊ณตํ์ง๋ง ์ฑ๋ฅ/์์ ์ฑ ์ธก๋ฉด์์ ๋ณํ ํ์ดํ๋ผ์ธ์ Babel์์ TypeScript๋ก ์์ ํ ๋ณ๊ฒฝํ๊ธฐ ๋๋ฌธ์ ์์ ํ๊ฒ ๋ณํฉํ๊ธฐ ์ ์ ์ฌ์ฉ์๋ก๋ถํฐ ๋ง์ ํผ๋๋ฐฑ์ด ํ์ํฉ๋๋ค.
ํ์ฌ ๋ถ๊ธฐ๋ https://github.com/less/less.js/pull/3442 ์์ ์ฐพ์ ์ ์์ต๋๋ค.
์ฌ์ ํ 2.7๋ณด๋ค 2๋ฐฐ ๋๋ฆฝ๋๋ค.
@alecpl ์ข์ ์ ๋ณด์ง๋ง 3.11.0์ด 3.10๋ณด๋ค ๊ฐ์ ๋์๋์ง ์๊ณ ์ถ์ต๋๋ค.
์ด๊ฒ์ ๋ํ ์ด์ํ ์ ์ _์ด๋ก ์์ผ๋ก_ ์๋ Less ์ฝ๋๊ฐ Babel์ ๋ฐ๋๊ฐ ๋์ด์ผ ํ๋ Lebab์ผ๋ก ๋ณํ๋์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ ES5 -> ES6 -> ES5๊ฐ ๊ฑฐ์ ๋์ผํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ์ง๋ง ๋ถ๋ช ํ ๊ทธ๋ ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ES6->ES5 ์ฝ๋๊ฐ ์๋ ES5 ์ฝ๋์ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ์กฐ์ฌํด์ผ ํฉ๋๋ค.
@alecpl
๊ทธ๋์ ์ ๋ ๋ค์ํ ํ ์คํธ๋ฅผ ์คํํ๊ณ Headless Chrome์์ 3.11.0 vs. 3.10.3 vs. 3.9.0 vs. 2.7.3์ ๋ฒค์น๋งํน์ ํ๋ ๋ฐ ์๊ฐ์ ๋ณด๋์ต๋๋ค.
Less ์ปดํ์ผ๋ฌ๊ฐ 2๋ฐฐ ๋๋ฆฐ ๊ฒ์ ๊ณ ์ฌํ๊ณ ๋ชจ๋ ๋ฒ์ ์์ ๋ ๋๋ฆฌ๋ค๋ ์ฆ๊ฑฐ๋ฅผ ์ฐพ์ง ๋ชปํ์ต๋๋ค. 3.10.0์ด ๋ณํ ์ค์ ์ผ๋ก ์ธํด ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๊ฐ ๋ ๋ง๋ค๋ ์ฌ์ค์ด ์ฌ์ ํ ์ฌ์ค์ผ ์ ์์ผ๋ฉฐ, ์์คํ ์ด ๊ณต๊ฐ์ ์ ์ฝ์ ๋ฐ๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์ค์ ๋๋ ๋ ๋ง์ GC๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ ์๋๊ฐ ๋๋ ค์ง ์ ์์ต๋๊น? ํ์ง๋ง ํ์ธํ ์ ์์ต๋๋ค.
3.11.0 ๋ธ๋์น์์ grunt benchmark
๋ฅผ ์คํํ๋ ์์ ์ ํ
์คํธํ ์ ์์ต๋๋ค. ๊ทธ๋ค์ ๊ฐ๋ณ ์คํ์์ ๋ค๋ฅธ ์์น๋ฅผ ๋ณด๊ณ ํ ์ ์์ง๋ง ์ถฉ๋ถํ ์๊ฐ์ ์คํํ๋ฉด ์๊ฐ์ด ๊ฑฐ์ ๋์ผํ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๊ทธ๋์ ๋๋ ๋น์ ์ด ๋น์ ์ ๋ฐ์ดํฐ๋ฅผ ์ป๋ ๊ณณ์ ๋ชจ๋ฆ
๋๋ค.
@PatSmuk360 3.11.0 ์ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๋ฅผ ํ ์คํธํ ์ ์์ต๋๊น?
๋๋ ๋น์ ์ ์ฝ๋๋ฅผ ์ง์ ์์ฑํ์ง ์์ต๋๋ค. ๋๋ nodejs๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. ๋ด๊ฐ ์ธ๊ธํ ๋ ๊ฐ์ง ๋ฒ์ ์ dist ํด๋์์ less.min.js ํ์ผ์ ๊ฐ์ ธ์์ ๋ด ํ์ด์ง์์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ฝ์์์ Less ์ฝ๋๋ก ์ธ์๋ ํ์ด๋ฐ์ ๋ด ๋๋ค. ๋ด ์ ์ ์ฝ๋๋ ์ฌ๋ฌ ํ์ผ์ ์ฌ์ฉํ๊ณ ์ถ๋ ฅ ํ์ผ์ ์ฝ 100kB์ ์ถ์๋ CSS์ ๋๋ค. ๊ทธ๊ฒ์ด "์ค์ํ" ๋ฒค์น๋งํฌ์ ๋๋ค. Roundcube ์ฝ๋์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค.
Chrome์ Firefox๋ณด๋ค ํจ์ฌ ๋น ๋ฅด์ง๋ง ๋ ๋ฒ์ ์ ์ฐจ์ด์ ์ ๋น์ทํฉ๋๋ค.
@alecpl ํ .... ํน์ Less ์ฝ๋์ ๋ํ ํน๋ณํ ์ฐจ์ด์ ์ผ ์ ์์ต๋๋ค. ๊ธฐ์ค์ด ์์์ ์ธ ๊ฒ์ด ์ฌ์ค์ ๋๋ค. ์๊ฐ์ด ์๋ค๋ฉด ๊ทธ Less ํ์ผ์ ๋ฒค์น๋งํน์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค.
์ด ๋ฌธ์ ๋ ์ต๊ทผ ํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ค๋๋ ๊ฒ์ผ๋ก ํ์๋์์ต๋๋ค. ๋ ์ด์ ํ๋์ด ์์ผ๋ฉด ํ์๋ฉ๋๋ค. ๊ทํ์ ๊ธฐ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๋น ๋ฅธ ์ ๋ฐ์ดํธ๋ฅผ ๊ฒ์ํ๊ณ ์ถ์์ต๋๋ค. 3.11.1์ ์๋ํ์ง๋ง 3.10.3๋งํผ ๋๋ ธ์ต๋๋ค. ์ด๊ฒ์ ํ ์คํธ/ํ๋กํ์ผ๋งํ๊ธฐ ์ํ ๋ํ์ ์ธ ๋ฒค์น๋งํฌ๋ฅผ ๋ง๋ค ์ ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
3.11.1๋ก ์
๊ทธ๋ ์ด๋ํ์ผ๋ฉฐ ํ์ฌ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ์๋น ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ ๋นํ ํฌ๊ธฐ์ ํ๋ก์ ํธ๋ webpack ๋ฐ less-loader
ํตํด ๋น๋ํ๋ ๋ฐ ~600MB RAM์ ์ฌ์ฉํฉ๋๋ค.
ํ ํ ๋น ํ์๋ผ์ธ์ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ป์์ต๋๋ค.
Ruleset
์ํด ์ ์ง๋๋ ์์ฒญ๋ ํ ๋น๋์ด ๋ฐ์ํ๊ณ ์์ต๋๋ค.
[ํธ์งํ๋ค]
3.9๋ก ๋ค์ด๊ทธ๋ ์ด๋ํ๊ณ ๊ฑฐ๊ธฐ์์ ํ ํ ๋น ํ์๋ผ์ธ์ ๊ฐ์ ธ์ต๋๋ค. ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ์ ์ ๋ฐ๊ฒฌํ๋์ง ํ์ธํ๋ ค๊ณ ํฉ๋๋ค.
@matthew-dean
ํํธ๋ฅผ ์ฐพ์์ต๋๋ค.
3.11์์ RuleSet์ ๋ํด ๋์ด๋ ๋ณด์ ์ ์ค ํ๋๋ ImportManager์
๋๋ค.
3.9์์๋ _๊ทธ๋ ์ง ์์ต๋๋ค_.
๋ชจ๋ ๊ฒ์ด ImportManager์ ์ํด ํ์ฑ ์ํ๋ก ์ ์ง๋๊ณ ImportManager๋ ์ ์ฒด ์ปดํ์ผ ํ๋ก์ธ์ค์์ ๋จ์ผ ํญ๋ชฉ์ ๋๋ค. ์... ๋ค; ์๋ฌด ๊ฒ๋ ๊ฐ๋น์ง ์์ง๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ํฌ๊ฒ ๋ถํ๋ฆด ์ ์์ต๋๋ค. ์ค๊ฐ ๊ท์น ์งํฉ๋ ์๋๋๋ค.
@rjgotten ํ ....... ๊ฐ์ฒด์ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๊ฐ ์๋ ๊ฒฝ์ฐ GC๋ฅผ ๋ฐฉ์งํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๊ธฐ์ ์ ์ผ๋ก ๋ชจ๋ ๊ฐ์ฒด๋ ํ๋กํ ํ์ ์ฒด์ธ์ ํตํด ๊ณต๊ฐ API ๋ ธ๋์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ์งํฉ๋๋ค. ๋ชจ๋ ๊ท์น ์งํฉ ์ธ์คํด์ค์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ์งํ๋ ์ผ๋ถ ๊ฐ์ฒด๊ฐ ๊ทธ ๋ฐ๋์ธ ๊ฒฝ์ฐ์๋ง GC๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
์๋ชป ์ดํดํ์ ๊ฒ ๊ฐ์ต๋๋ค.
"A๊ฐ B์ ๋ณด์ ์"์ธ ๊ฒฝ์ฐ A๊ฐ B์ ๊ฐ๋น์ง ์์ง์ ๋ฐฉ์งํ๋ B์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ณด์ ํ๊ณ ์์์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ ImportManager๋ฅผ ์์ฑํ์ ๋ ๊ท์น ์ธํธ์ ๋ณด์ ์๋ก ๋์ด๋์์ต๋๋ค. ๋ํ ๊ฒฐ๋ก ์ ์ ํํ ํํํ์ต๋๋ค. ImportManager๋ ๊ท์น ์ธํธ ์ธ์คํด์ค์ GC๋ฅผ ๋ฐฉ์งํ๋ ๊ท์น ์ธํธ ์ธ์คํด์ค์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ณด์ ํฉ๋๋ค.
@rjgotten ์
์ข์์, ์ด ๊ธ์ง์ ์ธ ์์ด๋์ด๋ ์ด๋ป์ต๋๊น?
๋๋ ES6 ๋ณํ์ ์ ์ธํ ๋ชจ๋ ๊ฒ์ ์ฒด๋ฆฌ ํผํน์ผ๋ก ๋ถ๊ธฐ๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ด๊ฒ์ ๊ฐ๋จํ์ง ์์๊ณ ๋ชจ๋ ์์ ์ ํต์ผ๋ก ๋ง๋ค ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ Babelified/Typescript'd ํ์ผ์ด ๊ธฐ์กด ๊ธฐ๋ณธ JS๋ฅผ ๋ฅ๊ฐํ ์ ์๋ค๋ฉด ๊ฐ์น๊ฐ ์์ต๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ git ๊ธฐ๋ก์ ์ด๋ป๊ฒ ์กฐ์ ํ๊ฒ ๋ ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ฌ๊ธฐ์ ๋ถ๊ธฐ -> https://github.com/less/less.js/tree/release_v3.12.0-RC1์ด ์์ต๋๋ค. ์ ํ์ Nukingํ๋ ๊ฒ์ ํฐ ๋ฌธ์ ์ด๋ฏ๋ก ์ด ๋ถ๊ธฐ๊ฐ ๋น๊ตํ ์ ์๋ ํ์คํ ๋ฒค์น๋งํน์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ ๋ณํ๊ฐ ์ด๋ป๊ฒ ๊ฑฐ๊ธฐ์ ๋ค์ด๊ฐ๋์ง ๊ถ๊ธํฉ๋๋ค. ๋ด๊ฐ ํํ ๊ฐ๋ฅ์ฑ์ด ๋๊ฑฐ๋ ES6 ๋ฆฌํฉํฐ์ ๋ํด ๋ญ๊ฐ๊ฐ ์์ด์ ๊ทธ๋ ๊ฒ ํ์ต๋๋ค. ํ์ง๋ง ๊ทธ๋, ๊ทธ๊ฑด ํ์คํ ํ ์ ์์ด! ์กฐ์ฌํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
ํ์คํ ์ด์ํฉ๋๋ค. ๋ด๊ฐ ํด๋ ํ ์ ์์๋ ๊ฒ์ผ๋ก๋ถํฐ ImportManager๋ ES6 ๋ณํ์ ์ํด ์ถ๊ฐ๋ ๊ธ๋ฃจ์ฝ๋/ํด๋ฆฌํ์ ํตํด ๋ฃฐ์ ์ ๋ํ ๋ณด์ ์๋ก ๋๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
์ค๊ฐ์ ๋๋๋ ์๋ฃจ์ ์ด ์ฌ๊ธฐ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ์ฆ, Node.js์ฉ ES6 ๋น๋๋ฅผ ์ ์งํ์ง๋ง ๋ณํ๋ ๋ธ๋ผ์ฐ์ ๋์๋ ์์ต๋๋ค. ES6 ๋ณํ์ด ์ถ๊ฐํ๋ ์ฝ๋ ๋ช ๋ฃ์ฑ์ ์์ ๋ ๊ฒ์ ์์ฒญ๋ ์์ค์ ๋๋ค. ๐ข
@rjgotten
ES6 ๋ณํ์ด ์ถ๊ฐํ๋ ์ฝ๋ ๋ช ๋ฃ์ฑ์ ์์ ๋ ๊ฒ์ ์์ฒญ๋ ์์ค์ ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ ๊ฐ์ง ์ด์ ๋ก ์๊ฐ๋ณด๋ค ๋์์ง ์์ ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ชจ๋ ๊ฒ์ ES5๋ก ๋กค๋ฐฑํ๋ ๊ฒ์ _๋นํธ_ ํ๋ ์ผ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ฌ์์ฑ์ด ์งํ ์ค์ด๋ผ๋ ์ ์ ๊ฐ์ํ๋ฉด ์ดํดํ ๋งํฉ๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ฐ๋ฆฌ๋ ์ด ๊ฒฐ์ ์ ๊ฐ์ง๊ณ ์ผ๋ง๋ ์ค๋ ์ด์์ผ ํ๋์ง๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. @rjgotten์ด ์ธ๊ธํ๋ฏ์ด ์ฐ๋ฆฌ๋ ๋ง์ ์ฝ๋ ๋ช ํ์ฑ์
์ฝ๋๋ฅผ ๊ณต์ ํ ์ํฅ์ด ์๋ ๊ฒฝํ์ด ์๋ ์ฌ๋์ด ์์ต๋๊น? ๋ณ๊ฒฝ ์ฌํญ์ด ๋์์ด ๋๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋๋ก ์ค์ ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒค์น๋งํนํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ์ป์ ์ ์๋ค๋ฉด ๋ณ๋ชฉ ํ์์ด ์์ ์ ์๋ ๊ณณ์ ์ขํ๋ ค๊ณ ๋ ธ๋ ฅํ๋ ๋ฐ ๋์์ ๋๋ฆด ์ํฅ์ด ์์ต๋๋ค.
@matthew-dean, ์ฐธ๊ณ ๋ก Babel์ ๋์จํ ๋ชจ๋์์ ์ปดํ์ผํ์ฌ ๋ ๊น๋ํ ์ฝ๋๋ฅผ ์์ฑํ๋์ง ํ์ธํ์ จ์ต๋๊น?
@seanCodes ๋๊ตฐ๊ฐ๊ฐ Rollup/Typescript์ ์ถ๋ ฅ์ด ์ด๋ป๊ฒ/์ ๋ ๋๋น ์ง๊ณ ์ด๋ฌํ ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ ํจ๊ณผ๊ฐ ์๋์ง ์กฐ์ฌํ ์๊ฐ์ด ์๋ค๋ฉด ํต ์ต์ ์ ์ ํํ์ง ์์ ๊ฒ์ ๋ํด ๋ชจ๋
๋ด๊ฐ ๊ฐ์ง ํ ๊ฐ์ง ์ถ์ธก์ ์ผ๋ถ ๋ถํด ๋ ผ๋ฆฌ์๋ ๋ง์ ๊ฐ์ฒด ์์ฑ ์์ฉ๊ตฌ๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋๊ตฐ๊ฐ๊ฐ ์ด ๋ฌธ์ ๋ฅผ ์์ ํ๊ธฐ ์ํด ์์ํด์ผ ํฉ๋๋ค.
@matthew-dean, ์ฐธ๊ณ ๋ก Babel์ ๋์จํ ๋ชจ๋์์ ์ปดํ์ผํ์ฌ ๋ ๊น๋ํ ์ฝ๋๋ฅผ ์์ฑํ๋์ง ํ์ธํ์ จ์ต๋๊น?
@seanCodes ์ด ์ฝ๋๋ Babel์ด ์๋ TypeScript๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํ์ผ๋ฉ๋๋ค. ๋ด ์๊ฐ์ JSDoc ์ ํ์ ์ ์ง์ ์ผ๋ก ์ถ๊ฐํ์ฌ ์ ํ ๊ฒ์ฌ๋ฅผ ๋ ๊ฐ๋ ฅํ๊ฒ ๋ง๋๋ ๊ฒ์ด์ง๋ง v4์ TS๋ ๋ค์ ์์ฑํ๊ธฐ์ ์ถฉ๋ถํฉ๋๋ค. ํ์ํ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ฐ๋ผ์ ๋๊ตฐ๊ฐ Babel v. TypeScript(๋ฐ ๊ฐ๊ฐ ๋ค๋ฅธ ์ค์ )๋ฅผ ์คํํ์ฌ Babel์ด ๋ ์ฑ๋ฅ์ด ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์ด๊ธฐ์ Node.js์ฉ ๋น ES5 ๋น๋๋ฅผ ์์ฑํ์ฌ ๋ฐ์ํ๋ ์ด ๋ฌธ์ ์ ๋ํด ๋งค์ฐ ์ฃผ์ ํ์ญ์์ค .
@seanCodes ๋ํ ์ฑ๋ฅ ์ฐจ์ด๋ฅผ ํ์ธํ๋ ๊ฒ์ด ์ฌ์ ํ ์ด๋ ต๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ์ฑ๋ฅ์ ์ฐจ์ด๋ฅผ ํ์คํ ์ฆ๋ช ํ๊ธฐ ์ํ PR/๋จ๊ณ๋ฅผ ์์ฑํ ์ฌ๋์ ์๋ฌด๋ ์์ต๋๋ค. ์ด ์ค๋ ๋์๋ ๋ง์ ์ผํ๊ฐ ์์ง๋ง ์ฌํ ๊ฐ๋ฅํ ์ฝ๋๋ ๋จ๊ณ๊ฐ ์์ผ๋ฉด ๋๊ตฐ๊ฐ๊ฐ ์ด๊ฒ์ ์กฐ์ฌํ๋ ๋ฐฉ๋ฒ์ด ํ์คํ์ง ์์ต๋๋ค. ์ด์์ ์ผ๋ก๋ ํ๋กํ์ผ๋ง ๋๊ตฌ(Chrome ๋๋ฒ๊ฑฐ ๋๋ ๊ธฐํ๋ฅผ ํตํด)๋ฅผ ์์ํ์ฌ ์์คํ ์ ์ซ์๋ฅผ ์ถ๋ ฅํ๋ PR์ด ์๊ณ ์ฌ๋ฌ ํ ์คํธ์ ๋ํด ํ๊ท ์ ๋ด๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๊ฒ์ ์ง๊ธ๊น์ง 100% ์ฌํํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๊ตฌ๋ ๋ณต์ ๋จ๊ณ๋ฅผ ์ ๊ณตํ ์ ์๋ ํ, ๋ถ๋ถ์ ์ผ๋ก๋ ๊ฐ์ธ์ ์ผ๋ก ๊ทธ ํ ๋ผ๊ตด๋ก ๊ฐ๊ณ ์ถ์ง ์์ ์ด์ ๊ฐ ์์ต๋๋ค. (์ฆ, "Chrome ๋๋ฒ๊ฑฐ๋ฅผ ์ฌ์ฉํ์ต๋๋ค"๋ผ๋ ํผ๋๋ฐฑ์ ์ผ๋ จ์ ์ฌํ ๋จ๊ณ๊ฐ ์๋๋๋ค. ์์๋๋ฉด ์ ์ฉํ์ง๋ง ๋๊ตฐ๊ฐ ์กฐ์ฌํ๋ ๋ฐ ๋์์ด ๋์ง๋ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ๊ฐ ๋ฌด์์ ์ถ์ ํ๋์ง, ์/์ด๋ค ๊ฒฐ๊ณผ๊ฐ ๋์ค๋์ง ์์์ผ ํฉ๋๋ค. ์์๋๋.)
๋ฐ๋ผ์ ์ฌ๋๋ค์ด ํ์ฌ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ Less ์ฑ๋ฅ์ ํฅ์์ํค๋ ค๋ฉด ์ด ๋ฌธ์ ๋ฅผ ์์ ํ๋ ๋ฐ ์ฌ๋ฌ ์์ ๋ด์ฌ์์ ํ ์ฌ๋์ด ํ์ํ ๊ฒ์ ๋๋ค.
๊ฐ์ธ์ ์ผ๋ก _speed_์์์ ๊ฐ์ ์ฑ๋ฅ ์ฐจ์ด๋ฅผ ๋ง์ด ๋ณด์ง ๋ชปํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ ์๋น์ ์ฐจ์ด๋ ๋๋๊ณ ๊ฐ์ ธ์ค๊ธฐ์ ์๊ณผ ์๊ด ๊ด๊ณ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ด ํผ์์ ์ธ ํ ๋ถ์๋ ์ด ๋ฌธ์ ์ ๊ด๋ จ์ด ์๋ ๊ฒ์ผ๋ก ์ ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๊ฒ์ด ๋ง๋ค๋ฉด, ~๋น์ ~์ ์ฐจ์ด์ ์ ๋ณด๊ธฐ ์ํด ๊ฐ๊ฐ์ ์ผ๋ถ ๊ท์น ์ธํธ๊ฐ ํฌํจ๋ ๋ง์ ๊ฐ์ ธ์จ ํ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ ํ ์คํ ๊ฐ๋ฅํ ํ ์คํธ ํ๋ก์ ํธ๋ฅผ ํจ๊ป ์ค๋นํ ์ ์์ด์ผ ํฉ๋๋ค.
@rjgotten
๊ทธ๊ฒ์ด ๋ง๋ค๋ฉด, ๊ฐ๊ฐ ์ฝ๊ฐ์ ๊ท์น ์ธํธ๋ฅผ ํฌํจํ๋ ๋ง์ ๊ฐ์ ธ์จ ํ์ผ๋ก ํ ์คํธ ํ๋ก์ ํธ๋ฅผ ํจ๊ป ์กฐ์ํ ์ ์์ด์ผ ํ๋ฉฐ ์ฐจ์ด์ ๋ ํ์ธํ ์ ์์ต๋๋ค.
"๋น์ "์ ์ฌ๊ธฐ์ ์ค์ํ ๋ถ๋ถ์ ๋๋ค. ๐
"๋น์ "์ ์ฌ๊ธฐ์ ์ค์ํ ๋ถ๋ถ์ ๋๋ค. ๐
๋ถํํ ๋จ์ด ์ ํ. ์ ๋ง์ ์ผ๋ฐ์ ์ธ ์๋ฏธ์์ - ์ฆ "๋๊ตฌ๋"์
๋๋ค.
๋ ๊น์ด ํ๊ณ ๋ค๊ณ ์ถ์ง๋ง ํ์ฌ ๋๋ฌด ๋ง์ ํ์ด ํ์ ํ๊ณ ์์ต๋๋ค.
@rjgotten "๋ง์ ์์ ๊ฐ์ ธ์จ ํ์ผ"์ด ๋ฌด์์ธ์ง ๋ ์ ์ ์ ์์ต๋๊น? 100๊ฐ์ ๊ฐ๋ณ ํ์ผ์ด ์ด๋ฅผ ์ํํฉ๋๊น, ์๋๋ฉด 1000๊ฐ๋ฅผ ๋งํ๋ ๊ฒ์ ๋๊น?
๋ํ ์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ์ฒ์ ์๊ฒ ๋์์ต๋๊น? ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ผ๋ก ์ธํด ๋น๋๊ฐ ์คํจํ์ต๋๊น? ์๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ๋ณด๊ณ ์์์ต๋๊น? ์๋๋ฉด ๊ธฐ๊ณ๊ฐ ๋๋ ค์ง๋ ๊ฒ์ ๋์น์ฑ์ จ์ต๋๊น?
๋๋ ์ด๊ฒ์ ์์ง ๋ณต์ ํ๋ ค๊ณ ์๋ํ์ง ์์์ง๋ง ์ถ์ธกํ๊ณ ํ์ธํ๋ ๊ฒ์ ์์กดํ ํ์๊ฐ ์๋๋ก ์ ํํ ๋ฌด์์ ์ฐพ์์ผ ํ๋์ง ๋ฐฐ์ฐ๊ธฐ๋ฅผ ์ฌ์ ํ ํฌ๋งํ๊ณ ์์ต๋๋ค.
100๊ฐ ์ ๋๋ฉด ๋ฉ๋๋ค. ์ด๋ ๋ด๊ฐ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ ์ค์ ํ๋ก์ ํธ์ ํฌ๊ธฐ์ ๋น์ทํฉ๋๋ค.
ํ์ฌ CI ํ๊ฒฝ์์ ์คํ ์ค์ธ ๋น๋๊ฐ ์คํจํ๊ธฐ ์์ํ์ ๋ ์ฒ์์ผ๋ก ์์์ฐจ๋ ธ์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์ ํ์ด ๊ตฌ์ฑ๋ Docker ์ปจํ ์ด๋ ๋ด๋ถ์์ ์คํํฉ๋๋ค.
@rjgotten 3.11.3์์ ์ฌ์ ํ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๊ฐ ์์ต๋๊น? ์ด์ ๋ฆด๋ฆฌ์ค์์ ๊ฐ์ ธ์ค๊ธฐ ๋ด์์ AST์ ๋ชจ๋ ์บ์ฑ(์ฐธ์กฐ)์ ์ ๊ฑฐํ์ผ๋ฏ๋ก ๊ฐ์ ธ์ค๊ธฐ๊ฐ ๋ณด๋ฅ ์ค์ด๊ณ ๊ทธ ์์ AST ํธ๋ฆฌ๊ฐ ์ ์ง๋๊ณ ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ์ง๋ง ์ ์ง์์ ํธ๋ฆฌ๋ฅผ ์ญ์ ํ๋ฉด ๊ทธ๊ฒ ํด๊ฒฐ์ด ๋๋์?
@matthew-dean ์, ๋ฌธ์ ๋ 3.11.3์๋ ์ฌ์ ํ ์กด์ฌํฉ๋๋ค.
๋๋ ๊ฐ๋ ์ฆ๋ช ์ ๋ง๋ค๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ด์ง๋ง ๋ด ์ ์์ ๋ง์ ๊ฒ์ด ์์ต๋๋ค. ์๊ฐ์ด ์ข ๋ ์๊ธฐ๋ฉด ํ ์ผ ๋ชฉ๋ก์ ๋ฃ์ด๋์์ต๋๋ค.
@matthew-dean ์ด์ ์ ์คํจํ๋ ๋น๊ต์ ํฐ ํ๋ก์ ํธ์์ ์ด๊ฒ์ ํ ์คํธํ๊ณ ์ถ์ต๋๋ค. ๋ด๊ฐ ์์์ผ ํ ๊ฒ์ด ์์ต๋๊น? https://github.com/less/less.js/tree/release_v3.12.0-RC1 ์ด ๋ถ๊ธฐ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๊น?
@nfq ์๋ํด ๋ณผ ์ ์์ง๋ง ์ด ์ค๋ ๋์ ์ผ๋ฐ์ ์ธ ์งํ๋ ํด๋น ๋ถ๊ธฐ๊ฐ ์ํํ๋ ES6 ๋ณํ์ ํญํํ์ง ์๊ณ ๋์ ๋ฌธ์ ๋ฅผ ์ ์ ํ๊ฒ ์ง๋จํ๊ธฐ ์ํด ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ป๋ ๊ฒ์ ๋๋ค.
๋ง๋ถ์ฌ์, ๋๋ ์๊ตฌ ๊ฐ์ฒด๋ฅผ ์ฐพ์ผ๋ ค๊ณ ์ปดํ์ผํ๋ ๋์ less
๊ฐ์ฒด๋ฅผ ๊ฒ์ฌํ๋ ค๊ณ ์๋ํ์ง๋ง ์๋ฌด ๊ฒ๋ ์ฐพ์ง ๋ชปํ์ต๋๋ค. ๐คทโโ๏ธ
์ฑ๋ฅ ๋ฌธ์ ๋ ๊ฒช๊ณ ์์ต๋๋ค. ๋์ผํ ํ ์คํธ ์ค์ํธ์ ๊ฒฝ์ฐ:
| ๋ฒ์ | ์๊ฐ |
| -- | -- |
| v3.9.0 | ~1.6์ด |
| v3.10.0~v3.11.1 | ~3.6์ด |
| v3.11.2+ | ~12์ด |
์ฌ๊ธฐ์ ๋
ผ์๋ 3.9.0 โ 3.10.0 ์ธ์๋ v3.11.2
์์ ์๋นํ ์ฑ๋ฅ ์ ํ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ณ๊ฒฝ ๋ก๊ทธ์ ์ด ๋ณ๊ฒฝ ์ฌํญ์ ์์ฌ์ค๋ฌ์ด ๊ฒ ๊ฐ์ต๋๋ค.
3498 ๊ฐ์ ธ์ค๊ธฐ ๊ด๋ฆฌ์์์ ํธ๋ฆฌ ์บ์ฑ ์ ๊ฑฐ(#3498)
์ ์๊ฒ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
๋์ผํ ๋น๋์ ๋ํ ํ์ด๋ฐ(๋ชจ๋ ๋ ธ๋ 10.19.0์์):
@jrnail23
๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค ์ ์๋ repo๊ฐ โโ์์ต๋๊น?
@matthew-dean https://github.com/less/less.js/issues/3434#issuecomment -672580467: https://github.com/ecomfe/dls-tooling/tree/master/packages/ less-plugin-dls (Less ํ๋ฌ๊ทธ์ธ์ ํฌํจํ๋ ๋ชจ๋ ธ๋ ํฌ์ ๋๋ค.)
์ฃ์กํฉ๋๋ค, @matthew-dean, ๊ทธ๋ ์ง ์์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ๋ ๋ด ๊ณ ์ฉ์ฃผ์ ์ ํ์์ ๋์จ ๊ฒ์ ๋๋ค.
๊ทธ ๊ฒฐ๊ณผ๋ ๋ด ๊ณ ์ฉ์ฃผ์ ์ ํ์์ ๋์จ ๊ฒ์ ๋๋ค.
๊ฐ์ ์ด์ ๋ก ํ์ผ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ๐
@rjgotten @jrnail23 @Justineo - ๊ถ๊ธํ๋ฐ, ๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ๋ค๋ฅธ ํ์ผ์์ ์ฌ๋ฌ ๋ฒ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๊น?
์ ๊ฒฝ์ฐ ์๋ @import
๋ฌธ ์
@matthew-dean, ์ผ๋ฐ์ ์ธ ๊ฒ๋ค(์: ์์ ๋ณ์, ํ์ดํฌ๊ทธ๋ํผ ๋ฑ)์ ๊ฐ์ ธ์ค๋ base.less
ํ์ผ์ด ์์ต๋๋ค.
์ฐ๋ฆฌ ์ฑ์ ๋น ๋ฅด๊ฒ ๊ฒ์ํด๋ณด๋ฉด base.less
์ฐธ์กฐ(์: <strong i="8">@import</strong> (reference) "../../../less/base.less";
)๊ฐ 66๊ฐ์ ๋ค๋ฅธ ๊ตฌ์ฑ์์/๊ธฐ๋ฅ๋ณ less
ํ์ผ์์ ๊ฐ์ ธ์ค๊ณ ์ด๋ฌํ ํ์ผ ์ค ์ผ๋ถ๋ ๋ํ ๋ค๋ฅธ ๊ตฌ์ฑ ์์/๊ธฐ๋ฅ๋ณ ๋ ํ์ผ(์์ฒด์ ์ผ๋ก base.less
์ฐธ์กฐํ ์ ์์)์ ๊ฐ์ ธ์ต๋๋ค.
ํฅ๋ฏธ๋กญ๊ฒ๋ (์๋ง๋ ์ค์๋ก?) ์ฐธ์กฐ๋ก ์์ ์ ๊ฐ์ ธ์ค๋ ๋ ๋ค๋ฅธ less
ํ์ผ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
@rjgotten @jrnail23 @Justineo - ๊ถ๊ธํ๋ฐ, ๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ๋ค๋ฅธ ํ์ผ์์ ์ฌ๋ฌ ๋ฒ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๊น?
์ ์๊ฒ๋ '์'์ ๋๋ค. ๋ด๊ฐ ์ฒ์์ผ๋ก ๋ฌธ์ ๋ฅผ ๊ฒฝํํ ํ๋ก์ ํธ๋ ๋ค๋ฅธ ๋ชจ๋ ํ์ผ์ ํฌํจ๋ ์ค์ ์ง์ค์ ๋ณ์ ํ์ผ์ ์ฌ์ฉํ๋ ์คํจ ๊ฐ๋ฅํ ์๋ฃจ์ ์ ๋๋ค. ๊ฒ๋ค๊ฐ, ์ฐ๋ฆฌ๋ ์๋ฅผ ๋ค์ด ํน์ ์ ํ์ ๋ฒํผ, ๊ธ๊ผด ์์ด์ฝ ๋ฑ์ ์์ฐํ๋ ๋ฏน์ค์ธ ํฉํ ๋ฆฌ๊ฐ ์๋ ๊ตฌ์ฑ ์์ ๊ธฐ๋ฐ ๋์์ธ์ ์ฌ์ฉํ๊ณ ๊ทธ ์ผ๋ถ๋ ์ฌ๋ฌ ํ์ผ๋ก ๊ฐ์ ธ์ต๋๋ค.
์๋; ๋ชจ๋ ์ข ์ ํญ๋ชฉ์ ์ข ์ ํญ๋ชฉ์ ์๊ฒฉํ๊ฒ ๊ฐ์ ธ์ค๋๋ก ์ค์ ๋์ด ์์ผ๋ฉฐ Less ์ปดํ์ผ๋ฌ์ ์์กดํ์ฌ ์ค๋ณต ์ ๊ฑฐ ๋ฐ ๊ฐ์ ธ์ค๊ธฐ ์์๋ฅผ ์ฌ๋ฐ๋ฅธ ์์๋ก ์ง์ ํ๊ณ ์ฌ๋ฐ๋ฅธ CSS ์ถ๋ ฅ์ ๋ณด์ฅํฉ๋๋ค.
@rjgotten
๊ธ์ ์ฌ๋ ธ๋ค๊ฐ ์ง์ ๋๋ฐ(์์๋ค๊ณ ์๊ฐํ์ง๋ง ์ฌ์ ํ ๋ณต์ ํ ์ ์์๊ธฐ ๋๋ฌธ์), ์ด๋ค ํ๋ก์ธ์ค๋ฅผ ํฌํจํ์ฌ ์ฌ๋๋ค์ด ๋ณด๊ณ ํ๋ ๋ด์ฉ์ ์ฌํํ ๋จ๊ณ๊ฐ ์์ง ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋จํ ๊ฒ์กฐ์ฐจ๋:
3.11์์ RuleSet์ ๋ํด ๋์ด๋ ๋ณด์ ์ ์ค ํ๋๋ ImportManager์ ๋๋ค.
๋๋ ๊ทธ๊ฒ์ ๋ํ ์ฆ๊ฑฐ๋ฅผ ์ฐพ์ ์ ์์ง๋ง ์ด๋ป๊ฒ ๋น์ ์ด ๊ทธ๊ฒ์ ๊ฒฐ์ ํ ์ ์์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋๋ Chrome DevTools์ ์ต์ํ์ง ์์ ๋ฌด์์ ์ํด ์ ์ง๋๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฒ์ ์ด๋ป๊ฒ ๊ฒฐ์ ํ ์ ์๋์ง ์ ์ ์์ผ๋ฉฐ Google์ด ๋๋ฅผ ๋์ง ์์ ๋ชจํธํ ์ฃผ์ ์ ๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ๋๋ค์ด ๋ ธ๋ ํ๋ก์ธ์ค์ ์ฐ๊ฒฐํฉ๋๊น? ๋ธ๋ผ์ฐ์ ์์ ์คํํ๊ณ ์ค๋จ์ ์ ์ค์ ํ์๊ฒ ์ต๋๊น? ๋จ๊ณ๋ ๋ฌด์์ ๋๊น?
์์ปจ๋, ์ด ๋ฌธ์ ๊ฐ ์์๋ ํด์ ์ด๋ค โโ๋ณด๊ณ ์๋ ์ฌํํ ๋จ๊ณ๊ฐ ์์ต๋๋ค. ๋๋ ์ด ๋ชจ๋ ์ผํ๊ฐ ์๋ฏธํ๋ ๋ฐ๊ฐ ์๋ค๊ณ ํ์ ํ์ง๋ง, ๋น์ ์ด ๋ฐ๊ฒฌํ ๊ฒ์ ์ด๋ป๊ฒ ๊ฒฐ์ ํ๋์? ์๋๋ฉด ์ด๊ฒ์ ๋ณด์ฌ ์ค ์ค์ ์ ์๊ฐํ ์ ์์ต๋๊น? ์ดํดํ๋ ๋ฐ ๋์์ ์ฃผ๊ณ ์ถ์ง๋ง ์ฌํํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
@Justineo ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ ์ปดํ์ผ ์๊ฐ์ ๊ฒฐ์ ํ๊ธฐ ์ํด ์ด๋ค ๋จ๊ณ๋ฅผ
@Justineo ์บ์ ์ ๊ฑฐ(์๋ง๋ ๋์ ์๊ฐ์ผ ์ ์์)๋ฅผ ์ง์ https://github.com/less/less.js/tree/cache-restored
์ค๋์ ์คํ/ํ ์คํธ์ ๋ํ ๋ช ๊ฐ์ง ์ ๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด:
๊ทธ๋ฐํธ์ shell:test
๋ฒ
๊ทธ๋์ ๊ธธ๊ณ ์งง์ ๊ฒ์ ํธ๋์คํ์ผ๋ ์ฝ๋๊ฐ ํญ์ ๋๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๋ค๋ฅด๊ฒ ์๊ฐํ๋ ์์งํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์ธ๊ณ์์ ํธ๋์คํ๋ ์ด์ ์ด ์ด์ "ํ์ค"์ด๊ธฐ ๋๋ฌธ์ ์ฝ๊ฐ ๋๋์ต๋๋ค. ์ด๋ฅผ ๋ท๋ฐ์นจํ๋ ๋ค๋ฅธ ์ฐ๊ตฌ๊ฐ ์์ต๋๊น?
@Justineo ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ ์ปดํ์ผ ์๊ฐ์ ๊ฒฐ์ ํ๊ธฐ ์ํด ์ด๋ค ๋จ๊ณ๋ฅผ
npm run test
๋ ๊ฒฝ๊ณผ๋ ์ด ์๊ฐ์ ์์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ํ๋ก์ ํธ์์๋ 3.12๋ก ์ ํํ ๋ OOM์ ๊ฒฝํํ๊ณ ์์ต๋๋ค.
TypeScript ์์ฑ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ต๋๋ค.
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var node_1 = tslib_1.__importDefault(require("./node"));
var variable_1 = tslib_1.__importDefault(require("./variable"));
var property_1 = tslib_1.__importDefault(require("./property"));
var Quoted = /** <strong i="6">@class</strong> */ (function (_super) {
tslib_1.__extends(Quoted, _super);
function Quoted(str, content, escaped, index, currentFileInfo) {
var _this = _super.call(this) || this;
_this.escaped = (escaped == null) ? true : escaped;
_this.value = content || '';
_this.quote = str.charAt(0);
_this._index = index;
_this._fileInfo = currentFileInfo;
_this.variableRegex = /@\{([\w-]+)\}/g;
_this.propRegex = /\$\{([\w-]+)\}/g;
_this.allowRoot = escaped;
return _this;
}
๋:
var Node = require('./node'),
Variable = require('./variable'),
Property = require('./property');
var Quoted = function (str, content, escaped, index, currentFileInfo) {
this.escaped = (escaped == null) ? true : escaped;
this.value = content || '';
this.quote = str.charAt(0);
this._index = index;
this._fileInfo = currentFileInfo;
this.variableRegex = /@\{([\w-]+)\}/g;
this.propRegex = /\$\{([\w-]+)\}/g;
};
๊ทธ๋์ ๋ด ์๊ฐ์ ๋ชจ๋ ์ถ๊ฐ ๊ธฐ๋ฅ ์ ์์ ํธ์ถ์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ํฉ์ฐ๋ฉ๋๊น? ์ด๊ฒ์ด ๋ถ์ ์ฒญ์ด๊ฐ ์๋ ํ, ๊ทธ๋ฌ๋ ๋๋ ํธ๋์คํ์ ์ ์ธํ๊ณ ์ด๊ฒ์ ๋ฌด์์ผ๋ก ๊ท์์์ผ์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ด๊ฐ ์ดํดํ์ง ๋ชปํ๋ ๊ฒ์ TS๊ฐ ์๋ณธ์ ๋ ๊ฐ๊น์ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ ์ด์ ์ ๋๋ค.
์ ๋ฐ์ดํธ:
3.9 ํ ์คํธ๋ฅผ 3.12์ ์๋ ๊ฒ๊ณผ ๋๋ฑํ๊ฒ ํ๋ ค๊ณ ํ๋ฉด ๋ณธ์ง์ ์ผ๋ก 1.2 ๋ 1.3์ด ๋ฉ๋๋ค. ํ ์คํธ๊ฐ ๋ณ๊ฒฝ๋์๊ธฐ ๋๋ฌธ์ ์ด ์ฐจ์ด์ ๋ํด ๋ ์ด์ ํ์ ํ ์ ์์ต๋๋ค. ์ ํํ ๋์ผํ ์ ์ ์์ ํ์ผ์ ๋ํด ์คํํด์ผ ํฉ๋๋ค.
@Justineo @rjgotten ์ข ๋ ํจ์จ์ ์ธ ๋น๋๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๋ช ๊ฐ์ง TypeScript ์กฐ์ ์ ํธ์ํ์ต๋๋ค. ํด๋น ๋ถ๊ธฐ๋ฅผ ๋น๋ํ๊ณ ์ฌ์ฉํ์๊ฒ ์ต๋๊น? https://github.com/less/less.js/tree/cache-restored
@matthew-dean ๐ ๊ฐ์ฌํฉ๋๋ค! ์ค๋ ๋์ค์ ์๋ํด ๋ณด๊ฒ ์ต๋๋ค.
cache-restored
๋ถ๊ธฐ๋ฅผ ํ
์คํธํ๋๋ฐ v.3.1.0~3.11.1๊ณผ ๊ฑฐ์ ๊ฐ์ ์๋๋ก v3.11.2+๋ณด๋ค ํจ์ฌ ๋น ๋ฆ
๋๋ค.
@์ ์คํฐ๋ค์ค
์บ์ ๋ณต์ ๋ถ๊ธฐ๋ฅผ ํ ์คํธํ๋๋ฐ v.3.1.0~3.11.1๊ณผ ๊ฑฐ์ ๋์ผํ ์๋๋ก v3.11.2+๋ณด๋ค ํจ์ฌ ๋น ๋ฆ ๋๋ค.
๊ธ์, ๊ทธ๊ฒ์ ์ ๋งํ๋ค. @rjgotten @jrnail23 ๋ฐ ์ด ์ค๋ ๋์ ๋ค๋ฅธ ์ฌ๋๋ค๋ก๋ถํฐ ํผ๋๋ฐฑ์ ๋ฐ๋๋ก ํฉ์๋ค. ํด๋น ์บ์ ์ ๊ฑฐ๋ ์ด ์ค๋ ๋๊ฐ ๊ฒ์๋ ํ์์ต๋๋ค(3.11.2). ์ฌ์ค ๊ทธ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋์ ์ผ๋ถ๋ฅผ ์ ๊ฑฐํ๋ ค๋ ์๋์์ง๋ง ๋์ผํ ํ์ผ์ ์ฌ๋ฌ ๋ฒ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ ์ํฉ์ ๋ ์ ํ์ํฌ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ๊ฐ๋จํ ๋งํด์, ๋๋ ์ฌ์ ํ ์๋ ๋ฌธ์ ๋ ๊ทธ ์์ธ(์ฝ๋ ๋ณํ์์ ๋ฐ์ํ ์ด๋ค ๊ฒ์ ์ ์ธ)์ ๋ํด ํ์ ํ์ง ๋ชปํ๋ฉฐ ์ด ๋ถ๊ธฐ์ ์ฌ์ ํ ๊ทธ๋ฌํ ๋ฌธ์ ๊ฐ ์๋์ง ์๊ณ ์ถ์ง๋ง ์์ ์ธ๊ธํ๋ฏ์ด , ๋ช ํํ ์ฌํ ๋จ๊ณ๊ฐ ์์ผ๋ฏ๋ก ํ์คํ์ง ์์ต๋๋ค.
@matthew-dean, cache-restored
๋ถ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์ฝ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค( npm link
๊ฐ ์คํจํ๋ฏ๋ก ๋ก์ปฌ์์ ์ฌ์ฉํ๊ธฐ ์ํด ์ํํด์ผ ํ ์์
์ด ๋ช
ํํ์ง ์์ต๋๋ค. ๋).
๋ด๊ฐ ์๋ํ ์ ์๋ ์นด๋๋ฆฌ์/์ํํ ๋ฒ์ ์ ๊ฒ์ํ ์ ์์ต๋๊น?
@jrnail23
๋๋ ์ด๊ฒ์ด ํจ๊ณผ๊ฐ ์์๋ค๊ณ ์๊ฐํ๋ค. Less๋ฅผ ์ ๊ฑฐํ๊ณ npm i [email protected]+84d40222
์ค์นํด ๋ณด์ธ์.
@matthew-dean, ๋ฐฉ๊ธ ๊ทธ ๋ฒ์ ์ ์๋ํ์ง๋ง ์ฌ์ ํ ๋์๊ฒ ๋์ฉ๋๋ค.
์๋ก์ด ์นํฉ ๋น๋(์บ์ฑ ์์)์ ๊ฒฝ์ฐ v3.9์ ๊ฒฝ์ฐ 62.4์ด๊ฐ ์์๋์ง๋ง v3.13.1์ ๊ฒฝ์ฐ 121์ด๊ฐ ์์๋ฉ๋๋ค.
์บ์๋ ๋น๋์ ๊ฒฝ์ฐ v3.9๋ 30์ด, v3.13.1์ 83-87์ด๊ฐ ์์๋ฉ๋๋ค.
@jrnail23 ๋ชจ๋ ๋
ธ๋ ๋ชจ๋์ ์ ๊ฑฐํ๊ณ [email protected]+b2049010
์ค์น๋ฅผ ์๋ํ ์ ์์ต๋๊น?
3.9 ๋ฏธ๋ง ๋ฒค์น๋งํฌ:
4.0.1-alpha.0 ๋ฏธ๋ง:
4.0.1-alpha.2 ๋ฏธ๋ง:
@Justineo @rjgotten ์ด๊ฒ๋ ํด๋ณด ์๊ฒ ์ด์ ?
@jrnail23 @Justineo @rjgotten
์ด๊ฒ์ 4.0 ๋น๋์ด๋ฏ๋ก ์ฝ๋์ ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
.mixin;
๋ ํ์ฉ๋์ง ์์).๋ฐ๋ผ์ ์ง๊ธ์ ํจ์ฌ ๋ ๋๊ด์ ์ด์ง๋ง ์ต์ ๋ฒค์น๋งํฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง๋ง ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ด์ ๋ฅผ ์์ง ํ์ ํ์ง ๋ชปํ์ต๋๋ค. ์ฑ๋ฅ์ด ๋ค๋ฅธ ๋ชจ๋ ์ฌ๋์๊ฒ ์ ์ฉ๋๋ ๊ฒฝ์ฐ ์ต์ข ์ ์ผ๋ก ๋ฌธ์ ๋ฒ์๋ฅผ ์ขํ ๋ฐฉ๋ฒ๊ณผ ๋ฐ๊ฒฌํ ๋ด์ฉ์ ์์ฝํ ์ ์์ต๋๋ค. ๋ค์ ๋งํด, ๋ฌธ์ ๊ฐ _์ด๋์์_ ๋ฐ๊ฒฌ๋์์ง๋ง ๋ฐ๋์ ๊ทธ ์ด์ ๋ ์๋๋๋ค.
https://github.com/less/less.js/issues/3434#issuecomment -672580467๊ณผ ๋์ผํ ํ ์คํธ ๋ชจ์์ ๊ฒฐ๊ณผ:
| ๋ฒ์ | ์๊ฐ |
| -- | -- |
| v3.9.0 | ~1.6์ด |
| v3.10.0~v3.11.1 | ~3.6์ด |
| v3.11.2+ | ~12์ด |
| 4.0.1-์ํ.2+b2049010 | ~1.6์ด |
ํน์ ํ ์คํธ ์ ํ๊ตฐ์ ๊ฒฝ์ฐ ์ฑ๋ฅ ์์ค์ด v3.9.0๋งํผ ๋น ๋ฅด๊ฒ ํฅ์๋์์์ ํ์ธํ ์ ์์ต๋๋ค. Matt์๊ฒ ๋งค์ฐ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! ์ํ ๋ชจ๋์ ์ค๋จ ๋ณ๊ฒฝ์ ๋ํด ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ด๊ฒ์ ๋ณ๊ฒฝํ๋ฉด ๋ง์ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์์๋ ์ ์์ผ๋ฏ๋ก ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋๋ผ๋ v3.9.0์์ ๋ฉ์ถ ์ ์์ต๋๋ค.
@์ ์คํฐ๋ค์ค
์ํ ๋ชจ๋์ ์ค๋จ ๋ณ๊ฒฝ์ ๋ํด ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
math=always
๋ชจ๋์์ ๋ช
์์ ์ผ๋ก ์ปดํ์ผํ์ฌ ์ด์ ์ํ ๋์์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ๊ทธ๋ฅ ๋ค๋ฅธ ๊ธฐ๋ณธ๊ฐ์
๋๋ค.
TL;DR - ํด๋์ค ํจํด์ ์กฐ์ฌํ์ญ์์ค
๋ฌธ์ ๋ Babel๊ณผ TypeScript ๋ชจ๋์์ ํด๋์ค๋ฅผ ๋ณํํ๋ ๋ฐ ์์์ต๋๋ค. (์ฆ, ๋ ๋ค ํธ๋์คํ์ผ๋ ์ฝ๋์์ ๋์ผํ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์์๊ณ Babel์ ์ฝ๊ฐ ๋ ๋๋นด์ต๋๋ค.) ์ด์ , ๋ช ๋ ์ ํด๋์ค ํจํด์ด ๋์ ๋์์ ๋ ์ ๋ ๋ค์์ต๋๋ค. JavaScript์ ์์์ ๊ธฐ๋ฅ ์์์ ์ํ ๊ตฌ๋ฌธ ์คํ์ ๋๋ค.
์์ปจ๋ ๊ทธ๋ ์ง ์์ต๋๋ค. _(ํธ์ง: ๊ธ์์.... ๊ทธ๋ ์ต๋๋ค. ๊ทธ๋ ์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ "์์"์ด ๋ฌด์์ ์๋ฏธํ๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ณง ๋ณด๊ฒ ๋ ๊ฒ์ฒ๋ผ ์ ์ํ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.... ์ฆ, ๋ช ๊ฐ์ง ํจํด์ด ์์ต๋๋ค. JavaScript์ ํ๋กํ ํ์ ์ฒด์ธ์ "์์"์ ๋ง๋ค๊ณ ํด๋์ค๋ ํ๋์ ํจํด๋ง ๋ํ๋ด์ง๋ง ํด๋น ํจํด์ ๋ค๋ฅธ ๋ชจ๋ ํจํด๊ณผ ๋ค์ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํน์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์ด ํจํด์ "๋ชจ๋ฐฉ"ํ๊ธฐ ์ํ ๋์ฐ๋ฏธ ์ฝ๋๊ฐ TS/Babel์ ํ์ํฉ๋๋ค.)_
๋ ์ ์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
var Node = function() {
this.foo = 'bar';
}
var Inherited = function() {
this.value = 1;
}
Inherited.prototype = new Node();
var myNode = new Inherited();
์ด์ "ํ๋" JS๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ฒ์ ๋ค์ ์์ฑํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ฌ์ค, ๋ด๊ฐ ํ๋ ์ด ํ๋ก์ธ์ค๋ฅผ ์๋ํํ ์ ์์ง๋ง ์ด๋ ์ชฝ์ด๋ ๋์ผํ๊ฒ ์์ฑํ์ ๊ฒ์ ๋๋ค.
class Node {
constructor() {
this.foo = 'bar';
}
}
class Inherited extends Node {
constructor() {
super();
this.value = 1;
}
}
var myNode = new Inherited();
๊ฐ์ ๊ฑฐ ๋ง์ฃ ? ์ฌ์ค, ์๋. ์ฒซ ๋ฒ์งธ๋ { value: 1 }
์์ฑ์ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ํ๋กํ ํ์
์ฒด์ธ์์ { foo: 'bar' }
๊ฐ์ฒด๋ฅผ ๊ฐ์ง๋๋ค.
๊ทธ๊ฒ์ ๋ชจ๋ ์์ฑ์ ํธ์ถํ๋ฏ๋ก ๋ ๋ฒ์งธ๋, Inherited
๋ฐ Node
๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ๊ฐ์ฒด ์์ฑํ๋ค { value: 1, foo: 'bar' }
.
๋น์ ์ด ์ก์ธ์ค ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด์ , _user_์ ๊ฒฝ์ฐ,์ด ์ ๋ง ์ค์ํ์ง ์์ต๋๋ค ๋ชจ๋ value
๋ฐ foo
์์ myNode
์ด๋ ๊ฒฝ์ฐ์ด๋ค. _๊ธฐ๋ฅ์ ์ผ๋ก_, ๊ทธ๋ค์ ๋๊ฐ์ด ํ๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค.
V8๊ณผ ๊ฐ์ JIT ์์ง์ ๋ํ ๊ธฐ์ฌ์์ ๊ธฐ์ตํ๋ ๋ฐ์ ๋ฐ๋ฅด๋ฉด ๊ฐ์ฒด ๊ตฌ์กฐ๋ ์ค์ ๋ก ๋งค์ฐ ์ค์ํฉ๋๋ค. { value: 1 }
, { value: 2 }
, { value: 3 }
, { value: 4 }
์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋ฉด V8์ ํด๋น ๊ตฌ์กฐ์ ๋ด๋ถ ์ ์ ํํ์ ์์ฑํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌ์กฐ + ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ ์ ์ฅํ ๋ค์ ๋ฐ์ดํฐ๋ฅผ 3๋ฒ ๋ ์ ์ฅํฉ๋๋ค.
ํ์ง๋ง { a: 'a', value: 1 }
, { b: 'b', value: 2 }
, { c: 'c', value: 3 }
, { d: 'd', value: 4 }
์ ๊ฐ์ด ๋งค๋ฒ ๋ค๋ฅธ ์์ฑ์ ์ถ๊ฐํ๋ฉด { a: 'a', value: 1 }
๊ฐ์ ๋ฐ์ดํฐ ์ธํธ๊ฐ ์๋ 4๊ฐ์ ๋ค๋ฅธ ๊ตฌ์กฐ์
๋๋ค. , ๋์ผํ ์๋ณธ ํด๋์ค ์งํฉ์์ ์์ฑ๋ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. JS ๊ฐ์ฒด์ ๋ชจ๋ ๋์ฐ๋ณ์ด๋ ๋ฐ์ดํฐ ์กฐํ๋ฅผ ์ต์ ํํ์ง ์๊ณ ํจ์๋ก ๋ณํ๋๋ ํด๋์ค ํจํด์ ๋ ๊ณ ์ ํ ๋์ฐ๋ณ์ด๋ฅผ ์ ๋ฐํฉ๋๋ค(์ด์ฉ๋ฉด). (์์งํ ์ด๊ฒ์ด ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ ํด๋์ค ์ง์์ ๋ํด ์ฌ์ค์ธ์ง ์ฌ๋ถ๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.)
AFAIK, ๋ํ ์ฌ์ค์ ๊ฐ์ฒด์ ๋ํ ์์ฑ์ด ๋ง์์๋ก ๊ฐ๋ณ ์์ฑ ์กฐํ๊ฐ ๋ ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ ๊ฒ์ ๋๋ค.
๋ค์ ๋งํ์ง๋ง ์ต์ข ์ฌ์ฉ์์๊ฒ๋ JS ์์ง์ด ๋๋ฌด ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค. Buuuuut๋ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ๋ง์ ๊ฐ์ฒด์ ๋ํ ์์ฑ/๋ฉ์๋๋ฅผ ๋ง๋ค๊ณ ์กฐํํ๋ ์์ง์ ์ ์ง ๊ด๋ฆฌํ๊ณ ์๋ค๊ณ ๋งํฉ๋๋ค. (Ding ding ding.) ๊ฐ์๊ธฐ TypeScript/Babel์ด ๊ฐ์ฒด๋ฅผ "ํ์ฅ"ํ๋ ๋ฐฉ์๊ณผ ๊ธฐ๋ณธ ๊ธฐ๋ฅ ํ๋กํ ํ์ ์์ ๊ฐ์ ์ด๋ฌํ ์์ ์ฐจ์ด๊ฐ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ถ๊ฐ๋ฉ๋๋ค.
์ด์ Less ๊ตฌ๋ฌธ๊ณผ TS๋ก ๋ณํ๋ ํด๋์ค ํจํด์ ์ฌ์ฉํ์ฌ Node ๋ฐ ์์ ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ ๊ตฌํ์ ์์ฑํ์ต๋๋ค. ๊ฒ์ดํธ์์ ๋ฐ๋ก ์์๋ ๋ ธ๋๋ 25% ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ/๋ฆฌ์์ค๋ฅผ ์๋นํ๋ฉฐ ์ด๋ ์์๋ ๋ ธ๋์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๊ธฐ ์ ์ ๋๋ค.
์ด์ ์ผ๋ถ ๋ ธ๋๊ฐ ๋ค๋ฅธ ๋ ธ๋์์ ์์ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ฆ, ํด๋์ค์ ๋ฉ๋ชจ๋ฆฌ ๋ด ํํ์ ์์๋ ์ธ์คํด์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฆ๊ฐํ๊ธฐ ์์ํฉ๋๋ค.
๋๋ ์ด ๋ชจ๋ ๊ฒ์ ํ ์์ ์๊ธ์ผ๋ก ๋ฐ์๋ค์ด๋ ๊ฒ์ ๊ฐ์กฐํด์ผ ํ๋ค. ์๋ํ๋ฉด ๋๋ ์์ ์ผ๋ก์ ์ ํ์ด ์ฑ๋ฅ์ ์์ด์ ์ด๋ ๊ฒ ๋น์ฐธํ ๊ฒ์ ๋ค์ด๋ณธ ์ ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ด๊ฐ _์๊ฐํ๋_ ์ผ์ Less๊ฐ JIT๋ฅผ ์ฌ๊ฐํ๊ฒ ๋น์ต์ ํํ๊ณ ์๋ ๊ฐ์ฒด/์ธ์คํด์ค ์กฐํ์ ํน๋ณํ ์กฐํฉ์ด ์๋ค๋ ๊ฒ์ ๋๋ค. _(์ผ๋ถ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง ์ ๋ฌธ๊ฐ๊ฐ ์ด ๊ฒฝ์ฐ์ ์ ํธ๋์คํ์ผ๋ ํด๋์ค๊ฐ ๋ค์ดํฐ๋ธ JS ์์ ๋ฉ์๋๋ณด๋ค ํจ์ฌ ๋ ๋์ ์ฑ๋ฅ์ ๋ฐํํ๋์ง ์๊ณ ์๋ค๋ฉด ์๊ณ ์ถ์ต๋๋ค.)_ ๋ ๋ฉ์๋๋ฅผ ๋ชจ๋ ์ฌ์ฉํ์ฌ ์์ฒ ๊ฐ์ ์์๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ฑ๋ฅ ์ธก์ ์ ๋ง๋ค๋ ค๊ณ ํ์ต๋๋ค. ์ผ๊ด๋ ์ฑ๋ฅ ์ฐจ์ด๋ฅผ ๋ณผ ์ ์์์ต๋๋ค.
๋ฐ๋ผ์ "์๋ฐ์คํฌ๋ฆฝํธ์ ํด๋์ค๋ ๋์๋ค"๋ผ๋ ๋ง์ ํ๊ธฐ ์ ์ ํธ๋์คํ์ผ๋ ํด๋์ค์ ๋ค์ดํฐ๋ธ JS์ ์ฐจ์ด ์ ๊ฒฐํฉํ์ฌ ์ด๋ฌํ ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ํ Less ์ฝ๋๋ฒ ์ด์ค์ ๋ค๋ฅธ ์ ๋ง ๋ถํํ ํจํด์ด ๋ ์ ์์ต๋๋ค.
์์งํ ์ ๋ ์์
ํจํด์ ์์ฌํ ์ ์ด ์์ต๋๋ค. ์๋ ES5 ์ฝ๋๊ฐ ์ญ-Babelified ์ฝ๋๋ณด๋ค ๋น ๋ฅด๊ฒ ์คํ๋๋ค๋ ๊ฒ์ ์๊ณ ์์์ง๋ง ํ์ดํ ๊ธฐ๋ฅ์ด๋ ์ด๋๊ฐ์ ๊ตฌ๋ฌธ์ ํผ๋จ๋ฆฌ๋ ๋ถ๋ถ์ด ์์ฌ์ค๋ฌ์ ์ต๋๋ค. ๋ ์์ง๋ ์คํํ๊ธฐ๋ก ๊ฒฐ์ ์ผ์ผ ์๋๋ก ์ต์ ์ ES5 ์ง์ ํ๋ค lebab
๋ค์๋ฅผ, ๋จ์ง ์ด๋ฌํ ๋ณํ ์ฌ์ฉ : let,class,commonjs,template
. ๊ทธ์ ์์ผ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์์์ ๋ค์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ๋ฌธ์์ด ํ
ํ๋ฆฟ์ด๋ let-to-var๊ฐ ์๋๋ผ๋ ๊ฒ์ ์๊ณ ์์์ต๋๋ค. ๋๋ ์๋ง๋ require-to-imports๊ฐ ๋ญ๊ฐ๋ฅผ ํ๋ค๊ณ ์๊ฐํด์ ํ๋์ ๊ทธ๊ฒ์ ๊ฐ์ง๊ณ ๋์์ต๋๋ค. ๊ทธ๊ฒ์ ์์
์ ๋ ๋ฌ๋ค. ๊ทธ๋์ ์ง๊ฐ์ ์ผ๋ก ๋ชจ๋ ํ์ฅ๋ ํด๋์ค๋ฅผ ๋ค์ ๊ธฐ๋ฅ์ ์์์ผ๋ก ๋ค์ ์์ฑํ์ต๋๋ค. Bam, ์ฑ๋ฅ์ด ๋์์์ต๋๋ค.
๊ทธ๋์! ๊ตํ์ ์ป์์ต๋๋ค. ํ๋ก์ ํธ๊ฐ ์ค๋๋ ES5 ์ฝ๋์ ์๊ณ "ํ๋์ ์ธ" Babel-ified ๋๋ TypeScripted ์ฅ์ ์ ๊ฐ๋งํ๊ณ ์๋ค๋ฉด ๋ฌด์์ ํธ๋์คํ์ผํ๋ ์์ฑํ์ง ์์์์ ๊ธฐ์ตํ์ญ์์ค.
๋๋ ์ฌ์ ํ ํด๋์ค๋ฅผ ์ข ๋ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ํจํด์ผ๋ก ๋ "ํด๋์ค์ ๊ฐ์" ๊ฒ์ผ๋ก ๋ค์ ์์ฑํ ์ ์์์ง๋ง Less ๋ ธ๋์ ์๋ ๊ธฐ๋ฅ ์์ ํจํด์ ์ด๋ ์ ๋ ์ ์งํ์ผ๋ฉฐ ํ๋ก์ ํธ์ ๊ฐ๋ ฅํ ๋ฉ๋ชจ๋ฅผ ๋จ๊ธธ ๊ฒ์ ๋๋ค. ๋ค์๋ ์ด๋ฐ ์ง์ ํ์ง ์๋ ๋ฏธ๋์ ๊ด๋ฆฌ์.
Math=always ๋ชจ๋์์ ๋ช ์์ ์ผ๋ก ์ปดํ์ผํ์ฌ ์ด์ ์ํ ๋์์ ์ป์ ์ ์์ต๋๋ค. ๊ทธ๋ฅ ๋ค๋ฅธ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค.
๋๋ ์ด๊ฒ์ ์๊ณ ์๋ค. ์ฌ๋ฌ ํ์ ๊ฑธ์ณ ๋ง์ Less ์ฝ๋๋ฒ ์ด์ค๊ฐ ์์ผ๋ฏ๋ก ๊ธฐ๋ณธ ์ปดํ์ผ ์ต์ ์ ๋ณ๊ฒฝํ๋๋ผ๋ ํต์ ๋น์ฉ์ด ์ฆ๊ฐํฉ๋๋ค. ์ด์ ์ด ๊นจ์ง ๊ฐ์น๊ฐ ์๋์ง ํ์คํ์ง ์์ต๋๋ค.
์์ธํ ๋ถํด ๊ฐ์ฌํฉ๋๋ค!
์ปดํ์ผ๋ ์ถ๋ ฅ์์ Object.assign
์ ์ฌ์ฉ๋ฒ์ ๋ณด์์ต๋๋ค. ์ฆ, ์ด์ ํด๋ฆฌํ์ด ํ์ํ์ง ์๋ ํ ๊ธฐ๋ณธ ES class
๊ตฌ๋ฌธ์ ์ง์ํ๋ ๋ธ๋ผ์ฐ์ ์์๋ง ์๋ํฉ๋๋ค. ๋ฐ๋ผ์ ์ด์ ํ๊ฒฝ(์: IE11, Node 4 ๋ฑ)์ ๋ํ ์ง์์ ์ค๋จํ๋ ค๋ ๊ฒฝ์ฐ ES5๋ก ๋ณํํ์ง ์๊ณ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๊น?
๋์์ ์ฑ๋ฅ ์ ํ ์์ ๊ณผ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ถ๋ฆฌํ ์ ์๋ค๋ฉด ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ์ฆ, v3์ ์ฑ๋ฅ ์์ ์ฌํญ์ ์ ์ฉํ๊ณ v4์๋ง ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ํฌํจํ๋ ๊ฒ์ ๋๋ค.
@matthew-dean
ES ์์
์ด ๋ฒ์ธ์ด๋ผ๋ ์ฌ์ค์ด ์ ๋ง ๋ฌด์ญ์ต๋๋ค.
์์ธํ ๋ถ์ ๊ฐ์ฌํฉ๋๋ค.
ํ์๋ก ์ด๋: _์์๋ณด๋ค ๊ตฌ์ฑ_ ๐
์ฐธ๊ณ ๋ก; ๋ ๊น๋ํ ์ํ ์์ ์ฒด์ธ์ ์ํ๋ฉด ์ค์ ๋ก ์์ ์ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ์ํํด์ผ ํฉ๋๋ค.
Object.create
๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ ๊ฒฝ์ฐ:
var Node = function() {
this.foo = 'bar';
}
Node.prototype = Object.create();
Node.prototype.constructor = Node;
var Inherited = function() {
Node.prototype.constructor.call( this );
this.value = 1;
}
Inherited.prototype = Object.create( Node.prototype );
Inherited.prototype.constructor = Inherited;
var myNode = new Inherited();
๊ทธ๋ฐ ๋ค์ ๋์ผํ ๋ชจ์์ ๊ณต์ ํ๋ ์ธ์คํด์ค ์์ฒด์ ์์ฑ์ ๋ณํฉํฉ๋๋ค. ํ๋กํ ํ์ ์ ๋ชจ์์ ๊ณต์ ํฉ๋๋ค. _๋ฐ_ ๊ฐ ์์ฑ ์ก์ธ์ค์ ๋ํด ํ๋กํ ํ์ ์ฒด์ธ์ ํฌ๋กค๋งํ ํ์๊ฐ ์์ต๋๋ค. ๐
@์ ์คํฐ๋ค์ค
์ปดํ์ผ๋ ์ถ๋ ฅ์์ โโObject.assign์ ์ฌ์ฉ๋ฒ์ ๋ณด์์ต๋๋ค. ์ฆ, ์ด์ ํด๋ฆฌํ์ด ํ์ํ์ง ์๋ ํ ๊ธฐ๋ณธ ES ํด๋์ค ๊ตฌ๋ฌธ์ ์ง์ํ๋ ๋ธ๋ผ์ฐ์ ์์๋ง ์๋ํฉ๋๋ค. ๋ฐ๋ผ์ ์ด์ ํ๊ฒฝ(์: IE11, Node 4 ๋ฑ)์ ๋ํ ์ง์์ ์ค๋จํ๋ ค๋ ๊ฒฝ์ฐ ES5๋ก ๋ณํํ์ง ์๊ณ ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๊น?
๋๋ ๊ทธ๊ฒ์ด ์ณ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ฆ Object.assign์ด ํด๋์ค ๊ตฌํ ์ง์ ์ ์ฐฉ๋ฅํ์ง๋ง ๊ทํ์ ์์ ์ ์ฑํ๋์์ต๋๋ค. ๋๋ [Something].prototype.property
๊ณ์ํด์ ์ฐ์ง ์๊ธฐ๋ฅผ ๋ฐ๋์ต๋๋ค./
๊ธฐ์ ์ ์ผ๋ก ๋ชจ๋ ๊ฒ์ด ์ฌ์ ํ ํธ๋์คํ์ผ ์ค์ด๋ฏ๋ก ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์๋์ ๋ชฉํ๋ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํ๊ณ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋ ๊ธฐ๋ฐ์ด์์ต๋๋ค. ์ด๋ค ํ๊ฒฝ์์ Object.assign polyfill์ด ํ์ํ๋ค๋ฉด ๊ทธ๋ ๊ฒ ํ์ธ์. Less๊ฐ ์ง์ํ์ง ์๋ ๋ฒ์ ์ผ ๊ฒ์ ๋๋ค.
๋์์ ์ฑ๋ฅ ์ ํ ์์ ๊ณผ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ถ๋ฆฌํ ์ ์๋ค๋ฉด ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ์ฆ, v3์ ์ฑ๋ฅ ์์ ์ฌํญ์ ์ ์ฉํ๊ณ v4์๋ง ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ํฌํจํ๋ ๊ฒ์ ๋๋ค.
๋๋ ๊ทธ๊ฒ์ ๋ํด ์๊ฐํ๊ณ ์์ผ๋ฉฐ, ๊ทธ๊ฒ์ด ๋ํ ์ ๋นํ ์ง์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๋จ์ง Less์ 3๊ฐ์ง ์ฃผ์ ๋ฒ์ ์ ๊ตฌ์ถ/์ ์งํ๋ ๊ฒ์ด ํญ๋ฐํ์ง ์๋๋ก ํ๋ ค๊ณ ํฉ๋๋ค.
@rjgotten AFAIK ๊ทธ๊ฒ์ด ๋ฐ๋ก ํด๋์ค ํจํด์ด ์ ์ํ ๋๋ก ์ํ๋์ด์ผ ํ๋ ์์
์
๋๋ค. ๋ด๊ฐ ๊ฒฐ์ ์ ์ธ ์ฐจ์ด๋ฅผ ๋ณด์ง ์๋ ํ. ๊ทธ๋์ ๐คทโโ๏ธ . ๋๋ ๊ทธ๊ฒ์ด ์ค์ ์ด ์ฐ์ํ ๋ค์ ์ดํ์ ๋
ธ๋ ์์ ํจํด์ ๋ณ๊ฒฝํ๋ ค๊ณ ํ์ง ์์๊ฑฐ์ผ (๋ค๋ฅธ I์ด ์ ๊ฑฐ ํ ์ ์์ต๋๋ค๋ณด๋ค Object.assign
@Justineo ์ ์์ผ๋ก ์ ํ๋ฅผ.)
@Justineo @rjgotten ์ด๊ฒ์ ์๋ํ ์ ์์ต๋๊น: [email protected]+b1390a54
๋ฐฉ๊ธ ์๋ํ์ต๋๋ค.
| ๋ฒ์ | ์๊ฐ |
| -- | -- |
| v3.9.0 | ~1.6์ด |
| v3.10.0~v3.11.1 | ~3.6์ด |
| v3.11.2+ | ~12์ด |
| 4.0.1-์ํ.2+b2049010 | ~1.6์ด |
| 3.13.0-alpha.10+b1390a54 | ~4.7์ด |
์ถ์ . Node.js v12.13.1๋ก ํ ์คํธํ์ต๋๋ค.
๋๋.... ๋ญ.
๋ณ๋์ ๋ฒค์น๋งํฌ๋ฅผ ์ค์ ํ ์๊ฐ์ด ์์์ต๋๋ค.
๊ทธ๋ฌ๋ ํตํฉ ํ
์คํธ ๊ด์ ์์ ๋ณผ ๋ ์ค์ ์์น๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. Less๋ฅผ ์ฌ์ฉํ๋ ํ๋ก๋์
๊ธ Webpack ํ๋ก์ ํธ์ ๋์ ๊ฒฐ๊ณผ์
๋๋ค.
๋ฒ์ | ์๊ฐ | ํผํฌ ๋ฉ๋ชจ๋ฆฌ
:------------------------|--------:|------------:
3.9 | 35376ms | 950MB
3.11.3 | 37878ms | 920MB
3.13.0-alpha.10+b1390a54 | 34801ms | 740MB
3.13.1-์ํ.1+84d40222 | 37367ms | 990MB
4.0.1-์ํ.2+b2049010 | 35857ms | 770MB
์ ์๊ฒ 3.13.0์ _best_ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํฉ๋๋ค... ๐
3.11.3์ ์ด์ ์ 3.11.1 ๋ฒ์ ์์ ๋ณด์๋ ๋ฐ์ด์จ์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋ฌ๋ 4.0.1 ๋ฐ 3.13.0 ๋ฒ ํ๊ฐ ์ฌ์ ํ ๋ ์ข์ต๋๋ค.
์บ์๋ฅผ ๋ณต์ํ 3.13.1์ ์ค์ ์ปดํ์ผ ์๊ฐ์ ๊ฐ์ ํ๋ ๋ฐ ๋์์ด ๋์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ๋ถํ๋ฆด ๋ฟ์ ๋๋ค.
@rjgotten ์, ๋ฌธ์ ๋ ์ด ์ค๋ ๋์์ ์ฌ๋๋ค์ด ์๋ก ๋ค๋ฅธ ๊ฒ์ ์ธก์ ํ๊ณ ์์ผ๋ฉฐ ์ง๊ธ๊น์ง ๋ชจ๋ ์ฌ๋์ด ๋ณธ์ง์ ์ผ๋ก ๋ณต์ ํ ์ ์๋ ๊ฐ์ธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค(Less ๋ฒค์น๋งํน์ ์ ์ถํ๊ฑฐ๋ ์ด๋ฅผ PR๋ก ๋ณํํ์ง ์๊ณ ). Less์๋ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ค๋ฅธ ํด๋ก ์ ๋ํด ์ฌ์ฉํ ์ ์๋ ๋ฒค์น๋งํฌ ํ ์คํธ๊ฐ ์์ด ๊ตฌ๋ฌธ ๋ถ์/ํ๊ฐ ์๊ฐ์ ์ฐจ์ด๋ฅผ ์ง์ ํ์ธํ ์ ์์ง๋ง ์บ์ฑ์ด (ํ์ฌ) ์ ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ.
๋ค์์ ํธ๋ฆฌ์ ๋ํ ์์ ๋ณ๊ฒฝ ์ฌํญ๊ณผ ๊ตฌ๋ฌธ ๋ถ์ ํธ๋ฆฌ ์บ์๊ฐ ๋ณต์๋ ๊ฒ์๋ ๋น๋์
๋๋ค. [email protected]+e8d05c61
https://github.com/ecomfe/dls-tooling/tree/master/packages/less-plugin-dls
| ๋ฒ์ | ์๊ฐ |
| -- | -- |
| v3.9.0 | ~1.6์ด |
| v3.10.0~v3.11.1 | ~3.6์ด |
| v3.11.2+ | ~12์ด |
| 4.0.1-์ํ.2| ~1.6์ด |
| 3.13.0-์ํ.10| ~4.7์ด |
| 3.13.0-์ํ.12 | ~1.6์ด |
v12.13.1
๋์๊ฒ ์ด ๋ฒ์ ์ ์๋ฒฝํ๊ฒ ์๋ํ๋ ๊ฒ ๊ฐ๋ค. ๋๋ฃ๋ค์๊ฒ ์๋ํด ๋ณด๊ณ ํ์ธํ๋๋ก ์์ฒญํ๊ฒ ์ต๋๋ค.
๋๋ฅผ ์ํด alpha.10
๋ณด๋ค ์ฝ๊ฐ ๋ ๋์๊ฒ ์๋ํ์ง๋ง ์ฐจ์ด๊ฐ ์์ ์๋ ์์ต๋๋ค.
๋ฒ์ | ์๊ฐ | ํผํฌ ๋ฉ๋ชจ๋ฆฌ
:------------------------|--------:|------------:
3.9 | 35376ms | 950MB
3.11.3 | 37878ms | 920MB
3.13.0-alpha.10+b1390a54 | 34801ms | 740MB
3.13.0-alpha.12+e8d05c61 | 36263ms | 760MB
3.13.1-์ํ.1+84d40222 | 37367ms | 990MB
4.0.1-์ํ.2+b2049010 | 35857ms | 770MB
@matthew-dean, ๋ด ์ฝ๋๊ฐ ์์ง 4.0.1-alpha.2+b2049010
๋ณ๊ฒฝ ์ฌํญ๊ณผ ํธํ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋์ง ํ์ธํ๊ณ ์๋ํด ๋ณด๊ฒ ์ต๋๋ค.
@rjgotten ๋ค, ๊ทธ ์ฐจ์ด๋ ๊ทํ์ ํ ์คํธ ์ฌ๋ก์์ ์ฌ์ํ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ ๊ฒฐ๊ณผ๋ 3.x์ 4.0 ๋ฆด๋ฆฌ์ค๋ฅผ ๋ชจ๋ ์ค๋นํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ ์ํ์์ 4.0์ ํธ์ํ๊ณ ์ถ์ง ์์์ต๋๋ค. ๊ณ ๋ง๊ฒ๋ ๊ทธ๋ ๊ฒ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ด๊ฐ ํ ๋ ๋ค๋ฅธ ํญ๋ชฉ์ ํน์ ๋ฒค์น๋งํฌ ์๊ณ๊ฐ ์๋๋ก ๋จ์ด์ง๋ฉด ๋ ์คํจํ๋ CI ํ์ดํ๋ผ์ธ์ ๋ฃ๋ ๊ฒ์ ๋๋ค.
@jrnail23 4.0 ์ํ๋ฅผ ์คํํ๋๋ก ์์ ํ ์ ์์ผ๋ฉด [email protected]+e8d05c61
์๋ํ ์ ์์ต๋๊น?
@matthew-dean, ๋ด ๋น๋์ ๋ํด ๋ค์์ ์ป์ต๋๋ค.
๊ทธ๋์ ๋น์ ์ ๋น์ ์ด ์ํ๋ ๊ณณ์ผ๋ก ๋์๊ฐ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค! ์ ํ์ จ์ด์!
์ ํ์ จ์ด์!
๋ค, ๋ ๋ฒ์งธ๋ก ๊ฐ๊ฒ ์ต๋๋ค. ์ ์ผ; ๊ทธ๋ฆฌ๊ณ ๋ค ๋ฒ์งธ.
์ด๊ฒ์ ์ ๋ง _๋ง์_ ๋
ธ๋ ฅ์ ๋ค์ฌ ์ ๊ฑฐํ๋ ๋ถ์พํ๊ณ ๋ถ์พํ ์ฑ๋ฅ ํ๊ท์์ต๋๋ค.
์์ _๋งค์ฐ ์_ ์๋ฃํ์ต๋๋ค.
์ข์ ํ! ์ ๋ 3.x ๋น๋๋ฅผ ๊ฒ์ํ ์์ ์ด๋ฉฐ ๋์ค์ ์ธ์ ๊ฐ๋ ์๋ง๋ ๋ค์ ์ฃผ์ 4.0์ ๊ฒ์ํ ๊ฒ์ ๋๋ค. ์ด์ ๋ ๋ค ์ฑ๋ฅ ์์ ์ฌํญ์ด ์์ด์ผ ํฉ๋๋ค. ๋๋ฒ๊น ์ ๋์์ ์ฃผ์ ๋ชจ๋ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ์ ๋ ํ์ฌ Less.js ์ฝ๋๋ฒ ์ด์ค๋ฅผ TypeScript๋ก ๋ณํํ๋ ๊ณผ์ ์ ์์ผ๋ฉฐ, ๊ทธ ๊ธฐํ๋ฅผ ์ด์ฉํด ์ฝ๊ฐ์ ์ฑ๋ฅ ํ๋/๋ฆฌํฉํ ๋ง์ ํ ๊ณํ์ ๋๋ค. ๊ด์ฌ ์๋ ์ฌ๋์ด ์์ผ๋ฉด ๊ธฐ๊บผ์ด ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค! https://github.com/matthew-dean/less.js/compare/master...matthew-dean:next
์ถ๊ฐ ๋์ ์ ํธํ๋ ํน์ ๋ถ๋ถ์ด ์์ต๋๊น? ํ๋ณด๊ฐ ๋๋ฌด ์ปค์ ์ด๋์๋ถํฐ ์์ํด์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ์ด
@kevinramharak ๊ณต์ ํ ์ง๋ฌธ์ ๋๋ค. ์์งํ TypeScript๋ก ๋ณํํ๋ ๊ณผ์ ์์ ์์์น ๋ชปํ ๋๊ด์ ๋ถ๋ชํ(ํด๊ฒฐํ๊ธฐ ์ด๋ ค์์ง ์ค๋ฅ), ์ง๊ธ์ ์์ ๋ค์ ์๊ฐํ๊ณ ์์ต๋๋ค. Less๋ ์๋ ๊ทธ๋๋ก ์ ์คํ๋๊ณ ์์ผ๋ฉฐ, ์๋ก์ด ์ธ์ด ๊ธฐ๋ฅ์ ๋ํ ์์ด๋์ด๋ฅผ ์๋ก์ด ์ฌ์ ๋ฒ์ ์ผ๋ก ์ฎ๊ธฐ๊ธฐ๋ก ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์ (๋ฆฌํฉํ ๋ง/์๋ก์ด ์ธ์ด ๊ธฐ๋ฅ์ ๋ ์ฝ๊ฒ ์ถ๊ฐํ๊ธฐ ์ํด) ๋ณํํ๊ณ ์ถ์๋ ๋ง์ ์ด์ ๊ฐ ์ด์ ๋ฌด์๋ฏธํฉ๋๋ค. ์ฒ๋ฆฌ ์ธ์ด. ์๊ธฐ ํ๋ณด๋ฅผ ํ๊ณ ์ถ์ง ์์ผ๋ ์์ธํ ๋ด์ฉ์ ์ํ์๋ฉด ํธ์ํฐ๋ ์งํฐ๋ก DM์ฃผ์ธ์.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ข์ ํ! ์ ๋ 3.x ๋น๋๋ฅผ ๊ฒ์ํ ์์ ์ด๋ฉฐ ๋์ค์ ์ธ์ ๊ฐ๋ ์๋ง๋ ๋ค์ ์ฃผ์ 4.0์ ๊ฒ์ํ ๊ฒ์ ๋๋ค. ์ด์ ๋ ๋ค ์ฑ๋ฅ ์์ ์ฌํญ์ด ์์ด์ผ ํฉ๋๋ค. ๋๋ฒ๊น ์ ๋์์ ์ฃผ์ ๋ชจ๋ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค!