рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЦрд╛рд▓реА рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдореИрдВ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВред рдлрд╝рд╛рдпрд░рдмрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм :empty
рдЫрджреНрдо рдЪрдпрдирдХрд░реНрддрд╛ рд╣реИ?
рдирд╣реАрдВ, рд╢рд╛рдпрдж рдореБрдЭреЗ рдЗрд╕реЗ "рдирд┐рдпрдо" рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛;)
рдореЗрд░рд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ
.selector {}
a.nother{
.selector {}
}
рд╡реЗ рд╕реАрдПрд╕рдПрд╕ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдкрд░ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ
рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХреНрдпреЛрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ? рд╡реЗ рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЦрд╛рд▓реА рдкрдбрд╝реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдлрд╝рд╛рдпрд░рдмрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдЖрдкрдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреНрдпрд╛ рд╣реИред
рдЖрд╡рд╢реНрдпрдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд▓рдЧрдЗрди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡рд╛рдкрд╕ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрджрд┐ рддрддреНрд╡ рдореЗрдВ рдкрд╣рд▓реЗ рд╢реИрд▓реА рдирд╣реАрдВ рд╣реИ, рддреЛ рдореБрдЭреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рдЦрд╛рд▓реА рдирд┐рдпрдо рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рддрдм рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ рдЬрдм рдореИрдВрдиреЗ рд╢реБрджреНрдз рд╕реАрдПрд╕рдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм, рдЬрдм рдореИрдВрдиреЗ рдХрдо рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдЦрд╛рд▓реА рдирд┐рдпрдореЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдкреНрд▓рдЧрдЗрди рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рд╕рд┐рдВрдХ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИред
рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рдВрдХреАрд░реНрдг рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рд╣реИ ...
рдпрд╣ рдПрдХ _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
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
рдореИрдВ рдкреНрд░рдпреЛрдЧ рдХрд░реВрдВрдЧрд╛:
outputEmptyRulesets : true|false
рдПрдкреАрдЖрдИ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ;--empty-rulesets
рдлреБрд▓-рдлреЙрд░реНрдо CLI рдЯреЙрдЧрд▓ рдХреЗ рд░реВрдк рдореЗрдВ; рддрдерд╛-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'),
];
});
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@chetzof рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд╛рд▓рд╛ред рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЬреЛ рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рд░рдЦрд╛ рд╣реИ:
рдЪрдпрдирдХрд░реНрддрд╛ {/**/}
рдпрд╣ рдлрд╛рдпрд░рдмрдЧ рдкрд░ рдЦрд╛рд▓реА рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред