Less.js: рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ (рдирд┐рдпрдореЛрдВ) рдХреЛ рдЦрд╛рд▓реА рд░рдЦреЗрдВ рд╡рд┐рдХрд▓реНрдк

рдХреЛ рдирд┐рд░реНрдорд┐рдд 28 рдЕрдХреНрддреВре░ 2012  ┬╖  28рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: less/less.js

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЦрд╛рд▓реА рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдореИрдВ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВред рдлрд╝рд╛рдпрд░рдмрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

feature request low priority needs decision up-for-grabs

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@chetzof рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд╛рд▓рд╛ред рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЬреЛ рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рд░рдЦрд╛ рд╣реИ:

рдЪрдпрдирдХрд░реНрддрд╛ {/**/}

рдпрд╣ рдлрд╛рдпрд░рдмрдЧ рдкрд░ рдЦрд╛рд▓реА рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред

рд╕рднреА 28 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм :empty рдЫрджреНрдо рдЪрдпрдирдХрд░реНрддрд╛ рд╣реИ?

http://reference.sitepoint.com/css/pseudoclass-empty

рдирд╣реАрдВ, рд╢рд╛рдпрдж рдореБрдЭреЗ рдЗрд╕реЗ "рдирд┐рдпрдо" рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛;)
рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ

.selector {}
a.nother{
   .selector {}
}

рд╡реЗ рд╕реАрдПрд╕рдПрд╕ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдкрд░ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ

рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХреНрдпреЛрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ? рд╡реЗ рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЦрд╛рд▓реА рдкрдбрд╝реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдлрд╝рд╛рдпрд░рдмрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдЖрдкрдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреНрдпрд╛ рд╣реИред

  1. рдореИрдВ рдХрд┐рд╕реА рддрддреНрд╡ рдпрд╛ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдХрдо рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЦрд╛рд▓реА рдирд┐рдпрдо рдмрдирд╛рддрд╛ рд╣реВрдВред
  2. рдореИрдВ рдлрд╛рдпрд░рдмрдЧ рдЦреЛрд▓рддрд╛ рд╣реВрдВ, рдЙрд╕ рддрддреНрд╡ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЦрд╛рд▓реА рдирд┐рдпрдо рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ
  3. рдореИрдВ рдЙрд╕ рдЦрд╛рд▓реА рдирд┐рдпрдо рдХреЗ рдЕрдВрджрд░ рд╢реИрд▓рд┐рдпрд╛рдБ рд▓рд┐рдЦрддрд╛ рд╣реВрдБ
  4. https://github.com/ronniekk/css-x-fire рдкреНрд▓рдЧрдЗрди рдлрд╝рд╛рдпрд░рдмрдЧ рдореЗрдВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдХрдо рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд╛рдкрд╕ рд╕рд┐рдВрдХ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЦрд╛рд▓реА рдирд┐рдпрдо рдвреВрдВрдврддрд╛ рд╣реИ, рдФрд░ рд╡рд╣рд╛рдВ рдлрд╝рд╛рдпрд░рдмрдЧ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд░рдЦрддрд╛ рд╣реИред

рдЖрд╡рд╢реНрдпрдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд▓рдЧрдЗрди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡рд╛рдкрд╕ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрджрд┐ рддрддреНрд╡ рдореЗрдВ рдкрд╣рд▓реЗ рд╢реИрд▓реА рдирд╣реАрдВ рд╣реИ, рддреЛ рдореБрдЭреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рдЦрд╛рд▓реА рдирд┐рдпрдо рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рддрдм рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ рдЬрдм рдореИрдВрдиреЗ рд╢реБрджреНрдз рд╕реАрдПрд╕рдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм, рдЬрдм рдореИрдВрдиреЗ рдХрдо рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЦрд╛рд▓реА рдирд┐рдпрдореЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдкреНрд▓рдЧрдЗрди рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИред

рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдВрдХреАрд░реНрдг рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рд╣реИ ...

рдпрд╣ рдПрдХ _very_ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд▓реЛрдЧ рдЕрдкрдиреЗ рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдХрдо рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЦрд╛рд▓реА рдирд┐рдпрдореЛрдВ рдХреЛ _did't_ рдирд╣реАрдВ рдЫреЛрдбрд╝реЗрдВрдЧреЗред

рдореИрдВ рдЖрдкрдХреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд░реАрдлреНрд░реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП less.watch() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛:

<script type="text/javascript">
     less.env = "development";
     less.watch();
</script>

рдпрд╛ рдЕрдкрдиреЗ URL рдореЗрдВ #!watch рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВред

рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдХреБрдЫ рд╕реБрдЭрд╛рд╡ рджрд┐рдП рдЧрдП рд╣реИрдВ: http://www.paulsprangers.com/2011/04/quick-tip-less-js-in-development-and-watch-mode/

@ рд╕реЛрд╡рд┐рдпрдд рд╕реЗ рдЕрдЪреНрдЫреА рд╕рд▓рд╛рд╣ред рдЕрдЧрд░ рдЖрдкрдХреЛ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдХрд╛рдордХрд╛рдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдХрд▓реА рдирд┐рдпрдо рдЬреЛрдбрд╝реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

temp: ruleset;

рдорд╛рдирд╛ред @agatronic рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╡рд╣ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╣рд░ рджреВрд╕рд░реА рдХрдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдХреНрд╖рдо рд╕реАрдПрд╕рдПрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

@agatronic рдпрд╣реА рд╡рд╣ рд╣реИ рдЬреЛ рдореИрдВ рдкрд┐рдЫрд▓реЗ 2 рд╣рдлреНрддреЛрдВ рд╕реЗ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬрдм рд╕реЗ рдореИрдВрдиреЗ LESS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рдмрд╛рд░ рдРрд╕реЗ рдирдХрд▓реА рдирд┐рдпрдо рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЖ рдЧрдП рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рд╢рд╛рдпрдж рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рд╣реИ :(

@ рд╕реЛрд╡рд┐рдпрдд рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдХрдо рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реВрдВ ... рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрдо рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рдЧрдВрднреАрд░ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реБрдИрдВ, рдкреЗрдЬ рд▓реЛрдб 500-700ms рд╕реЗ 2-3 рдПрд╕ рддрдХ рдмрдврд╝ рдЧрдпрд╛ ..

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдореИрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдХрд┐рд╕ рд╕реНрд░реЛрдд рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдкрдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВ?

рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ

https://github.com/cloudhead/less.js/blob/master/lib/less/tree/ruleset.js#L187

@chetzof рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд╛рд▓рд╛ред рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЬреЛ рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рд░рдЦрд╛ рд╣реИ:

рдЪрдпрдирдХрд░реНрддрд╛ {/**/}

рдпрд╣ рдлрд╛рдпрд░рдмрдЧ рдкрд░ рдЦрд╛рд▓реА рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред

@d4ng3rmax рдХреВрд▓ рдкреЙрдЗрдВрдЯ!
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд╣реА рджреЗрд╡ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╣реИ рдЬрд┐рд╕рдХрд╛ @chetzof рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред
рдзрдиреНрдпрд╡рд╛рджред

css-modules рд╕рд╛рде рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЪреАрдЬ рдЬрд░реВрд░реА рд╣реИред
рдордЪрд╛рди рдХреЗ рджреМрд░рд╛рди рд╕рднреА рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдердХрд╛рдК рд╣реИред

.main {
/*! keep */
}

.loading {
/*! keep */
}

.button {
/*! keep */
}

.form {
/*! keep */
}

@garkin рд╕реАрдПрд╕рдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рддрд░реНрдХ/рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рдХреНрдпрд╛ рд╣реИ?

рдЕрдиреНрдпрдерд╛ рд╡реЗ рдЖрдпрд╛рдд рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди undefined ред

import * as React from 'react'
import * as cx from 'classnames';
import css from './home.less';

export class Home extends React.Component {
    render() {
        const isLoading = true;
        return <div className={cx(css.main, {
            [css.loading]: isLoading
         })}>
            Home
        </div>
    }
}

рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣реЙрдЯ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЛ рдЦрдВрдбрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд░реЛрдХрдирд╛ рдЙрди рд╕рднреА рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдордЪрд╛рди рдХреЗ рджреМрд░рд╛рди рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реЗ рд▓рдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдФрд░ рдлрд┐рд░ рдЙрди рд╕рднреА /*! keep */ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд┐рд╕реА рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@garkin рд╣рдореНрдо ... рд╕рд┐рд░реНрдл рдЕрдкрдиреА рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рд▓рд┐рдЦрдирд╛ рдЦрддреНрдо рдХрд░рдиреЗ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рд╣реИ? рдореИрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд╣рд╛рдВ рдореИрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рд╣рдо рдЯреАрдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдо рдФрд░ рд╕реИрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рд╡рд░реНрддрдорд╛рди рд╕реИрд╕ рдмрд┐рд▓реНрдб рд╕реЗрдЯрдЕрдк рдореЗрдВ, рдЦрд╛рд▓реА рдЪрдпрдирдХрд░реНрддрд╛ рд▓рд╛рдЗрдирд┐рдВрдЧ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ (рдРрдк рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛)ред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕реАрдПрд╕рдПрд╕ рдореЙрдбреНрдпреВрд▓ / рд░рд┐рдПрдХреНрдЯ рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдкреИрдЯрд░реНрди рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рд╣реИ:

{
     [css.loading]: isLoading
}

рдпрджрд┐ рдЖрдк рдЗрд╕ рдкреИрдЯрд░реНрди рдореЗрдВ рдмрджрд▓ рдЧрдП рд╣реИрдВ рддреЛ рдпрд╣ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдкреИрджрд╛ рдХрд░реЗрдЧрд╛:

<div className={`${isLoading && css.loading}`}></div>

рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдк рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдРрд╕реЗ рдирд╛рдо рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рддрд░реНрдХ рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреА рдХрдХреНрд╖рд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ рддрдерд╛рдХрдерд┐рдд "рдЕрдкрдиреА рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рд▓рд┐рдЦрдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ" рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рд╕рдВрджрд░реНрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд╕рд╛рде рдХрджрдо рдЙрдард╛рдиреЗ рдФрд░ рд╣рд╛рде рдореЗрдВ рдПрдЪрдПрдордЖрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

рдпрд╣ рдкреИрдЯрд░реНрди рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдореБрдЦ рдФрд░ рдЕрд░реНрдз-рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рд╣реИ, рдпрд╣ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рд░рд┐рдПрдХреНрдЯ рд╡рд┐рддрд░рдг рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдерд╛ред
рдФрд░ рдпрд╣ рдирдореВрдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрд╕реБрдд рд╣реИред рдЖрдкрдХрд╛ рддрд░реАрдХрд╛ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ рдФрд░ рдирд╛ рд╣реА рдорд╛рдкрдиреАрдп рд╣реИред

return <div className={cx(css.post, sharedCss.frame, {
    [css.support]: post.isSupport,
    [css.foreign]: showTranslation,
    [css.private]: post.isInternal,
    [css.cached]: post.status.isLoading
    ...
})}>...</div>

рд╕реАрдПрд╕рдПрд╕-рдореЙрдбреНрдпреВрд▓ рдЗрд╕ рджрд┐рди рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╛рдердорд┐рдХ рддрд░реАрдХрд╛ рд╣реИ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдРрд╕рд╛ рд╣реА рд╣реЛрдЧрд╛ред
рдЦрд╛рд▓реА рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ - рд╕реАрдПрд╕рдПрд╕-рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдХреЛрдб рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрдо рд╕реЗ рдХрдо рдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рддреЛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдХреЗрд╡рд▓ рдЙрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рдЕрдзрд┐рдХ рдирд╣реАрдВ рдЦреЛрд▓рдирд╛, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рдХрдо "рд╕рдлрд╛рдИ" рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд╡реНрдпрд╡рд╕рд╛рдп рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред compress рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛рдиреА рдмрд╣реБрдд рд╕рд╛рд░реЗ рд░рдЦрд░рдЦрд╛рд╡ рдЙрдкрдХрд░рдг рд╣реИрдВ рдЬреЛ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░ рджреЗрдВрдЧреЗ/рд╕рдВрдкреАрдбрд╝рд┐рдд/рдЙрдкрд╕рд░реНрдЧ рдЖрджрд┐ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред

рд╕рдВрднрд╡рддрдГ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рддрдм рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рдПрдХ рдЦрд╛рд▓реА рдЪрдпрдирдХрд░реНрддрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдорд╛рдиреНрдп рд╣реИ рдХрд┐ рдЬрдм рдЖрдк CSS рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрд╛рд░рдХ рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рджрд░рдЕрд╕рд▓, рдЬрдм рддрдХ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рдХрд░рддрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдЖрдИрдПрдордУ рдпрд╣ removeEmptyRulesets (рдЪрдпрдирдХрд░реНрддрд╛ рдирд╣реАрдВ) true рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдпрд╛ рдпрд╣ keepEmptyRulesets рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗ рд╕рд╛рде false ? ЁЯдФ рд╢рд╛рдпрдж рдмрд╛рдж рд╡рд╛рд▓рд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдЖрд╕рд╛рди рдЭреВрдареА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред

рдЬрдм рдЖрдк рд╕реАрдПрд╕рдПрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХрд╛рд░рдХ рд╣реЛрддреЗ рд╣реИрдВ

рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред CSSOM рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рдПрдХреНрд╕реЗрд╕ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ keepEmptyRulesets рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред
рдХреНрд░рд┐рдпрд╛ рдкрдХреНрд╖ рдкрд░ рдереЛрдбрд╝рд╛ рд╕рд╛, рд╢рд╛рдпрджред рд╕реАрдПрд▓рдЖрдИ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ: --keep-empty-rulesets

рдХреНрд░рд┐рдпрд╛ рдкрдХреНрд╖ рдкрд░ рдереЛрдбрд╝рд╛ рд╕рд╛, рд╢рд╛рдпрдж

рдореИрдВ рдЕрд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реБрдЭрд╛рд╡ рд╣реИ? рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрднреА-рдХрднреА рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рд╡рд╣рд╛рдБ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬрд╛рдиреЗ рд╕реЗ рд░реЛрдХреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ keepEmptyRulesets рдПрдкреАрдЖрдИ рдореЗрдВ рдФрд░ --keep-rulesets CLI рдореЗрдВред рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ --keep-empty

рдХреНрдпрд╛ рдпрд╣ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл keepEmpty рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореИрдВ рдкреНрд░рдпреЛрдЧ рдХрд░реВрдВрдЧрд╛:

  1. outputEmptyRulesets : true|false рдПрдкреАрдЖрдИ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ;
  2. --empty-rulesets рдлреБрд▓-рдлреЙрд░реНрдо CLI рдЯреЙрдЧрд▓ рдХреЗ рд░реВрдк рдореЗрдВ; рддрдерд╛
  3. -er рдпрд╛ рд╕рдВрднрд╡рддрдГ -empty рд╢реЙрд░реНрдЯрд╣реИрдВрдб рд╕реАрдПрд▓рдЖрдИ рдЯреЙрдЧрд▓ рдХреЗ рд░реВрдк рдореЗрдВред

@rjgotten рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдБред рдореИрдВ рднрд╛рд╡рдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдирд┐рд╡реЗрд╢рд┐рдд рдирд╣реАрдВ рд╣реВрдБ lolред @garkin - рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ?

рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИред

рд╣рдо рдЗрд╕рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЙрдореНрдореАрдж рдХрдм рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИред

@orchidoris PRs рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

рд╕рдорд╛рдзрд╛рди рдкреНрд▓рдЧрдЗрди...

рдкреНрд░рддреНрдпреЗрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдореЗрдВ __NOOP__: 1; рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдлрд┐рд░ рдХрдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред

class NoopPreProcessor {      
    process = (css, extra) => css.replace(/}/g, ';__NOOP__: 1;}');                                                                      
}      

class NoopPostProcessor {      
    process = (css, extra) => css.replace(/__NOOP__: 1;/g, '');                                                                               
}                                                                                                                       

const NoopPlugin = {                                                                                                    
    install: (less, pluginManager) => {                             
        pluginManager.addPreProcessor(new NoopPreProcessor());        
        pluginManager.addPostProcessor(new NoopPostProcessor());      
    },                                                                
}; 


рдХрдо рд▓реЛрдбрд░ рдХреЗ рд╕рд╛рде рдкреНрд░реАрдПрдХреНрдЯ рдХреЗ рд▓рд┐рдП:

    helpers.getLoaders(config)                                                             
        .filter(item => item.ruleIndex===1)      
        .map(item => {                           
            item.loaders[0].options.options.stictMath = true;      
            item.loaders[0].options.options.plugins = [            
                NoopPlugin,                                        
            ];                                                     

            item.loaders[0].options.options.paths = [      
                ...item.loaders[0].options.options.paths[0],      
                path.resolve(__dirname, 'src'),                   
            ];                                                    
        });                                                       
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

bassjobsen picture bassjobsen  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

BrianMulhall picture BrianMulhall  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

matthew-dean picture matthew-dean  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

papandreou picture papandreou  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

chricken picture chricken  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ