Less.js: ParseError :ยซDIV {๋„ˆ๋น„ : 500px \ 9}ยป๋กœ ์ธ์‹ ํ•  ์ˆ˜์—†๋Š” ์ž…๋ ฅ

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

๋‹ค์Œ์œผ๋กœ ๊ตฌ๋ฌธ ๋ถ„์„ ์„ฑ๊ณต :

DIV {
    width: 500px\9;
}

ParseError :์—์„œ ์ธ์‹ ํ•  ์ˆ˜์—†๋Š” ์ž…๋ ฅ :

DIV { width: 500px\9 }

์ด ๊ตฌ๋ฌธ์€ https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

bug medium priority

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

https://github.com/less/less.js/issues/1538 ์€ ๋” ์ ์€ ์ฐธ์กฐ๋กœ bootstrap4 css๋ฅผ ๊ฐ€์ ธ ์˜ค๋Š” ๋™์•ˆ ์ €์—๊ฒŒ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค (bootstrap4๋Š” ๋” ์ด์ƒ dist๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค).

<strong i="7">@import</strong> (less, reference) "~bootstrap/dist/css/bootstrap.css";
 @ /node_modules/bootstrap/dist/css/bootstrap.css (line 4475, column 31)
 near lines:

   <strong i="10">@media</strong> screen and (min-width: 0\0) {
     .progress {

์ด๊ฒƒ์€ ์ •๋ง ๋ฒ„๊ทธ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. @ seven-phases-max @lukeapage ? ๊ฐ์‚ฌ!

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

๋„ค, ์ด๊ฒƒ์€ # 284์—์„œ ์–ธ๊ธ‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ €๋Š” ์ด๊ฒƒ์ด ๋ฒ„๊ทธ๋กœ ๊ฐ„์ฃผ๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
500px\9 ๋Š” ์‹ค์ œ๋กœ ์œ ํšจ ํ•˜์ง€ ์•Š์€ ๊ฐ’ ( "ํ‘œ์ค€"๋ธŒ๋ผ์šฐ์ €์˜ ๊ฒฝ์šฐ 500px? ๊ฐ™์œผ๋ฏ€๋กœ ๋ฌด์‹œ ํ•จ)์ด์žˆ๋Š” ์œ ํšจํ•œ CSS ๊ตฌ๋ฌธ์ด๋ฏ€๋กœ ๊ธฐ์ˆ ์ ์œผ๋กœ Less๋Š” ์ „๋‹ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@harobed ๋‹น์‹ ์€ ๋˜ํ•œ ์ถœ๋ ฅ css๊ฐ€ ์•„๋‹Œ ๋ถ€ํŠธ ์ŠคํŠธ๋žฉ ๋‚ด๋ถ€์—์„œ ์†Œ์Šค๋ฅผ ๋œ ๊ฐ€์ ธ์™€์•ผํ•ฉ๋‹ˆ๋‹ค.

@lukeapage ์—๋Š” Less ์†Œ์Šค๊ฐ€ ์•„๋‹Œ ์ปดํŒŒ์ผ ๋œ Bootstrap ํŒŒ์ผ์„ ๊ฐ€์ ธ ์˜ค๋ ค๋Š” ๋ช‡ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ํ˜„์žฌ๋กœ์„œ๋Š” ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค / ์ ‘๋‘์‚ฌ (์˜ˆ : .bs {<strong i="6">@import</strong> (less) 'bootstrap.css';} ๋ž˜ํ•‘ ๋œ ๋ถ€ํŠธ ์ŠคํŠธ๋žฉ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ ์˜ค๊ฑฐ๋‚˜ ๋™์ ์œผ๋กœ ์ƒ์„ฑ ๋œ ํŠน์ • ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค (Less ์†Œ์Šค ๋‚ด์—์„œ ํ™•์žฅ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—).
์ด๋Ÿฌํ•œ ํŠน์ • ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์ถ•์†Œ๋˜์ง€ ์•Š์€ bootstrap.css ๊ฐ€์ ธ ์˜ค๋Š” ๊ฒƒ์€ ๋™์ผํ•˜๋ฉฐ Less๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค ( width: 500px\9; ๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์ปดํŒŒ์ผ๋˜๊ธฐ ๋•Œ๋ฌธ์—). ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋ฏธ์  ๋ฌธ์ œ์™€ ๋” ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ถฉ๋ถ„ํžˆ ๊ณตํ‰ ํ•˜๊ฒŒ,
์šฐ๋ฆฌ๊ฐ€ ๊ณ ์ณ์•ผํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ..

๊ทธ๋Ÿฌ๋‚˜ ์ถ•์†Œ๋˜์ง€ ์•Š์€ ๋ฒ„์ „์œผ๋กœ ๊ตฌ๋ฌธ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.
ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ์„ธ๋ฏธ์ฝœ๋ก ์—†์ด ์ต๋ช… ๊ฐ’์ด ์ž‘๋™ํ•˜๋„๋กํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ต๋ช…์˜ ๊ฐ’์œผ๋กœ ์ž‘๋™ํ•˜๋„๋ก ์‹œ๋„ํ–ˆ์ง€๋งŒ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฑฐ ..

                var match = parserInput.$re(/^([^@+\/'"*`(;{}-]*)(;|(?=\}))/);
                if (match) {
                    return new(tree.Anonymous)(match[1].trim());
                }

๊ทธ๋Ÿฌ๋‚˜ ๊ณต๋ฐฑ ์ž‘๋™์„ ์•ฝ๊ฐ„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์•„๋ž˜๋ฅผ ์–ป์—ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

                var match = parserInput.$re(/^(([^@+\/'"*`(;{}-\s]+|\s*?)+?)\s*(;|(?=\}))/);
                if (match && match[3]) {
                    return new(tree.Anonymous)(match[1]);
                }

๋ฏธ๋ž˜์˜ ๊ตฌํ˜„ ์ž์—๊ฒŒ ๋„์›€์ด๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@lukeapage " @harobed ๋‹น์‹ ์€ ๋˜ํ•œ ์ถœ๋ ฅ css๊ฐ€ ์•„๋‹Œ ๋ถ€ํŠธ ์ŠคํŠธ๋žฉ ๋‚ด๋ถ€์˜ ์†Œ์Šค๋ฅผ ๋œ ๊ฐ€์ ธ์™€์•ผํ•ฉ๋‹ˆ๋‹ค"๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? Less๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๊ณ  ๋‚ด๊ฐ€ ๋งŒ๋“œ๋Š” WordPress Bootstrap ํ…Œ๋งˆ์—์„œ \ 9์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๊นŒ?

@harobed Bootstrap Less ์†Œ์Šค์—๋Š” \9; ๋˜๋Š” ์ด์Šค์ผ€์ดํ”„ ๋œ ~'\9' ์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ๋ช…๋ น๋ฌธ์€ ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ์ž˜ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ œ๋กœ ์ปดํŒŒ์ผํ•˜๋ ค๋Š” ๋‚ด์šฉ๊ณผ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ฐธ์กฐ. ๋‚ด ํ…Œ๋งˆ ๊ฐœ๋ฐœ ํด๋”์—๋Š” src์™€ public์˜ ๋‘ ์ž์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. Bootstrap์€ src / less / bootstrap์— ์žˆ์œผ๋ฉฐ src / less์˜ ์‚ฌ์šฉ์ž ์ง€์ • Less ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ํ…Œ๋งˆ dev ํด๋”์—์„œ lessc src / less / style.less public / style.css๋กœ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ตœ๊ทผ๊นŒ์ง€ ์ž˜ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. clean-css๋ฅผ ์„ค์น˜ ํ•œ ๋‹ค์Œ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ปดํŒŒ์ผ์ด \ 9์— ์˜ค๋ฅ˜๋ฅผ ๋˜์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” npm ์‚ฌ๋žŒ๋“ค๊ณผ ํ•จ๊ป˜ ์ผํ–ˆ์œผ๋ฉฐ ๊นจ๋—ํ•œ ์ œ๊ฑฐ๊ฐ€ ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฏ€๋กœ ๋ฌธ์ œ๊ฐ€๋˜์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์•„์ด๋””์–ด๋ฅผ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ปดํŒŒ์ผ์ด \ 9์— ์˜ค๋ฅ˜๋ฅผ ๋˜์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€์ด ๋ฉ”์‹œ์ง€๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ•ด๋‹น ์ค„์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ๋ฌผ๋ก ์ž…๋‹ˆ๋‹ค. ์ƒ๋žต์„ ์šฉ์„œํ•˜์‹ญ์‹œ์˜ค.

๊ฐ€์žฅ ์ตœ๊ทผ์˜ style.less๋ฅผ ๋ณต์›ํ•˜๊ณ  ์ปดํŒŒ์ผ์ด ๋‹ค์‹œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ๋‚ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, @ seven-phases-max.

์ง€๊ธˆ
DIV { left: 500px\9 }
๊ดœ์ฐฎ์ง€ ๋งŒ
DIV { left: -500px\9 }
์—ฌ์ „ํžˆ ์‹คํŒจ

https://github.com/less/less.js/issues/1538 ์€ ๋” ์ ์€ ์ฐธ์กฐ๋กœ bootstrap4 css๋ฅผ ๊ฐ€์ ธ ์˜ค๋Š” ๋™์•ˆ ์ €์—๊ฒŒ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค (bootstrap4๋Š” ๋” ์ด์ƒ dist๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค).

<strong i="7">@import</strong> (less, reference) "~bootstrap/dist/css/bootstrap.css";
 @ /node_modules/bootstrap/dist/css/bootstrap.css (line 4475, column 31)
 near lines:

   <strong i="10">@media</strong> screen and (min-width: 0\0) {
     .progress {

์ด๊ฒƒ์€ ์ •๋ง ๋ฒ„๊ทธ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. @ seven-phases-max @lukeapage ? ๊ฐ์‚ฌ!

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