Less.js: modifyVarsκ°€ μ „λ‹¬λ˜μ§€ μ•ŠμŒ

에 λ§Œλ“  2018λ…„ 02μ›” 23일  Β·  6μ½”λ©˜νŠΈ  Β·  좜처: less/less.js

λ‹€μŒκ³Ό 같이 λ³€μˆ˜λ‘œ λ‘œλ“œν•  λ³€μˆ˜ νŒŒμΌμ„ κ²°μ •ν•˜λŠ” index.less 파일이 μžˆμŠ΅λ‹ˆλ‹€.

@theme-variant: "a-theme.less";

<strong i="6">@import</strong> "./@{theme-variant}";

ν•΄λ‹Ή 인덱슀 νŒŒμΌμ— λ‘œλ“œλ˜λŠ” 파일이 μ μŠ΅λ‹ˆλ‹€.

<strong i="10">@import</strong> "~theme-variant-variables";

webpack.config.js νŒŒμΌμ—μ„œ λ³€μˆ˜ 값을 μ„€μ •ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

lessOptions.modifyVars = {
   "theme-variant": `"${v}-theme.less"`
}

index.less 파일의 λ‚΄μš©μ„ 직접 κ°€μ Έμ˜¨ 더 적은 파일둜 μ΄λ™ν•˜λ©΄ λͺ¨λ“  것이 μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€. μŠ¬ν”„κ²Œλ„ 덜 두 쀄을 직접 κ°€μ Έμ˜¨ 파일이 적은 파일 자체λ₯Ό κ°€μ Έμ˜€λŠ” 파일이 μž‘λ™μ„ 멈μΆ₯λ‹ˆλ‹€. μ˜ˆμƒ κ΅¬μ„±μœΌλ‘œ 더 적은 λ‘œλ” ν˜ΈμΆœμ„ λ³Ό 수 μžˆμœΌλ―€λ‘œ 더 적은 μ»΄νŒŒμΌλŸ¬κ°€ κ°€μ Έμ˜¨ 더 적은 νŒŒμΌμ— λ³€μˆ˜/μ˜΅μ…˜μ„ μ „νŒŒν•˜μ§€ μ•ŠλŠ”λ‹€κ³  μΆ”μΈ‘ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ˜ˆμƒμΈκ°€μš”?

λͺ¨λ“  6 λŒ“κΈ€

λ‚˜λŠ” 이것이 #2772μ—μ„œμ™€ κ°™λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€ - ν† λ‘ μ˜ 쀑간을 λ³΄μ‹­μ‹œμ˜€(예λ₯Ό λ“€μ–΄ modifyVars λŠ” λ³€μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” νš¨κ³Όκ°€ μžˆμ§€λ§Œ κ΄€μ‹¬μžˆλŠ” import 문이 이미 평가 된 후에 μ˜΅λ‹ˆλ‹€ ). κ·ΈλŸ¬λ‚˜ https://github.com/less/less.js/issues/1400#issuecomment -137128461도 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

κ°„λ‹¨νžˆ λ§ν•΄μ„œ μš”μ μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. import λ¬Έ λ‚΄μ˜ λ³€μˆ˜ 보간은 νŽΈλ¦¬ν•œ κ²ƒμ΄μ§€λ§Œ 지연 평가 원칙과 μ§μ ‘μ μœΌλ‘œ μΆ©λŒν•©λ‹ˆλ‹€. λ”°λΌμ„œ λ³΅μž‘ν•œ ꡬ쑰화에 κ΄€ν•΄μ„œλŠ” μ΄λŸ¬ν•œ μ’…λ₯˜μ˜ μ‚¬μš©μž μ •μ˜λ₯Ό λ‹¬μ„±ν•˜λŠ” λ‹€λ₯Έ 방법을 μ°ΎλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€(예: λ‹€λ₯Έ ν…Œλ§ˆ νŒŒμΌμ— λŒ€ν•΄ λ‹€λ₯Έ 디렉토리λ₯Ό μ‚¬μš©ν•œ λ‹€μŒ ν•΄λ‹Ή paths μ˜΅μ…˜μ„ μ „ν™˜μœΌλ‘œ μ„€μ •).

λ‹΅μž₯을 보내 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. λ³€μˆ˜λŠ” JSμ—μ„œ 직접 κ°€μ Έμ˜¨ 적은 수의 νŒŒμΌμ—μ„œ μ—…λ°μ΄νŠΈλ˜λ©°, λ³€μˆ˜κ°€ μ—…λ°μ΄νŠΈλ˜μ§€ μ•Šμ€ λ‹€λ₯Έ 적은 수의 νŒŒμΌμ—μ„œ κ°€μ Έμ˜¨ 파일일 λΏμž…λ‹ˆλ‹€. 두 경우 λͺ¨λ‘ 게으λ₯Έ 평가가 ν™•μ‹€νžˆ λ°œμƒν•©λ‹ˆκΉŒ? var logic/config μˆ˜μ •μ΄ 덜 κ°€μ Έμ˜¨ νŒŒμΌμ— 적용/μ „λ‹¬λ˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μ•„λ‹ˆλ©΄ λ‚΄κ°€ λ­”κ°€λ₯Ό λ†“μΉ˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

λ³€μˆ˜λŠ” JSμ—μ„œ 직접 κ°€μ Έμ˜¨ 적은 수의 νŒŒμΌμ—μ„œ μ—…λ°μ΄νŠΈλ˜λ©°, λ³€μˆ˜κ°€ μ—…λ°μ΄νŠΈλ˜μ§€ μ•Šμ€ λ‹€λ₯Έ 적은 수의 νŒŒμΌμ—μ„œ κ°€μ Έμ˜¨ 파일일 λΏμž…λ‹ˆλ‹€.

κΈ€μŽ„μš”, 그것보닀 더 κΉŒλ‹€λ‘­μŠ΅λ‹ˆλ‹€. 지연 평가가 μž‘λ™ν•˜λ €λ©΄ μ»΄νŒŒμΌλŸ¬κ°€ μ½”λ“œμ— λ‚˜νƒ€λ‚˜λŠ” μˆœμ„œκ°€ μ•„λ‹Œ μœ ν˜•λ³„ 둜 λ‹€μ–‘ν•œ μ–Έμ–΄ μ—”ν„°ν‹°(λ™μΌν•œ λ²”μœ„ λ‚΄)λ₯Ό 평가해야 ν•©λ‹ˆλ‹€. 즉, (λŒ€λž΅) imports -> mixins - > λ³€μˆ˜.
이제 <strong i="9">@import</strong> "@{var}"; κ°€ μžˆλŠ” 경우 μ»΄νŒŒμΌλŸ¬λŠ” κ°€μ Έμ˜€κΈ°(및 λͺ¨λ“  후속 κ°€μ Έμ˜€κΈ°) 전에 주어진 λ³€μˆ˜λ₯Ό κ°•μ œλ‘œ 평가해야 ν•˜λ©° 이것이 전체λ₯Ό λ§μΉ˜λŠ” κ²ƒμž…λ‹ˆλ‹€(일반적으둜 μ΄λŸ¬ν•œ λ‚¨μš©μ˜ κ²°κ³ΌλŠ” λ‹¨μˆœνžˆ μ •μ˜λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•œ 경우(λŒ€λΆ€λΆ„ 맀우 λ‹¨μˆœν•¨)μ—μ„œ μž‘λ™ν•˜κ³  λ‹€λ₯Έ κ²½μš°μ—λŠ” μž‘λ™ν•˜μ§€ μ•ŠμŒ).

두 가지 μ§μ ‘μ μœΌλ‘œ μΆ©λŒν•˜λŠ” κΈ°λŠ₯이 결합될 λ•Œ μ»΄νŒŒμΌλŸ¬κ°€ μΌκ΄€λœ λ™μž‘μ„ 보μž₯ν•  수 μžˆλŠ” 방법은 μ—†μŠ΅λ‹ˆλ‹€.

즉, modifyVars κ°€ 후속 κ°€μ Έμ˜€κΈ°μ—μ„œ "λ³€μˆ˜λ₯Ό μ—…λ°μ΄νŠΈ"ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것이 μ•„λ‹ˆλΌ μ—…λ°μ΄νŠΈλœ λ³€μˆ˜ κ°’ μžμ²΄κ°€ μ™ΈλΆ€ μˆ˜μ€€ κ°€μ Έμ˜€κΈ°μ— 영ν–₯을 λ―ΈμΉ  수 μ—†λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€(μ΄λŸ¬ν•œ κ°€μ Έμ˜€κΈ°κ°€ 이미 "μ™„λ£Œ"λ˜μ—ˆκΈ° λ•Œλ¬Έμ—).


그리고 λ¬Έμ„œκ°€ λ‹€μŒκ³Ό 같이 λ§ν•˜λ”λΌλ„ :

v2.0.0 μ΄μ „μ—λŠ” 루트 λ˜λŠ” ν˜„μž¬ λ²”μœ„μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λ§Œ κ³ λ €λ˜μ—ˆμœΌλ©° λ³€μˆ˜λ₯Ό 찾을 λ•Œ ν˜„μž¬ 파일 및 호좜 파일만 κ³ λ €λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

... v2 μ΄ν›„μ—λŠ” λ³„λ‘œ λ‚˜μ•„μ§€μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 더 λ§Žμ€ μ‘°ν•©/μ‚¬μš© 사둀λ₯Ό κ°œμ„ /ν΄λŸ¬μ§€ μˆ˜μ •ν–ˆμ§€λ§Œ λͺ¨λ“  것을 κ³ μΉ  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ #1108, 특히 #2246을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.


var logic/config μˆ˜μ •μ΄ 덜 κ°€μ Έμ˜¨ νŒŒμΌμ— 적용/μ „λ‹¬λ˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

μ•„λ‹ˆμš”(λ‹¨μˆœνžˆ 파일이 ν•˜λ‚˜μ˜ 큰 λ¬Έμžμ—΄λ‘œ ν•¨κ»˜ ν‰κ°€λ˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€). λ¬Έμ œκ°€ λ‹€λ₯Έ 곳에 μžˆμ§€ μ•Šμ€ ν•œ ν™•μΈν•˜λ €λ©΄ λ‹€μŒμ„ μΆ”κ°€ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.
foo {bar: @theme-variant}
관심 파일둜 μ΄λ™ν•˜κ³  κ²°κ³Όλ₯Ό ν™•μΈν•©λ‹ˆλ‹€.

그런데. μ‚¬μš© μ‚¬λ‘€μ˜ 경우("*-theme.less"κ°€ νŠΉμ • ν…Œλ§ˆμ— λŒ€ν•œ λ³€μˆ˜/λ―ΉμŠ€μΈμ— κ΄€ν•œ 것인 경우) λ‹€μŒκ³Ό 같이 μ‹œλ„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • κΈ°λ³Έ <strong i="7">@import</strong> "a-theme.less"; λ₯Ό λͺ…μ‹œμ μœΌλ‘œ κ·ΈλŒ€λ‘œ λ‘κ±°λ‚˜(즉, 보간 없이) μ™„μ „νžˆ μ œκ±°ν•©λ‹ˆλ‹€.
  • modifyVars λ₯Ό μ‚¬μš©ν•˜μ—¬ κ°€μ Έμ˜€κΈ° λͺ…λ Ήλ¬Έ 자체λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€(예: <strong i="11">@import</strong> "custom-theme.less"; 직접).

modifyVars λŠ” λ³€μˆ˜ bla-bla-bla에 κ΄€ν•œ 것인 κ²ƒμ²˜λŸΌ κ°€μž₯ν•˜μ§€λ§Œ μ‹€μ œλ‘œλŠ” 루트 파일 끝에 μž„μ˜μ˜ ν…μŠ€νŠΈλ₯Ό μΆ”κ°€ν•˜λŠ” 것 μ™Έμ—λŠ” 아무 것도 ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 즉 lessc 의 κ²½μš°μ—λŠ” $ --modify-vars="whatever-less-code foo {bar: baz;}" μž…λ‹ˆλ‹€. webpack의 less-loaderκ°€ 톡과할 수 μžˆλŠ” ν˜•μ‹μ΄ 무엇인지 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. 음... lessOptions.modifyVars = "an arbitrary code"; μ•„λ§ˆλ„?

그것은 λΆ„λͺ…νžˆ ν•΄ν‚Ήμ΄μ§€λ§Œ μ‹€μ œλ‘œλŠ” μƒλ‹Ήνžˆ 예츑 κ°€λŠ₯ν•œ ν•΄ν‚Ήμž…λ‹ˆλ‹€(초기 콀보처럼 μ–Έμ–΄ μžμ²΄κ°€ μ•„λ‹Œ modifyVars ν˜•μ‹λ§Œ λ‚¨μš©ν•˜κΈ° λ•Œλ¬Έμ—).

@seven-phases-max κ·€ν•˜μ˜ λ‹΅μž₯κ³Ό 아이디어에 λŒ€λ‹¨νžˆ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. 이번 주에 더 μžμ„Ένžˆ μ‘°μ‚¬ν•˜κ³  μ£Ό ν›„λ°˜μ— 이 문제λ₯Ό μ—…λ°μ΄νŠΈ/μ’…λ£Œν•˜λ„λ‘ μ•Œλ¦Όμ„ μ„€μ •ν•˜κ² μŠ΅λ‹ˆλ‹€. λ‹€μ‹œ ν•œλ²ˆ κ°μ‚¬ν•©λ‹ˆλ‹€.

μ‹€μ œλ‘œ μ–΄λ–»κ²Œλ“  ν•΄κ²°ν•  수 μžˆλŠ” λ¬Έμ œλΌκΈ°λ³΄λ‹€λŠ” μ˜ˆμƒλœ(이 경우 "μ •μ˜λ˜μ§€ μ•Šμ€/μ§€μ •λ˜μ§€ μ•Šμ€"으둜 μ •μ˜λœ) λ™μž‘μ— 더 가깝기 λ•Œλ¬Έμ— 이것을 λ‹«κ² μŠ΅λ‹ˆλ‹€.
κ°œμ„  아이디어와 특히 PR은 μ–Έμ œλ‚˜ ν™˜μ˜ν•˜μ§€λ§Œ... κ°€κΉŒμš΄ μž₯λž˜μ— λˆ„κ΅¬λ„ 이에 λŒ€ν•΄ μ–ΈκΈ‰ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰