https://github.com/less/less.js/issues/2541์์ ํ์ง๋ง ํ๋ก์ ํธ์์ ์ด๊ฒ์ ๋ณด์์ต๋๋ค.
// mixins.less
.background(@image) {
background-image: data-uri(@image);
}
// app/content/button.less
button {
.background("images/btn.jpg");
}
app/content/images/btn.jpg
์์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ฌ ๊ฒ์ผ๋ก ์์ํ์ง๋ง images/btn.jpg
์์ ๊ฐ์ ธ์ต๋๋ค.
์ด ๋ณ๊ฒฝ ์ฌํญ์ด ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ธ์ง ๋ฒ๊ทธ ์์ ์ธ์ง์ ๋ํ ํผ๋๋ฐฑ์ ํ์ํฉ๋๋ค.
์ด ๋ณ๊ฒฝ ์ฌํญ์ด ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ธ์ง ๋ฒ๊ทธ ์์ ์ธ์ง์ ๋ํ ํผ๋๋ฐฑ์ ํ์ํฉ๋๋ค.
์ฐธ๊ณ : ์์ฃผ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ผ๋ก ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๊นจ์ง ์๊ณ ์ฐ์ํ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
ํ์ฌ data-uri()
ํจ์๋ ๋ฌธ์์ด์ ํ์ผ ๊ฒฝ๋ก๋ก ํฌํจํ๋ Quoted
ํธ๋ฆฌ ๋
ธ๋๋ฅผ ํ์ฉํ๊ณ ํจ์ ํธ์ถ์ ํฌํจํ๋ ํ์ผ ์์น์ ๋ํ URL๋ก ๋ด๋ถ์ ์ผ๋ก ํด์ํฉ๋๋ค. data-uri
ํจ์๋ฅผ ์ค๋ฒ๋ก๋ํ์ฌ ์ค์ URL์ ๋ณด์ ํ Url
ํธ๋ฆฌ ๋
ธ๋๋ ํ์ฉ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒํ๋ฉด URL์ด url()
CSS ํจ์๊ฐ ํธ์ถ ๋ ์์น์ ๋ํด ์ ๊ทํ๋์ด์ผํ๋ฉฐ ๋ ์ด์ data-uri()
Less ํจ์์์ ๋ด๋ถ์ ์ผ๋ก ์ ๊ทํ๋์ง ์์์ผํฉ๋๋ค.
์
// app/content/button.less
button {
.background(url("images/btn.jpg"));
}
๋ฟก๋ฟก
๋์๊ฒ๋ ์์ ์ด ์๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ฒ๋ผ ๋ณด์
๋๋ค. ์ถ๊ฐ ๋ฐ๋ณต์์ ๊ทธ๋ค์ url
๋ฅผ ๋ฏน์ค ์ธ์ผ๋ก ์ด๋ํ์ฌ ์์ธํ ๋ด์ฉ์ ํผํ๋ ค๊ณ _ ํ ๊ฒ์ด๋ฉฐ _ ๋ฌธ์ ๊ฐ ๋ค์ ๋ฐ์ํฉ๋๋ค. ๋ ๋ค๋ฅธ ๋ฌธ์ ๋์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์๋ ์ฌ์ฉ ์ฌ๋ก (# โโ2541)๋ฅผ ์ทจํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฃผ ์ฌ์ฉ๋๋ค๋ ๊ฒ์
๋๋ค.
// mixins.less
.background(@image) {
background-image: data-uri("@{image}.jpg");
}
// app/content/button.less
button {
.background("images/btn");
}
(์๋ฅผ ๋ค์ด ๊ธ๊ผด-ํ์ด์ค ๋ฏน์ค ์ธ์ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋ฌ woff
, ttf
, eot
, eot?#iefix
๋ฑ์ด ๊ฐ์ ํ์ผ ์ด๋ฆ์ ์ถ๊ฐ๋ฉ๋๋ค. ). ์ด๋ ๊ฒํ๋ฉด ์ด์ url
๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
@ seven-phases-max
๊ทธ๋ ๋ค๋ฉด ์ ์ ํ ํด๊ฒฐ ๊ธฐ๊ฐ์ด ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์๋ URL์ด ํด์๋์ด์ผํ๋ ์ปจํ
์คํธ๋ฅผ ํ๋ณํ๋ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค. data-uri()
ํจ์์ ๋ค์ด๊ฐ๋ ๋ฌธ์์ด ๊ฐ์ ์ ์ํ ํ์ผ์ ํ์ผ ์ ๋ณด์์ ํด๋น ์ปจํ
์คํธ๋ฅผ ๊ฐ์ ธ ์ค๊ฑฐ๋ url()
ํจ์์ Url
ํธ๋ฆฌ ๋
ธ๋.
๊ฒฝ๋ก ๋ณ์ ๋์ฒด๋ฅผ ์ง์ํ๋ ค๋ฉด ๊ฒฝ๋ก์ ๋ค์ํ ๋ถ๋ถ์ ์ ๊ทํํด์ผํ๋ ๋ฐฉ๋ฒ์ ํ์ ํด์ผํ๊ธฐ ๋๋ฌธ์ ์ํฉ์ด ๋น ๋ฅด๊ฒ ๊น๋ค๋ก์์ง๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด ์ด๋ป๊ฒ ์ ๊ทํํฉ๋๊น?
// mixins.less
.background(@image) {
background-image: data-uri("../../@{image}.jpg");
}
// app/content/button.less
button {
.background("../images/btn");
}
์๋ URL ํ์ธ๊ณผ์ด ๋ ๊ฒฝ๋ก์ ํ ํฐ ๋์ฒด ๊ธฐ๋ฐ ์กฐํฉ์ ์ด๋ป๊ฒ ๊ฒฐํฉ ํ์๊ฒ ์ต๋๊น?
ํ ๊ฐ์ง ์ต์
์ ๋์ฒด์ ํ ํฐ์ด url()
๋๋ data-uri()
๋ก ๋ค์ด๊ฐ๋ ์ต์ข
URL ๊ฐ์ ๋จธ๋ฆฌ์์์ ๋ ๋์ฒด์ ํ ํฐ์ผ๋ก ๋์ฒด๋๋ ๋ฌธ์์ด์ ์ ์ํ๋ ํ์ผ์ ๋ํด์๋ง ํด๊ฒฐํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ ๋ค๋ฅธ ํด๊ฒฐ์ฑ
์ ๊ฒฝ๋ก๋ฅผ ๊ฒฐํฉํ๊ฑฐ๋ ํ์ผ ํ์ฅ์๋ฅผ ์ถ๊ฐ / ์ ๊ฑฐ / ํธ์งํ๋ ์ผ๋ถ ๊ฒฝ๋ก ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ ๋์
ํ๊ณ ( unit()
ํจ์๊ฐ ์ฐจ์์ ๋ํด ์๋ํ๋ ๋ฐฉ์๊ณผ ์ ์ฌํฉ๋๊น?) ์ํฉ์ ๋ ๋ช
ํํ๊ฒ ๋ง๋๋ ๊ฒ์
๋๋ค.
์
// mixins.less
.background(@image) {
background-image: data-uri(extension(<strong i="21">@image</strong>, "jpg"));
}
// app/content/button.less
button {
.background(url("./images/btn"));
}
์ฒซ ๋ฒ์งธ ์์์๋ ํน๋ณํ ์ ๊ทํ๊ฐ ํ์ํ์ง ์์ต๋๋ค. "../../@{image}.jpg"
๋ ์์ฑ๋๋๋ก "../../../images/btn.jpg"
ํ์ฅ๋ฉ๋๋ค (๊ทธ๋ฐ ๋ค์ ๊ฒฝ๋ก๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ต๋ data-uri
๋ฉ๋๋ค).
๊ทธ๋ฆฌ๊ณ ๋ ๋ฒ์งธ ์๋ ๋จ์ง ... ํจ์๋ฅผ ์์์ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํด ํจ์๋ฅผ ์๋ ๊ฒ์
๋๋ค ... ์ ํํ ๋ฌด์์
๋๊น? ๋ค๋ฅธ ํ์ผ์ ์ ์ ๋ ๋ฏน์ค ์ธ์ ํธ์ถ ํ ๋ _ ์๋ชป๋ _ ํ์ผ ๊ฒฝ๋ก?
์ด์จ๋ .background(url("images/btn.jpg"));
์ ํจ๊ป "์์๋๋ก"_only_ ์๋ํด์ผํ๋ค๋ฉด, ๋ณ๊ฒฝ์์ด ์ง์ .background(data-uri("images/btn.jpg"));
๋ฅผ ์์ฑํ๋ ๊ฒ๊ณผ ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ์? :)
์ฆ, ์ด๊ฒ์ด ๊ณ ์ณ์ง๋ค๋ฉด ๊ทธ๊ฒ์ด ์๋ฌด๋ฆฌ ๊นจ์ ธ๋ data-uri
๋ก ๊ณ ์ ๋ ํดํ์ด๋์ด์ผํ๋ค๋ ๊ฒ์
๋๋ค. (์์งํ ๋ ๋์ ์ ๋ต์ด ๋ฌด์์ธ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค : a. ์ด์ ๋ํ ๋ ๋ง์ ๋ณด๊ณ ์ / ์์ฒญ์ ๊ธฐ๋ค๋ฆฐ ๋ค์ (์ถฉ๋ถํ ๊ฒฝ์ฐ) ๋ณ๊ฒฝํ๊ฑฐ๋ b. ๊ฐ๋ฅํ ์ค๋จ ์ํฅ์ ์ต์ํํ๊ธฐ ์ํด ๋ ์ผ์ฐ ์์ ํ์ญ์์ค).
์ฆ, url
๋ฐ data-uri
๊ฐ ์ฒ์์ ์ํธ ๊ตํ ๊ฐ๋ฅํ๋๋ก ์ค๊ณ๋์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค (์ฆ, data-uri
๋ url
์ ํน์ ๋ฒ์ ์ผ ๋ฟ์ด๋ฉฐ CSS url
์ปดํ์ผ๋ฉ๋๋ค ulr
"์ด๋ ๊ฒ"(๊ฐ์ ์ต์
ํฌํจ) ๋์ํ๋ ๋ฐ๋ฉด data-uri
๊ฐ "๊ทธ๋ ๊ฒ"( ์ด์ ๊ฐ์ ์ต์
), ํน์ ๋์์ ์ป์ผ๋ ค๋ฉด data-uri(url())
์ฝค๋ณด๊ฐ ํ์ํฉ๋๋ค. ๋ฏน์ค ์ธ ๋ด์์ " data-uri
์ ํ๋๊ณ url
_out_๋ก ์ ํ๋ฉ๋๋ค --relative-urls: on
"<-Bhrrrr ... :)
๋์๊ฒ๋ ์์ ์ด ์๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ์ถ๊ฐ ๋ฐ๋ณต์์ ๊ทธ๋ค์ url์ mixin์ผ๋ก ์ด๋ํ์ฌ ์์ธํ ์ ๋ณด๋ฅผ ํผํ๋ ค๊ณ ์๋ ํ ๊ฒ์ด๋ฉฐ ๋ฌธ์ ๊ฐ ๋ค์ ๋ฐ์ํฉ๋๋ค.
๋ค ๋์ํฉ๋๋ค.
๋๋ v3 ๋ฆด๋ฆฌ์ค๋ฅผ ์ํด ๋ ์ ์ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์ด๊ณ ์ด๊ฒ์ ๊ณ ์น๊ธฐ ์ํด ์ฒ์ฒํ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
๊ฐ๋ฅํ ๋ชจ๋ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ฐพ์์ ํ๋์ฉ ์๋ ํ ์๊ฐ์ด์์ต๋๋ค. ๋ค๋ฅธ ์์น์ ์ฌ๋ฌ ํ์ผ์ด์๋ ๊ฒฝ์ฐ ์ฝ๊ฐ ์ง๋ฃจํ์ง๋ง ...์ด ๋ฌธ์ ๋ฅผ ์์ ํ ๊ณ ์น ์๋ ์๋ค๋ ๋ฐ ๋์ํ์ง๋ง ์ ์ด๋ ์ ์์ ์ธ ๊ฒฝ์ฐ๋ฅผ ๊ณ ์น ์ ์์ต๋๋ค.
์๋ง๋ resolve()
ํจ์๋ ํด๊ฒฐ ๋ URL์ ํจ์์ ์ ๋ฌํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค (ํ์ง๋ง ์๋ํ์ง ์๋ ์์ ํ ๊ฒฝ๋ก๊ฐ ์๋๊ณ ์ด๊ฒ์ด ์์ ๋์์ ๋ ์์ ํ ๊ฒฝ๋ก๊ฐ ์๋ํ๋ ๊ฒฝ์ฐ ...)
๋นจ๋ฆฌ ์๊ฐ์ ์ ์ด์ ์ฃ์กํฉ๋๋ค.
์ด๊ฒ์ ๊ฐ๋จํ ๋ฉ๋ชจ ์ผ ๋ฟ์ด์ง ๋ง ๋ณ์ ๋ณด๊ฐ์ ์ฌ์ฉํ์ฌ ๊ฐ์ ธ ์ค๊ธฐ์ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ณ์ ๋ณด๊ฐ์ ์ฌ์ฉํ์ฌ ๊ฐ์ ธ ์ค๊ธฐ.
๊ทธ๊ฒ์ ํฅ๋ฏธ๋กญ๊ณ ๋ถ์ํฉ๋๋ค.
์ค์ ๋ก ์ง์๋๋ ์ฌ์ฉ ์ฌ๋ก์
๋๊น ์๋๋ฉด ์ฐ์ฐ์ ์ผ์น์
๋๊น?
@rjgotten ์ง์๋์ง๋ง ์ง์์ด ๋ค์ ์ ํ๋ฉ๋๋ค. # 410์์ ์ถ์ ๋์์ต๋๋ค.
์ด๊ฒ์ ์๋ํฉ๋๋ค :
<strong i="8">@variable</strong>: "path.less";
<strong i="9">@import</strong> "@{variable}";
์ด๊ฒ์ํ์ง ์์ต๋๋ค :
.mixin(@variable) {
<strong i="13">@import</strong> "@{variable}";
}
ํธ์ง : ๋งํฌ๊ฐ ์๋ํ๋๋ก ์์ ๋์์ต๋๋ค.
๋ฏน์ค ์ธ์์ @import
๋ณ์๋ฅผ ์ง์ํ๊ณ ์ถ์์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ ์ฒด ๋ณ์ ๊ฐ์ ธ ์ค๊ธฐ๋ ์ฝ๊ฐ์ ๋ง์ ์ด๊ณ ๋ฐ ์ง๊ด์ ์ธ ์ฝ๋๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๊ทธ๋์ ์ ๋ ๊ทธ๊ฒ์ ๊ถ์ฅํ์ง ์์ต๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํ ๋ง์ ๋ ผ์๊ฐ ์์ต๋๋ค. ์ค์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๊น? data-uri๊ฐ ์ฒ๋ฆฌ์ค์ธ ํ์ผ์ ์๋์ ์ด์ด์ผํ๋ค๋ ๊ฒ์ด ๋ถ๋ช ํ์ง ์์ต๋๊น?
์ง๊ธ์ ๋ค๋ฅธ ๊ฒฝ๋ก์์ _a reference_๋ฅผ ๊ฐ์ ธ ์ค๋ ํ์ผ์ด ์์ผ๋ฉฐ ์ฌ์ ํ data-uri์ ๋ํด ๋ถํํฉ๋๋ค. ์ ์ด๋ ๊ทธ๊ฒ์ ๋ฒ๊ทธ ์ผ ๊ฒ์ ๋๊น? ์ฐธ์กฐ๋ก ๊ฐ์ ธ ์ค๋ฉด ํ์ฌ ํ์ผ๊ณผ ๊ด๋ จ๋ ๊ฒฝ๋ก๋ฅผ ๋ค์ ์ฐ์ง ์์์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
@Ciantic
์ฐธ์กฐ๋ก ๊ฐ์ ธ ์ค๋ฉด ํ์ฌ ํ์ผ๊ณผ ๊ด๋ จ๋ ๊ฒฝ๋ก๋ฅผ ๋ค์ ์ฐ์ง ์์์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
์ ํํ ๋ฌด์์ ๋ฐํ์ผ๋ก? reference
์ ๋ฌด์จ ๊ด๋ จ์ด ์์ต๋๊น?
์ง๊ธ์ ๋ค๋ฅธ ๊ฒฝ๋ก์์ ์ฐธ์กฐ๋ฅผ ๊ฐ์ ธ ์ค๋ ํ์ผ์ด ์์ผ๋ฉฐ ์ฌ์ ํ data-uri์ ๋ํด ๋ถํํฉ๋๋ค.
์์ ๋ฌธ์ ์ ๋ฐ๋๋๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ ์์ธํ ์ ๋ณด๋ฅผ ์ ๊ณตํด ์ฃผ์๊ฒ ์ต๋๊น? (์ : ๊ฐ์ ธ ์ค๊ธฐ, ๊ฐ์ ธ ์ค๊ธฐ ๋ฐ ๋ฐ์ดํฐ ํ์ผ์ ๊ฒฝ๋ก ๋ฑ).
styles.less
.something {
background: data-uri("some.svg");
}
sub / test.less
<strong i="11">@import</strong> (reference) "../style.less";
.test {
color: green;
}
style.less๋ฅผ ์ปดํ์ผํ์ง๋ง test.less์ ์๋์ ์ธ data-uri๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ test.less๊ฐ ์๋๋๋ค.
์ฐธ์กฐ ๊ฐ์ ธ ์ค๊ธฐ๊ฐ ๊ฒฝ๋ก๋ฅผ ๋ค์ ์์ฑํ๋ ค๊ณ ์๋ํ๋ ์ด์ ๋ ๋ด ์๊ฒฌ์ผ๋ก๋ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ ๋ ํ์ํ์ง ์์ต๋๋ค.
data-uri๊ฐ ์ต์ ์ URL ์ฌ ์์ฑ ๊ท์น์ ๋ฐ๋ฅด๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค. ๋ฌผ๋ก .... ๊ทธ๊ฒ์ด data-uri์์ ์ค์ ๋ก ์๋ฏธํ๋ ๋ฐ๋ฅผ ๋งํ๊ธฐ๋ ์ด๋ ต์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก data-uri๋ ".less ํ์ผ ํธ์ถ"์ ๊ธฐ์ค์ผ๋ก ํ์ธ๋์ด์ผํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฏน์ค ์ธ์ ๊ฒฝ์ฐ ๋ฏน์ค ์ธ ์์น๊ฐ ์๋๋ผ ๋ฏน์ค ์ธ์ด ํธ์ถ ๋ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ธ๋์ด์ผํฉ๋๋ค. ๋ฏน์ค ์ธ์ ์ด๋ฌํ ์ง์ ์ "ํผํฉ"ํ ๋ค์ ํด๊ฒฐํฉ๋๋ค. ๊ทธ๋์ @lukeapage ๊ทํ์ ํด์์ด ์ ํํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
// app/content/button.less
button {
.background("images/btn.jpg");
}
app/content/images/
์์ btn.jpg๋ฅผ ์ฐพ์์ผํฉ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ฏน์ค ์ธ์ด ์๋ํ๋ ๋ฐฉ์์ด ์๋๊ธฐ ๋๋ฌธ์ ๋ฒ๊ทธ์
๋๋ค. ๋๋ ๊ทธ๊ฒ์ด "๋ธ๋ ์ดํน ์ฒด์ธ์ง"๊ฐ ์๋๋ผ ๋ฒ๊ทธ ์์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ฆ ... ๋ค์๊ณผ ๊ฐ์ด ํด๊ฒฐํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
Node.js๋ ํด๊ฒฐ์ ์ํด ์ฌ๋ฌ ๊ฒฝ๋ก๋ฅผ ์๋ํฉ๋๋ค. ํด๊ฒฐ ์์๊ฐ ๋ช ํํ๊ฒ ๋ฌธ์ํ๋์ด ์์ผ๋ฉด ๊ธฐ๋์น๋ฅผ ๊ด๋ฆฌ ํ ์ โโ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ ๊ฒํ๋ ๊ฒ์ ๋๊ตฐ๊ฐ๊ฐ ํ๋ # 2๋ฅผํ์ง ์์๋ค๋ฉด, ๋ชจ๋ ๊ฒฝ์ฐ๋ ์๋๋๋ผ๋ ๊ฑฐ์ ๋ชจ๋ ์ํฉ์์ ์ฌ์ ํ ์๋ ํ ๊ฒ์์ ์๋ฏธํฉ๋๋ค.
@ ๋งคํ ๋
์ผ๋ฐ์ ์ผ๋ก data-uri๋ ".less ํ์ผ ํธ์ถ"์ ๊ธฐ์ค์ผ๋ก ํ์ธ๋์ด์ผํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฏน์ค ์ธ์ ๊ฒฝ์ฐ ๋ฏน์ค ์ธ ์์น๊ฐ ์๋๋ผ ๋ฏน์ค ์ธ์ด ํธ์ถ ๋ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ธ๋์ด์ผํฉ๋๋ค. ๋ฏน์ค ์ธ์ ์ด๋ฌํ ์ง์ ์ "ํผํฉ"ํ ๋ค์ ํด๊ฒฐํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ ์ฌ์ฉ ์ฌ๋ก์ ๋ํด ์ฌ๋ฐ๋ฅธ ๋ฐฉ์์ผ๋ก ์๋ํ๋๋ก ๋ง๋ค ์๋ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๋์ฒด ํ ํฐ์ด ์ฑ์์ง ์ผ๋ถ ์๋ ค์ง ๊ธฐ๋ณธ ํด๋์ ๋ํด ํด๊ฒฐ๋์ด์ผํ๋ ๋งค๊ฐ ๋ณ์ํ ๋ URL, ์ฆ ๋์ฒด ํ ํฐ์ด์๋ URL์ ์ด๋ป๊ฒ ์ง์ํฉ๋๊น? ์ด ๊ฒฝ์ฐ์๋ ํธ์ถ์์ ํ์ผ์ด ์๋ ์์ ์์ ํ์ผ์ ๋ํ ์ฌ ๋ฑ๋ก์ด ํ์ํฉ๋๋ค.
๋๋ ์ฝ ์ฌ์ดํธ์์ url()
๋ฅผ ๋ช
์ ์ ์ผ๋ก ์ฌ์ฉํ์ง ์๊ณ ์ด๊ฒ์ ํฌ๋ช
ํ๊ฒ ์์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ฝ๊ฐ์ ๊นจ๋ฌ์์ ์ป์์ต๋๋ค. @ seven-phases-max๋ ๋น์ฐํ ๋์ ์๊ฐ์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค (๋๊ตฐ๊ฐ๊ฐ ๊ฒฐ๊ตญ _will_ ์๋ํ๊ธฐ ๋๋ฌธ์
๋๋ค. mixin ํธ์ถ๋ก ๋ฆฌํฉํฐ๋งํ๊ณ ์์
์ ์ค๋จํ์ญ์์ค) :
Quoted
๋ฆฌํฐ๋ด ๋
ธ๋๊ฐ ์์ฑ๋๋ฉด ํด๋น ํ์ผ ์ ๋ณด๋ฅผ ์ ์งํฉ๋๋ค. ๋ณ์ ํ ๋น, ๋ฏน์ค ์ธ ํธ์ถ ๋ฑ์ ํตํด ํด๋น ์ ๋ณด๋ฅผ ์ ํํฉ๋๋ค. ํธ์ถ์ ํ์ผ์์ ์์ฑ ๋ ๋ชจ๋ Quoted
๊ฐ์ url()
๋๋ data-uri()
๋ก ์ฒ๋ฆฌ ๋ ๋ ํด๋น ํธ์ถ์ ํ์ผ์ ๋ํด ํ์ธ๋ฉ๋๋ค. . ๊ทธ๋ฌ๋ ๋ฏน์ค ์ธ์ ๋ด๋ถ ๋ก์ง์ ์ผ๋ถ์ธ Quoted
๊ฐ์ ์ฌ์ ํ โโ๋ฏน์ค ์ธ์ ๋ก์ปฌ ํ์ผ์ ๋ํด ํด๊ฒฐ๋ฉ๋๋ค.
๋ชจ๋ ๊ฒ์ด ์์๋๋ก ์๋ํ๋๋ก ์ ์งํ๊ณ ๋ค์๊ณผ ๊ฐ์ ๋์ฒด ๋ฌธ์์ด์ ์ฌ์ฉํ์ฌ ์๋๋ฆฌ์ค๋ฅผ ์ ์ฅํฉ๋๋ค.
// mixins.less
.background(@image) {
background-image: data-uri("@{image}.jpg");
}
// app/content/button.less
button {
.background("images/btn");
}
์ด๋ฅผ ๊ณ ์น ์์๋ ํธ๋ฆญ๋ ์์ต๋๋ค. ๋์ฒด ํ ํฐ์ ์ฑ์ธ ๋ ํ ํฐ์ด ๋์ฒด ๋ฌธ์์ด์ ๋งจ ์ฒ์์ ์์ผ๋ฉด ๊ฒฐ๊ณผ ๋ฌธ์์ด์ ์ฑ์์ง ํ ํฐ์์ ํ์ผ ์ ๋ณด๋ฅผ ์์ํด์ผํฉ๋๋ค. ๋์ฒด ๋ฌธ์์ด์.
mixin ์์ฒด ์์ฑ์์ ์๋๊ฐ mixin ํ์ผ์ ๋ํด ์ด๋ฌํ ๊ฒฝ๋ก๋ฅผ ํ์ธํ๋ ๊ฒ์ด๋ผ๋ฉด "./@{image}.jpg"
๋ฅผ ํจํด์ผ๋ก ์ฌ์ฉํ์ฌ ํด๋น ์์
์ ์ํ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ ํ๋ฅผ ๊ฑด ์ฌ๋์ ์ฑ
์ ๋ถ๋ด์ ํจ๊ณผ์ ์ผ๋ก ์ด๋์ํฌ ์ ์์ต๋๋ค.
// _mixins.less
.sprite(@image) {
background: data-uri("../images/sprites/@{image}.png") no-repeat;
}
// main.less
div {
.sprite('logo');
}
์ฐ์ถ:
div {
background: url(data:image/png;base64,...) no-repeat;
}
์์ฐ, ์ด๊ฒ์ ์์ฃผ ์ค๋๋ ๊ฒ์ ๋๋ค ....์ด ๋ฌธ์ ๋ ์ ์๊ฒ๋ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
url ํจ์์ ์ต์ ์ ์ถ๊ฐํ๊ฑฐ๋ URL์ ์ ๋์ ์ผ๋ก ํด๊ฒฐํ ์ ํจ์๋ฅผ ๋ง๋๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ์ด๋ ๊ฒํ๋ฉด mixin์ด ์ค์ ๋ ์์น์ ๊ด๊ณ์์ด ์ ๋ ๊ฒฝ๋ก๋ก ์๋ํ๊ณ ์ค์์ ์ฌ์ง๊ฐ ์์ต๋๋ค.
url ํจ์์ ์ต์ ์ ์ถ๊ฐํ๊ฑฐ๋ URL์ ์ ๋์ ์ผ๋ก ํด๊ฒฐํ ์ ํจ์๋ฅผ ๋ง๋๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ์ด๋ ๊ฒํ๋ฉด mixin์ด ์ค์ ๋ ์์น์ ๊ด๊ณ์์ด ์ ๋ ๊ฒฝ๋ก๋ก ์๋ํ๊ณ ์ค์์ ์ฌ์ง๊ฐ ์์ต๋๋ค.
์ฌ๊ธฐ์ ๋ฌธ์ ๋ ์ ๋ ๊ฒฝ๋ก์ ์๋ ๊ฒฝ๋ก์ ๊ดํ ๊ฒ์ด ์๋๋๋ค. ํธ์ถ ์ฌ์ดํธ์ ๋ํ ์๋ ๋ ์ ์ธ ์ฌ์ดํธ์ ๋ํ ์๋์์ต๋๋ค. ์์ ํ ๋ค๋ฅธ ๋ฌธ์ ์ ๋๋ค.
๋ฌธ์ ๊ฐ ๋ฐ์ ํ์ ์๋ ์์ง๋ง, ์ด๊ธฐ ์ฃผ์๊ณผ ์ ๋ชฉ์ ๋ฐ์ดํฐ -uri๊ฐ ํธ์ถ ๋ ํ์ผ๊ณผ ๊ด๋ จ๋ ๊ฒฝ๋ก๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ๊ดํ ๊ฒ์ด๋ฉฐ, ๋ค๋ฅธ ๊ณณ์ ๋ฐฐ์น ๋ ๋ฏน์ค ์ธ๊ณผ ๊ฒฐํฉํ๋ฉด ๊ฒฝ๋ก๊ฐ ์๋ชป ํด๊ฒฐ ๋ ์ ์์ต๋๋ค. ๊ทธ๊ฒ ์ ๊ฐ ๊ฒช๊ณ ์๋ ๋ฌธ์ ์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์๋ฃจ์ ์ผ๋ก์ ์ ๋ ๊ฒฝ๋ก๋ ์ด๋์ ์ํฅ์ ๋ฏธ์น ๊น์?
data-uri๊ฐ ์ ๋ ๊ฒฝ๋ก๋ฅผ ๋ฐ์๋ค์ด๊ณ ์ ๊ด์ ์ธ absolute-url
ํจ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๋ฉด ๋ค์ ์ฝ๋๋ ๋ฏน์ค ์ธ ์์น์ ๊ด๊ณ์์ด ์๋ํฉ๋๋ค.
// mixins.less
.background(@image) {
background-image: data-uri(@image);
}
// app/content/button.less
button {
.background(absolute-url("images/btn.jpg"));
}
@ miljan-aleksic "์ ๋"๋ data-uri
์์น์์๋ ํ์ผ๊ณผ ๊ด๋ จ์ด ์๋ค๋ ๋ป์
๋๊น? ๊ทธ๋ ๋ค๋ฉด "์ ๋์ "์ ์๋ง๋ ์๋ชป๋ ์ฉ์ด ์ผ ๊ฒ์
๋๋ค.
URL์ ๋ํ ๊ธฐ๋ฅ์ ๋ํผ์ฒ๋ผ ๋ชจ๋ URL์ ํ์ผ ์๋๋ก ๋ง๋๋ ๊ฒ์ด ์ข์ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ๋๋ url ()์ ๋ํ ์ถ๊ฐ ์ธ์์ ๋๋ค.
@ matthew-dean, ์ ๋์ ์ผ๋ก ํ์ผ์ ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ์๋ฏธํฉ๋๋ค. ์ : /users/myuser/projects/lessproject/icon.svg
.
url ()์ด ubication์ ์์ง ๋ชปํ๊ณ data-uri ์์น ํ์ผ์ ๋ํ ์๋ ๊ฒฝ๋ก๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ ๊ทผ ๋ฐฉ์์ ์ป์ง ๋ชปํฉ๋๋ค.
URL์ ๋ํ ๊ธฐ๋ฅ์ ๋ํผ์ฒ๋ผ ๋ชจ๋ URL์ ํ์ผ ์๋๋ก ๋ง๋๋ ๊ฒ์ด ์ข์ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ๋๋ url ()์ ๋ํ ์ถ๊ฐ ์ธ์์ ๋๋ค.
์ถฉ๋ถํ ์ฌ๋ฏธ์๊ฒ; ์ด๊ฒ์ด ์ ๊ฐ ๋ช ๋ ์ ์ ์ ์ํ ๊ฒ์ ๋๋ค. ;-)
์ ๋์ ์ผ๋ก ํ์ผ์ ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ์๋ฏธํฉ๋๋ค. ์ : /users/myuser/projects/lessproject/icon.svg.
์ด absolute-url
ํจ์๋ absolute-url
ํจ์๊ฐ ํธ์ถ ๋ ํ์ผ์ ์์น๋ฅผ โโ๊ธฐ๋ฐ์ผ๋ก ์ ์ฒด ์ถ๋ ฅ ๊ฒฝ๋ก์ ์ ๋ฌ ๋ ์๋ ๊ฒฝ๋ก๋ฅผ _pre-resolves_ํฉ๋๋ค. ์ปดํ์ผ ๋ ์ถ๋ ฅ CSS ํ์ผ์ด ์ด๋ํ ์์น๋ฅผ ๊ธฐ์ค์ผ๋กํฉ๋๋ค.
์ฆ, ๋ ๋ค ๊ฐ์ ๋ป์ ๋๋ค. ๊ทธ ๋น์ ๋์ฒ๋ผ.
์ปดํ์ผ ๋ ์ถ๋ ฅ CSS ํ์ผ์ด ์ด๋ํ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก absolute-url ํจ์๊ฐ ํธ์ถ๋๋ ํ์ผ์ ์์น๋ฅผ โโ๊ธฐ์ค์ผ๋ก ์ ์ฒด ์ถ๋ ฅ ๊ฒฝ๋ก๋ก ์ง์ ๋ฉ๋๋ค.
์์์ ๊ฐ์ด ์ฌ ์์ฑ URL ๋๋ ๋ฃจํธ ๊ฒฝ๋ก๋ ์ฌ์ ํ ์ ์ฉ๋์ง๋ง ์ ์ ์์น๋ฅผ โโ๊ธฐ๋ฐ์ผ๋กํฉ๋๊น? ์ด๋ ์ถ๋ ฅ๊ณผ ๊ด๋ จ๋ URL์ด ์๋๋ผ _ โโ์ปดํ์ผ ์ค _ URL์ ๋ํด ์ด์ผ๊ธฐํ๋ @lukeapage ์ ์๋ ์์ ์๋ ์ฝ๊ฐ ๋ค๋ฅธ ๊ฒ ๊ฐ์ต๋๋ค. ์ : data-uri()
์์น.
๋ฐ๋ผ์์ด ๋ฌธ์ ๋ ์ฌ๋๋ค์ด ์ ์ฌํ์ง๋ง ์ ํํ ๋์ผํ ๋ฌธ์ ์ ๋ํด ๊ฒ์ํ๊ธฐ ๋๋ฌธ์ ์ถ์ ํ๊ธฐ๊ฐ ์ฝ๊ฐ ์ด๋ ต์ต๋๋ค. ์ฆ, ์๋ _source_๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ์๋ _output_์ ๋ณ๊ฒฝํ๋ ๊ฒ๊ณผ๋ ํจ์ฌ ๋ค๋ฅธ ์๋ฃจ์ ์ด ํ์ํ ์ ์์ต๋๋ค. ์๋๋ฉด ์๋ ์๋ ์์ต๋๋ค. ๊ฒฝ๋ก ์ง์ ๋ ผ๋ฆฌ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ๊ทธ๋ฌ๋ data-uri๊ฐ ์ถ๋ ฅ์ผ๋ก ์ด๋ค ๊ฒฝ๋ก๋ ์์ฑํ์ง ์๋๋ค๋ ์ ์ ๋ถ๋ช ํํด์ผํฉ๋๋ค.
resolve()
๊ฐ์ ๊ฒ์ด ํ์ํ ๊น์? ๋ชฐ๋ผ์, ๊ทธ๋ฅ ๋ฑ์ด ๋ด์ง ๋ง url(resolve(file(), "my/path"))
? @ miljan-aleksic์ด absolute()
์์ ์๋ฏธํ๋ ๋ฐ๋ ์ ๋ URL๋ก ํด์๋๋ค๋ ์ ์์ ๊ทธ๋ ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ ํ ์
๋ ฅ์ ๋ฐ์์ผํฉ๋๋ค (์ file()
, ํด๊ฒฐํ๋ ค๋ฉด). ๊ทธ๋ ์ง ์์ผ๋ฉด file-resolve()
์ ๊ฐ์ ์์
์ ์ํํ์ฌ ํด๋น ๋
ผ๋ฆฌ๋ฅผ ํ๋์ ํจ์์ ์ง์ ํ ์ ์์ง๋ง resolve()
๋ฐ file()
๋ฅผ ๋ ๊ฐ์ ํจ์๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ณ์ ์ผ๋ก ์ ์ฉ ํ ์ ์์ต๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ ๋ํ ๊น๋ค๋ก์ด ๋ถ๋ถ์ ๋ชจ๋ ์ฌ ์์ฑ URL ์ต์ ์ด๋ฉฐ, ๊ทธ ์ค ์ด์ ๋ชจ๋ ์ง์์ ์ถ๊ฐ ํ PR ๋ณํฉ์ ๋ํด ๋ ๋ง์ ์ต์ ์ด ์์ต๋๋ค. (https://github.com/less/less.js/pull/3248). ๊ทธ๋ ๋ค๋ฉด ํ์ผ ์๋ URL์ ๋ฐํํด๋ ๋ค์ ์์ฑํ ์ ์์ต๋๊น? ๊ทธ๋ ๋ค๊ณ ์๊ฐํ์ง๋ง ๋ช ํํด์ผํฉ๋๋ค.
์, resolve () ๋ฐ file ()์ ๋ด๊ฐ ์ค๋ช ํ๋ ค๋ ๋ด์ฉ์ ์ ํํ ์ ์ํฉ๋๋ค. ๊ฐ๊น์ด ์ฅ๋์ ์ด๊ฒ์ด ๊ตฌํ ๋ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@ miljan-aleksic ์ข์์, ๊ทธ๋ผ ๋ง์ด ๋๋ค์.
์ฌ์ค, file()
๋ ์ณ์ง ์์ต๋๋ค. ๋ด๊ฐ ์๊ฐํ๋ ํ์ผ ์ด๋ฆ์ ๋ฐํํ๋ฏ๋ก dir()
์ ๋น์ทํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ง๋ ํ์ผ ๋น ๋ณ์ ์์ ์ฌ์ผํฉ๋๋ค.
๋ ์ด๋:
data-uri(resolve(<strong i="10">@DIR</strong>, "my/path"))
๋ฐ๋ผ์ ๋ ๊ฐ์ง๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. 1) ๊ฒฝ๋ก๋ฅผ ๊ฒฐํฉํ๋ resolve () ํจ์, 2) ํ๊ฐํ๋ ๋์ ๊ฐ ํ์ผ์ ์ฝ์
๋ @DIR
(๋ฐ @FILE
?) ์์. ๊ทธ๊ฒ์ ๋ํ ์ ์ผํ ๊น๋ค๋ก์ด ์ ์ ์ฃผ์
๋ ๋ณ์๊ฐ ๋ฃจํธ์ ๋ค๋ฅธ ๋ณ์๋ฅผ ์ฌ์ ์ํ๊ฑฐ๋ ๋ณํฉํ์ง ์๋์ง ํ
์คํธํ๋ ๊ฒ์
๋๋ค.ํ์ง๋ง ํ
์คํธํ๊ธฐ๋ ๋งค์ฐ ๊ฐ๋จํด์ผํฉ๋๋ค. ์๋๋ฉด @arguments
์ฒ๋ผ ์๋ฌธ์ ์ฌ์ผํฉ๋๊น? ์ด ๊ฒฝ์ฐ ์ถฉ๋์ ํผํ๊ธฐ ์ํด @directory
๋ฐ @filename
๋ฅผ ์ ์ํฉ๋๋ค. ๊ฐ์ฅ ์ ์ ์ต์
์ ๋ฌด์์
๋๊น?
resolve()
๊ฐ์ ๊ฒ์ด ํ์ํ ๊น์?
^ ๋น๊ณ . ์ ํํฉ๋๋ค.
๊ฐ์ฅ ์ ์ ์ต์ ์ ๋ฌด์์ ๋๊น?
Node.js-y ์ต์
์ ์ ํํ๊ฒ ์ต๋๋ค : __dirname
๊ทธ๊ฒ์ ์ค๋ซ๋์ ์ฃผ๋ณ์ ์์๊ณ ์ ์๋ ค์ ธ ์์ต๋๋ค. Less์์ ๋์ผํ ๊ฐ๋
์ ๋์ผํ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
Node.js-y ์ต์ ์ ์ ํํ๊ฒ ์ต๋๋ค : __dirname
Err ... Less / CSS ํค์๋ ๋ Less ๋ณ์ ๋๋ ํจ์ ์๋ฏธ์ ์ผ์นํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ๋ณด๋ค ๋ ์ํด์ผํฉ๋๋ค. @__dirname
์๋ง๋ ์ธ์ด์ ๋ํด์๋ ๋ฐ์ค์ด ์ฝ๊ฐ ์ด์ํฉ๋๋ค. ์ ํ ๋ง์ง ์์ต๋๋ค.
๋ฐ์ค์ ์ธ์ด์ ๋ํด ์ฌ์ ํ ์ฝ๊ฐ ์ด์ํฉ๋๋ค. ์ ํ ๋ง์ง ์์ต๋๋ค.
์ด์ค ๋ฐ์ค์ ๋ง์ ์ธ์ด์์ '์์คํ ์ด ์ ๊ณตํ๋ ๊ฒ'์ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ํนํ ๋ด์ฌ ๋ณ์์ ๊ฐ์ ๊ฒฝ์ฐ์ ํนํ ๊ทธ๋ ์ต๋๋ค. ๋ฐ๋ผ์ ์์น๋ฅผ ๋ฒ์ด๋ ๊ฒ์ด ์ผ์ข ์ ์์ ์ ๋๋ค.
๋ฌผ๋ก ์ด์ผ; ๋ง์์ ๋ค์ง ์์ผ๋ฉด @dirname
๋๋ @dir-name
์ ๊ฐ์ ํ์ ์ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋ํด ์ข ๋ ์๊ฐํด ๋ณด๋ฉด ์ ์ฐ๋ฆฌ๋ ๋ณ์๋ก ๋
ธ์ถ ๋ ํ์ฌ ํ์ผ ๊ฒฝ๋ก๋ฅผ _ ํ์๋ก ํ๋๊ฐ? ๊ฐ๋
์ ์ธ resolve()
ํจ์ ์์ฒด์ ํตํฉ ํ ์ ์์ต๋๊น?
๊ฐ๋ ์ resolve () ํจ์ ์์ฒด์ ํตํฉ ๋ ์ ์์ต๋๊น?
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ํจ์ ์ด๋ฆ์ผ๋ก ์ ์ ์์ผ๋ก ๋์ ์์ต๋๋ค. ๋๋ ์ฌ์ ํ ๊ทธ๊ฒ์ ๊ฐ์ฅ ์ข์ํ๊ณ resolve ()๋งํผ ๋ ์ข์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ํจ์ ์ด๋ฆ์ผ๋ก ์ ์ ์์ผ๋ก ๋์ ์์ต๋๋ค.
์ผ์ข ์.
๋ด๊ฐ ์ป๋ ๊ฒ์ resolve()
ํจ์์ ๋ํ ํธ์ถ์ ๋ณด์ ํ๋ ํ์ผ์ URL / ๊ฒฝ๋ก๋ฅผ ์ ๋ฌํ ํ์๊ฐ ์๋ค๋ ๊ฒ์
๋๋ค. ํด๋น ์์น๋ ํจ์์ ๋ํด _known_์ด์ด์ผํ๊ธฐ ๋๋ฌธ์
๋๋ค.
ํจ์ ๋ด this
๋ currentFileInfo
์์ฑ์ด์๋ FunctionCaller
์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
ํด๋น ์์ฑ์ ํจ์ ํธ์ถ์ ํด๋นํ๋ Call
AST ๋
ธ๋์ ํ์ผ ์ ๋ณด๋ก ์ด๊ธฐํ๋ฉ๋๋ค.
์ฆ
์ฝ๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฝ๊ณ ์๋ ๊ฒฝ์ฐ ํ์ผ ์ ๋ณด๋ ํจ์ ํธ์ถ์ด ํ๊ฐ๋๋ ํ์ผ์ด ์๋๋ผ ํจ์ ํธ์ถ์ด _declared_ ์ธ ์์น์ ํ์ผ ์ ๋ณด์ ํด๋นํฉ๋๋ค.
์ฆ, 'eager'URL ๋ฆฌ์กธ๋ฒ๋ฅผ ์ํด์ด ํ์ผ ์ ๋ณด๋ฅผ ์ฌ์ฉํด๋ ๊ด์ฐฎ์ต๋๋ค. ํจ์ ํธ์ถ์ด ๋ค๋ฅธ ํ์ผ์ ์ปจํ ์คํธ ๋ด์์ ๊ฐ์ ธ ์์ ํ๊ฐ๋๋ ๋ฏน์ค ์ธ ๋ด๋ถ์ ๋ฐฐ์น ๋๋๋ผ๋ ์์๋๋ก ์๋ํฉ๋๋ค. ์ฆ : ๋ฏน์ค ์ธ์ด ์ ์ ๋ ํ์ผ์ ๊ณ ์ ๋ ํด์๋๋ก.
๊ทธ๋ฌ๋ ์ด์ ๋ํด ์ข ๋ ์๊ฐํด ๋ณด๋ฉด ์ ํ์ฌ ํ์ผ ๊ฒฝ๋ก๊ฐ ๋ณ์๋ก ๋ ธ์ถ๋์ด์ผํฉ๋๊น? ๊ฐ๋ ์ resolve () ํจ์ ์์ฒด์ ํตํฉ ๋ ์ ์์ต๋๊น?
์๋ฌด๋ ํ์ฌ ํ์ผ์ด๋ ์ผ๋ฐ ๋ฆฌ์กธ๋ฒ ํจ์๊ฐ ํ์ํ์ง ์๋ค๊ณ ํ์ ํ๋ ๊ฒฝ์ฐ ... ์๋ง๋ ... ๋ช
์ ์ ๋ก์ปฌ var๊ฐ ์ผ๋ฐ ํจ์๊ฐ ์๋๋ฉฐ ํจ์๊ฐ ๋ค์๊ณผ ๊ฐ์ด ํ๊ฐ๋์ง ์์์ ๋ถ๋ช
ํํฉ๋๋ค. ๋ค๋ฅธ ๊ธฐ๋ฅ. ๊ทธ๊ฒ์ด ๋์ ์ง์ ํ ๊ด์ฌ์ฌ์ด๋ฉฐ ์๋ฏธ๋ก ์
๋๋ค. ์ด๋ฆ์ ์๊ด์์ด "ํ์ฌ ํ์ผ"์ ๋ํ ํน๋ณํ "๋ง์ปค"๊ฐ ์๋ค๋ฉด ์
๋ ฅ์ ๋ฐ๋ผ ๋์ผํ๊ฒ ํด๊ฒฐ๋๋ ๋ค๋ฅธ ํจ์์๋ ๋ค๋ฆ
๋๋ค. ์ฆ, ๋ณด์ด์ง ์๋ ์
๋ ฅ์ ๋ฐ๋ผ ํด๊ฒฐ๋๋ ๊ธฐ๋ฅ์ด๋ฉฐ ์ ์ ๊ด๋ จ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํจ์๊ฐ current-file-resolve()
๊ณผ ๊ฐ์ด ๋งค์ฐ ๋ช
์ ์ ์ด๋ผ๋ฉด ์ถฉ๋ถํ ๋ช
ํ ํ ์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด mixin์ด ์ ์ ๋ ํ์ผ ๋์ mixin ํธ์ถ์ด ํธ์ถ ๋ ํ์ผ์ ๋ฐ๋ผ specialfunction()
ํด๊ฒฐํ์ง ๋ชปํ ์ด์ ๋ฅผ ์ฌ๋๋ค์๊ฒ ํผ๋ํ๊ฒ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์๋์, ๋ก์ปฌ ๋ณ์๋ ๊ธฐ์ ์ ์ผ๋ก _needed_๊ฐ ์๋์ง๋ง ์๋ฏธ / ์ถ๋ ฅ / ๋์์ ์๋ฏธ์์ ๋ช ํํด์ผํฉ๋๋ค.
ํ ...
ํ์ธ. ๊ทธ๋ฐ ๋ค์ resolve-url(url, [base])
ํจ์-์ต์
์ธ base
๊ฐ์๋ ๊ฒ์ ์ด๋ป this.fileInfo
๋ง ๊ฐ์ ธ ์์ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ ธ ์ค๋ declared-dir()
ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ค๋ฅธ ํ์ผ์์ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ถ์ต๋๋ค. ๋๋ URL ํ์ธ๊ณผ ๊ด๋ จ์ด์๋ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ผ๋ถ๋ก ์ฌ์ฉํด์ผํฉ๋๋ค.
์ฆ, ์ ์ฒด ์์ ํธ์ถ (์์ ์ ๊ธฐ๋ฐ ์์)์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
resolve-url("../foo", declared-dir())
... ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฅํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค
resolve-url("../foo")
... ์ด๋ ๊ฒ์ผ๋ฅธ ์ฌ๋์ ํด๋นํ๋ ์ด๋ง์ ๋๋ค.
url("../foo")
๊ทธ๋ฐ ์์ผ๋ก '์๋'์ฃผ์
๋ ๋ณ์๋ ํ์ํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ์์ ํ ์ผ๋ จ์ ํ๋ฌ๊ทธ์ธ ๊ธฐ๋ฅ์ผ๋ก ๊ตฌํ ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ํ์๋กํ๋ ์ ์ผํ ํต์ฌ ๋ฉ์ปค๋์ฆ์ URL์ '์ด๋ฏธ ํด๊ฒฐ๋จ'์ผ๋ก ํ์ํ์ฌ resolve-url
ํจ์์์ ๋์ค๋ URL์์ ๊ธฐ๋ณธ ํ์ธ์ ๋
ผ๋ฆฌ๊ฐ ์คํ๋์ง ์๋๋ก ์ฐจ๋จํ ์์๋ ๋ฐฉ๋ฒ์
๋๋ค.
์๋ฏธ๋ก ์ ๊ณผ์ ๋ฌธ์์์ ๋ช
ํํด์ผํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฌธ์๋ url
์ resolve-url
๋ฅผ ๋ช
์ ์ ์ผ๋ก ๋น๊ตํ์ฌ ์ด๋งํ๊ณ ๊ฒ์ผ๋ฅธ ํ๊ฐ / ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ ์ ์์ต๋๋ค.
๊ฐ์ ธ์จ ํ์ผ์ ๋ฒ์๊ฐ ๋์ผํ๊ธฐ ๋๋ฌธ์ "์ฃผ์ ๋ ๋ณ์"์์ด๋์ด๊ฐ ์ด์จ๋ ์๋ํ์ง ์๋ ๊ฒฝ์ฐ (์ถ๊ฐ ํดํน์์ด).
<strong i="7">@__dir</strong>: "whatever";
// *everywhere* it's the only <strong i="8">@__dir</strong> value = the path of "c"
<strong i="9">@import</strong> "a";
<strong i="10">@import</strong> "b";
<strong i="11">@import</strong> "c";
ํจ์ ๊ธฐ๋ฐ ๊ตฌํ์ ๋ํด ๋งํ์๋ฉด, this.context.?
๋๋ this.context.frames[?]
์ด๋๊ฐ์์ ํจ์๊ฐ ํธ์ถ๋๋ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ฌ์ ํ ์ป์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค (ํ์ ํ ์๋ ์์ต๋๋ค). ์ ๋.
์, ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์๋์?
์๋ ํ์ธ์.
์, ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์๋์?
๊ฒ์ผ๋ฅธ ํ๊ฐ๋ก ์ธํด ์ ๋๋ก ํด๊ฒฐํ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต์ต๋๋ค.
@ seven-phases-max
ํจ์ ๊ธฐ๋ฐ ๊ตฌํ์ ๋ํด ๋งํ์๋ฉด,this.context.?
๋๋this.context.frames[?]
์ด๋๊ฐ์์ ํจ์๊ฐ ํธ์ถ๋๋ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ฌ์ ํ ์ป์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค (ํ์ ํ ์๋ ์์ต๋๋ค). ์ ๋.
๊ณ์ธต ๊ตฌ์กฐ์์ Call
๋
ธ๋๋ฅผ ์ฐพ์ ์ ์์ด์ผํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํ ...
ํ์ธ. ๊ทธ๋ฐ ๋ค์
resolve-url(url, [base])
ํจ์-์ต์ ์ธbase
๊ฐ์๋ ๊ฒ์ ์ด๋ปthis.fileInfo
๋ง ๊ฐ์ ธ ์์ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ ธ ์ค๋declared-dir()
ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ค๋ฅธ ํ์ผ์์ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ถ์ต๋๋ค. ๋๋ URL ํ์ธ๊ณผ ๊ด๋ จ์ด์๋ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ผ๋ถ๋ก ์ฌ์ฉํด์ผํฉ๋๋ค.์ฆ, ์ ์ฒด ์์ ํธ์ถ (์์ ์ ๊ธฐ๋ฐ ์์)์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
... ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฅํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค
... ์ด๋ ๊ฒ์ผ๋ฅธ ์ฌ๋์ ํด๋นํ๋ ์ด๋ง์ ๋๋ค.
๊ทธ๋ฐ ์์ผ๋ก '์๋'์ฃผ์ ๋ ๋ณ์๋ ํ์ํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ์์ ํ ์ผ๋ จ์ ํ๋ฌ๊ทธ์ธ ๊ธฐ๋ฅ์ผ๋ก ๊ตฌํ ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ํ์๋กํ๋ ์ ์ผํ ํต์ฌ ๋ฉ์ปค๋์ฆ์ URL์ '์ด๋ฏธ ํด๊ฒฐ๋จ'์ผ๋ก ํ์ํ์ฌ
resolve-url
ํจ์์์ ๋์ค๋ URL์์ ๊ธฐ๋ณธ ํ์ธ์ ๋ ผ๋ฆฌ๊ฐ ์คํ๋์ง ์๋๋ก ์ฐจ๋จํ ์์๋ ๋ฐฉ๋ฒ์ ๋๋ค.์๋ฏธ๋ก ์ ๊ณผ์ ๋ฌธ์์์ ๋ช ํํด์ผํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฌธ์๋
url
์resolve-url
๋ฅผ ๋ช ์ ์ ์ผ๋ก ๋น๊ตํ์ฌ ์ด๋งํ๊ณ ๊ฒ์ผ๋ฅธ ํ๊ฐ / ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ์ ์์ต๋๋ค.