рдмрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
рдореИрдВ рд╕рднреА рд╕реНрдЯреЛрд░реАрдмреБрдХ рдЗрдлреНрд░реЗрдореНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╢реИрд▓рд┐рдпреЛрдВ (scss) рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рдЖрдЬрдорд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрд╕рдлрд▓ рд░рд╣рд╛ рд╣реВрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рддрд░реАрдХрд╛ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдкреНрд░рдЬрдирди рдХрд░рдирд╛
рдкреНрд░рдпрд╛рд╕:
рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░
рдореИрдВ рдПрдХ рдЬрдЧрд╣ рдкрд░ рдЧреНрд▓реЛрдмрд▓ (scss) рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░реВрдВрдЧрд╛ рддрд╛рдХрд┐ рд╣рд░ рд╕реНрдЯреЛрд░реА рдХреЗ рдЗрдлреНрд░реЗрдо рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╡рд╣рд╛рдБ рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рд╕реЗрдЯрд┐рдВрдЧ рдореИрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рдкреНрд░рдгрд╛рд▓реА:
рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрджрд░реНрдн
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЗ рднреАрддрд░ рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдмрдирд╛ рджреЗрдЧрд╛ред
рдЕрдкрдиреЗ Global.scss рдлрд╝рд╛рдЗрд▓ рдХреЛ angular.json
рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ
рдЕрдкрдиреЗ DefaultProject рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ (json рдХреЗ рдЕрдВрджрд░ рдПрдХ defaultProject рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реИ) рдФрд░ рдЗрд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
"styles": [
"projects/your-cli-project/src/lib/styles/your-styles.scss"
],
рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ?
рд╣реЗрд▓реЛ рд╕рдм рд▓реЛрдЧ! рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдпрджрд┐ рдЕрднреА рднреА рдкреНрд░рд╢реНрди, рдЯрд┐рдкреНрдкрдгреА рдпрд╛ рдмрдЧ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЪрд░реНрдЪрд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рд░ рдореБрджреНрджреЗ рдкрд░ рдЖрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред рд╣рдо рд╣рдореЗрд╢рд╛ рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд░рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ рдЕрдЧрд░ рдЖрдк рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдирд┐рд╖реНрдХреНрд░рд┐рдп рдореБрджреНрджреЛрдВ рдХреЛ 30 рджрд┐рдиреЛрдВ рдХреЗ рдмрд╛рдж рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдзрдиреНрдпрд╡рд╛рдж!
рд╣рд╛рдп @omaracrystal рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛:
.storybook/config.js
рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ, рд╕рд╣реА рд▓реЛрдбрд░ рдЗрдирдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд рдЬреЛрдбрд╝реЗрдВ:
import '!style-loader!css-loader!sass-loader!./scss-loader.scss';
рдлрд┐рд░ scss-loader.scss
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдХреА рд╕рднреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ / рдЖрдпрд╛рдд рдХрд░реЗрдВ:
$font-path: '../projects/lib/src/theming/fonts/OpenSans/';
<strong i="13">@import</strong> '../projects/lib/src/theming/reset.scss';
<strong i="14">@import</strong> '../projects/lib/src/theming/main.scss';
html {
font-family: $font-name;
font-size: $font-size--small;
}
@ рдХреНрд░реЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдПрдХ рдХреЛрдгреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдЖрдкрдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреЛрдгреАрдп рдореЗрдВ styles
рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рдлрд╝рд╛рдЗрд▓
рдЕрдкрдиреЗ Global.scss рдлрд╝рд╛рдЗрд▓ рдХреЛ
angular.json
рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЕрдкрдиреЗ DefaultProject рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ (json рдХреЗ рдЕрдВрджрд░ рдПрдХ defaultProject рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реИ) рдФрд░ рдЗрд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
"styles": [ "projects/your-cli-project/src/lib/styles/your-styles.scss" ],
рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ?
рдореИрдВрдиреЗ рдпрд╣ рд╕рдЯреАрдХ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд▓реЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
рд╣реЗрд▓реЛ рд╕рдм рд▓реЛрдЧ! рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдпрджрд┐ рдЕрднреА рднреА рдкреНрд░рд╢реНрди, рдЯрд┐рдкреНрдкрдгреА рдпрд╛ рдмрдЧ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЪрд░реНрдЪрд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рд░ рдореБрджреНрджреЗ рдкрд░ рдЖрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред рд╣рдо рд╣рдореЗрд╢рд╛ рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд░рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ рдЕрдЧрд░ рдЖрдк рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдирд┐рд╖реНрдХреНрд░рд┐рдп рдореБрджреНрджреЛрдВ рдХреЛ 30 рджрд┐рдиреЛрдВ рдХреЗ рдмрд╛рдж рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдзрдиреНрдпрд╡рд╛рдж!
рдЕрд░реЗ рд╡рд╣рд╛рдБ, рдпрд╣ рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рд╣реИ! рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ рд░рдЦрд╡рд╛рд▓реЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡рд░реНрддрдорд╛рди рд╡рд┐рдХрд╛рд╕ рд░реЛрдбрдореИрдк рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХреЗрдВред рдпрджрд┐ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдореБрджреНрджрд╛ рдЕрднреА рднреА рдПрдХ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдЯрд┐рдХрдЯ рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕ рдкреБрд░рд╛рдиреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВред рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрдпрд░реНрд╕ рдФрд░ рдзрдиреНрдпрд╡рд╛рдж!
рд╣рд╛рдп @omaracrystal рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛:
.storybook/config.js
рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ, рд╕рд╣реА рд▓реЛрдбрд░ рдЗрдирдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд рдЬреЛрдбрд╝реЗрдВ:import '!style-loader!css-loader!sass-loader!./scss-loader.scss';
рдлрд┐рд░
scss-loader.scss
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдХреА рд╕рднреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ / рдЖрдпрд╛рдд рдХрд░реЗрдВ:$font-path: '../projects/lib/src/theming/fonts/OpenSans/'; <strong i="14">@import</strong> '../projects/lib/src/theming/reset.scss'; <strong i="15">@import</strong> '../projects/lib/src/theming/main.scss'; html { font-family: $font-name; font-size: $font-size--small; }
@ рдХреНрд░реЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдПрдХ рдХреЛрдгреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдЖрдкрдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреЛрдгреАрдп рдореЗрдВ
styles
рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рдлрд╝рд╛рдЗрд▓
рдХреНрдпрд╛ рд╡рд╣ рд╕рднреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ? рдореЗрд░реЗ рдкрдХреНрд╖ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ :(
@ozanmanav рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕реЗ .storybook/config.js
рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА?
рдкреБрдирд╢реНрдЪ: рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡реЗрдмрдкреИрдХ рд▓реЛрдбрд░ рдХреЗ рдмрд┐рдирд╛ .css
рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реВрдВ
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреЛрд░реАрдмреБрдХ v5.3 рдХреЗ main.js рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
@garrettmaring рдЖрдк рдХреЗ рд╕рд╛рде рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереА .storybook/preview.js
рдмрдЬрд╛рдп .storybook/config.js
?
@garrettmaring
рдЕрдВрдд рдореЗрдВ рдореБрдЭреЗ .css
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ import '!style-loader!css-loader!./main.css'
.css
рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝рд╛ред
рдкрд╣рд▓реЗ рддреЛ рдореИрдВрдиреЗ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд░рд╣рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рднреА рдХрд╕реНрдЯрдо рдирд┐рдпрдореЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛, рдФрд░ рдЗрд╕реЗ рдКрдкрд░ рдХреА рддрд░рд╣ рдЭреБрдХрд╛ рджрд┐рдпрд╛ред рдЬрд╛рд╣рд┐рд░ рд╣реИ рдПрдирдкреАрдПрдо рд▓реЛрдбрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
@ рд╢рд┐рд▓реНрдорд╛рди рд╣рд╛рдБ, рдХрд┐ рдпрд╣ рдпрд╣ рд▓реЗрдЦ рд╕реНрдкрд╖реНрдЯ рд▓рдЧрд╛ред
@garrettmaring рдбреЙрдХреНрд╕ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХрд╛ рдорди?
@garrettmaring
рдЕрдВрдд рдореЗрдВ рдореБрдЭреЗ.css
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗimport '!style-loader!css-loader!./main.css'
.css
рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝рд╛ред
рдкрд╣рд▓реЗ рддреЛ рдореИрдВрдиреЗ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд░рд╣рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рднреА рдХрд╕реНрдЯрдо рдирд┐рдпрдореЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛, рдФрд░ рдЗрд╕реЗ рдКрдкрд░ рдХреА рддрд░рд╣ рдЭреБрдХрд╛ рджрд┐рдпрд╛ред рдЬрд╛рд╣рд┐рд░ рд╣реИ рдПрдирдкреАрдПрдо рд▓реЛрдбрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред
рдмрд╕ рдХреБрдЫ FYI рдХрд░реЗрдВ рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреА рд╕реЗрд╡рд╛ рдХрд░рддреЗ рд╕рдордп рдЕрджреНрднреБрдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд┐рд▓реНрдб-рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдерд╛)ред
рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди
рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди-head.html рдореЗрдВ <link rel="stylesheet" href="./your-global-styles.css" />
рдЬреЛрдбрд╝реЗрдВред рдлрд┐рд░ your-global-styles.css
рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ -s рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреА рдирд┐рд░реНрдорд╛рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред рдЕрдм iframe.html "рдХреЛ" рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ your-global-styles.css
рд╕рдВрджрд░реНрднрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрдм рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓ рдХрд╣реЗрдЧрд╛ рдХрд┐ рдпрд╣ localhost/your-global-styles.css
рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕ рд╕реЗ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ, рдпрд╛ рдПрдХ рдЙрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ :)
рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдореЗрдВ scss рдлрд╛рдЗрд▓реЗрдВ рдкрд░реЛрд╕рддреЗ рд╣реИрдВ:
рдЖрдпрд╛рдд '! рд╢реИрд▓реА-рд▓реЛрдбрд░! рд╕реАрдПрд╕рдПрд╕-рд▓реЛрдбрд░! рд╕рд╕-рд▓реЛрдбрд░ !/ред main.scss'
рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
@blemaire рдЖрдк рдЙрд╕ рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
@blemaire рдЖрдк рдЙрд╕ рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
@ рд▓реЛрдкрд┐рд╕ рдиреЗ .storybook
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ preview.js
рдХрд┐рдпрд╛ рдФрд░ рдЙрд╕ рд▓рд╛рдЗрди рдХреЛ рдЙрд╕рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛
рд╕рдмрдХреЛ рдзрдиреНрдпрд╡рд╛рджред рдЬрд┐рд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ
.storybook
(рдпрд╛ рдЬреЛ рднреА рдЬрдЧрд╣ рдЖрдк рдЗрд╕реЗ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ) рдХреЗ рд▓рд┐рдП scss рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рдирд╛ред.storybook/preview.js
рдмрдирд╛рдирд╛import '!style-loader!css-loader!sass-loader!./styles.scss';
рдХреЛ preview.js
dir рдореЗрдВ рдЬреЛрдбрд╝рдирд╛"css-loader"
рдХреЛ package.json
рд╕рдорд░реНрдкрдг рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИрд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ; рд╕реНрдЯреЛрд░реАрдмреБрдХ рдиреЗ рдПрдХ рдХреЛрдгреАрдп 9 рдкреБрд╕реНрддрдХрд╛рд▓рдп ( angular.json
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ) рдХреЛ рдЖрдЗрдХреЙрди рдмрдирд╛рдпрд╛
рдЕрдЧрд▓реА рдмрд╛рд░ рдореЗрдВ import "../styles/main.css";
(рдореБрдЦреНрдп рдРрдк рдореЗрдВ) рдХреЗ рд▓рд┐рдП .storybook/preview.js
рдХреА import "../styles/main.css";
рд╕рд░рд▓ рд╣реИред
рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреА рд╕рднреА рдкрд╛рдерд┐рдВрдЧ ../../src/main.scss
рд▓реЗрдХрд┐рди рдореЗрд░реА рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛ SCSS рдЧреНрд▓реЛрдмрд▓ / рдЕрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред
рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ main.js
рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНтАНрдлрд╝тАНрд┐рдЧрд░реЗрд╢рди рдЙрд░реНрдл тАЛтАЛрдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЕрдкрдиреЗ preview.js
рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ / рдЙрд░реНрдл тАЛтАЛSCSS рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдкрдереЛрдВ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХрд╣рд╛рдБ рдЬрд╛рдирд╛ рд╣реИред
import '!style-loader!css-loader!sass-loader!./scss-loader.scss';
рдореИрдВрдиреЗ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИред рдореБрдЭреЗ рдЕрдкрдиреЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реАрдПрд╕рдПрд╕ рдЪрд░ рдФрд░ рдорд┐рд╢реНрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
ERR! import '!style-loader!css-loader!sass-loader!./scss-loader.scss';
ERR! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ERR!
ERR! SyntaxError: Unexpected string
рдЕрдЧрд▓реА рдмрд╛рд░ рдореЗрдВ
import "../styles/main.css";
(рдореБрдЦреНрдп рдРрдк рдореЗрдВ) рдХреЗ рд▓рд┐рдП.storybook/preview.js
рдХреАimport "../styles/main.css";
рд╕рд░рд▓ рд╣реИред
рдХреНрдпрд╛ рдпрд╣ рд╢реИрд▓рд┐рдпреЛрдВ / main.cs рдореЗрдВ рдЖрдкрдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ SCSS рдЪрд░ рд╣реИрдВ? рдХреНрдпрд╛ рд╡реЗ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ? рдореИрдВрдиреЗ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЕрднреА рднреА SassError: Undefined variable: $my-variable-here
рд╣рд╛рдп @omaracrystal рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛:
.storybook/config.js
рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ, рд╕рд╣реА рд▓реЛрдбрд░ рдЗрдирдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд рдЬреЛрдбрд╝реЗрдВ:import '!style-loader!css-loader!sass-loader!./scss-loader.scss';
рдлрд┐рд░
scss-loader.scss
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдХреА рд╕рднреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ / рдЖрдпрд╛рдд рдХрд░реЗрдВ:$font-path: '../projects/lib/src/theming/fonts/OpenSans/'; <strong i="15">@import</strong> '../projects/lib/src/theming/reset.scss'; <strong i="16">@import</strong> '../projects/lib/src/theming/main.scss'; html { font-family: $font-name; font-size: $font-size--small; }
@ рдХреНрд░реЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдПрдХ рдХреЛрдгреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдЖрдкрдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреЛрдгреАрдп рдореЗрдВ
styles
рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рдлрд╝рд╛рдЗрд▓рдХреНрдпрд╛ рд╡рд╣ рд╕рднреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ? рдореЗрд░реЗ рдкрдХреНрд╖ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ :(
рдирд╣реАрдВред рдореЗрд░реА рдорджрдж рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЕрдм рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА:
ERR! import '!style-loader!css-loader!sass-loader!./scss-loader.scss';
ERR! ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ERR!
ERR! SyntaxError: Unexpected string
рдмрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
рдореИрдВ рд╕рднреА рд╕реНрдЯреЛрд░реАрдмреБрдХ рдЗрдлреНрд░реЗрдореНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╢реИрд▓рд┐рдпреЛрдВ (scss) рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рдЖрдЬрдорд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрд╕рдлрд▓ рд░рд╣рд╛ рд╣реВрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рддрд░реАрдХрд╛ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИредрдкреНрд░рдЬрдирди рдХрд░рдирд╛
рдкреНрд░рдпрд╛рд╕:
- рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗ рднреАрддрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░реЗрдВред
- рдкрд░рд┐рдгрд╛рдо: рд╢реИрд▓рд┐рдпрд╛рдБ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди, рдХрдИ global.scs рд╢реИрд▓рд┐рдпрд╛рдБ {рдХрд╣рд╛рдиреА #} x рдмрд╛рд░ рджреЛрд╣рд░рд╛рдИ рдЬрд╛рддреА рд╣реИрдВред
- рдХрд╕реНрдЯрдо рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ: https://storybook.js.org/docs/configurations/custom-webpack-config/
- рдкрд░рд┐рдгрд╛рдо: рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЛ рд╕реНрдХреИрд╕ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рднреА рдХрд╣рд╛рдирд┐рдпреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ
- рдПрдХ рдЬрдЧрд╣ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдмрдирд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рддрд░рд╣ рд╕реЗ "рд╡реИрд╢реНрд╡рд┐рдХ" рд╕реАрдПрд╕рдПрд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
- рдкрд░рд┐рдгрд╛рдо: рдореИрдВ рдЬреЛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ (рдХрдИ рд╢реИрд▓рд┐рдпреЛрдВ, рдорд┐рд╢реНрд░рдг, рдЪрд░, рдЖрджрд┐) рдпрд╣ рдХреЗрд╡рд▓ рдЫреЛрдЯреЗ рд╕реАрдПрд╕рдПрд╕ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
- рдХреЗ рддрд╣рдд рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ .storybook рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ('../ libs / storybook / global-styles.scss'); рд▓реЛрдбрд╕реНрдЯреЛрд░реАрдЬ рдлрдВрдХреНрд╢рди рдХреЗ рднреАрддрд░
- рдкрд░рд┐рдгрд╛рдо: рдХреБрдЫ рднреА рдирд╣реАрдВ
- Storybook index.ts рдХреЗ рднреАрддрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА
- рдкрд░рд┐рдгрд╛рдо: рдХреБрдЫ рднреА рдирд╣реАрдВ
Angular.json рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА
- рдкрд░рд┐рдгрд╛рдо: рдХреБрдЫ рднреА рдирд╣реАрдВ
рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░
рдореИрдВ рдПрдХ рдЬрдЧрд╣ рдкрд░ рдЧреНрд▓реЛрдмрд▓ (scss) рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░реВрдВрдЧрд╛ рддрд╛рдХрд┐ рд╣рд░ рд╕реНрдЯреЛрд░реА рдХреЗ рдЗрдлреНрд░реЗрдо рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╡рд╣рд╛рдБ рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рд╕реЗрдЯрд┐рдВрдЧ рдореИрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?рдкреНрд░рдгрд╛рд▓реА:
- OS: MacOS
- рдбрд┐рд╡рд╛рдЗрд╕: рдореИрдХрдмреБрдХ рдкреНрд░реЛ 2015
- рдмреНрд░рд╛рдЙрдЬрд╝рд░: рдХреНрд░реЛрдо
- рдлреНрд░реЗрдорд╡рд░реНрдХ: рдХреЛрдгреАрдп
- Addons: - [addon-centered, addon-viewport, addon-info]
- рд╕рдВрд╕реНрдХрд░рдг: [^ 5.0.1]
рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрджрд░реНрдн
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЗ рднреАрддрд░ рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдмрдирд╛ рджреЗрдЧрд╛ред
рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХрднреА рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рдерд╛? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рдерд╛? рдзрдиреНрдпрд╡рд╛рдж!
@caseytrombley рд╕рдорд╛рдзрд╛рди рдЖрдкрдХреЗ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЗрдВ import '!style-loader!css-loader!sass-loader!./styles.scss';
рдЬреЛрдбрд╝рдирд╛ рд╣реИред
рдХреНрд░рд┐рдПрдЯ рд░рд┐рдПрдХреНрдЯ рдРрдк + рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕реАрдПрд╕рдПрд╕ рд░реАрд╕реЗрдЯ рдХреЛ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП config.js
рдХреЗ рдмрд╛рдж рдЬреЛрдбрд╝рд╛ред
import '!style-loader!css-loader!../src/reset.css';
рдХрд┐рд╕реА рдХреЛ рднреА рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ- scss?
рдЖрдк рдЙрд╕ рдмреНрд▓реЙрдЧ рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рдерд╛ рдХрд┐ рдХрд╕реНрдЯрдо рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдкрдХреА рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЗ рд▓рд┐рдП SCSS рд╕реНрдерд┐рд░рд╛рдВрдХ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИред
рджреЛрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╡рд░реНрддрдорд╛рди рдХреЙрдиреНрдлрд┐рдЧ рдмрдЧ https://github.com/storybookjs/storybook/issues/11052 рдФрд░ рдЙрд╕ рдмреНрд▓реЙрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдПрдХ рдХрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛ред
рдЙрдореНрдореАрдж рд╣реИ рдХреА рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛!
рдЙрди рдЗрдВрд╕реНрдЯреЙрд▓реНрд╕ рдХреЗ рд▓рд┐рдП, рдЬрд┐рдирдореЗрдВ main.js
(рдпрд╛рдиреА рдЖрдкрдиреЗ CreateReactApp рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ npx -p @storybook/cli sb init
рднрд╛рдЧреЗ), рдмрд╕ рд╕рд┐рдмрд▓рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ preview.js
рдЬреЛрдбрд╝реЗрдВ, рдлрд┐рд░ рдРрд╕рд╛ рдХрд░реЗрдВ:
// .storybook/preview.js
require('!style-loader!css-loader!../src/css/tailwind-utility-classes.css')
рдпрджрд┐ рдпрд╣ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрди рд▓реЛрдбрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ (рд╡реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЕрдЧрд░ рдпрд╣ рдПрдХ рд╕реАрдЖрд░рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ), рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ (рдпрд╛рдиреА yarn add style-loader css-loader
)ред
рдереНрд░реЗрдб рдХреЛ рдмрдВрдж рдХрд░реЗрдВ рддрд╛рдХрд┐ рд▓реЛрдЧ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдХреА рдУрд░ рдХреВрдж рд╕рдХреЗрдВ рдЬрдм рдЙрддреНрдерд╛рди / рдкрджрд╛рд╡рдирдд рд╕рдорд╛рдзрд╛рди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдП?
@garrettmaring рдЖрдк рдХреЗ рд╕рд╛рде рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереА
.storybook/preview.js
рдмрдЬрд╛рдп.storybook/config.js
?
рдЬрдм рдореИрдВ рдПрдХ рд╣реА рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЗ рдЕрдВрджрд░ styles.css
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реВрдВ рдФрд░ import './styles.css';
рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ preview.js
рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореЗрд░реА рд╕реНрдЯреЛрд░реАрдмреБрдХ рдЕрдЪрд╛рдирдХ рд▓реЛрдбрд┐рдВрдЧ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдлрдВрд╕ рдЬрд╛рддреА рд╣реИ ... :(
рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдХреИрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП?
рдореИрдВ рд╡реЗрдмрдХрдореНрдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдУрдкрди-рдбрдмреНрд▓реНрдпреВрд╕реА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗ рд╕рд╛рде рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ .storybook
рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ preview.js
рдФрд░ main.js
рдлрд╝рд╛рдЗрд▓ рд╣реИред
@dcts рдЬреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ ./styles.css
рдЯреЗрд▓рд╡рд┐рдВрдб рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд┐рдиреНрд╣реЗрдВ рдкреВрд░реНрд╡-рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ "рдЯреВрдЯреА рд╣реБрдИ" рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВред
рдореБрдЭреЗ рддреАрди рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдереА:
css/tailwind.css
рдЬрд╣рд╛рдВ рдореИрдВ рдЕрдкрдиреЗ рдЯреЗрд▓рд╡рд┐рдВрдб рд╕реЗрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреБрдЫ рднреА рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реВрдВредpostcss css/tailwind.css -o css/index.css
.storybook/preview.js
(рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдирд╛рдПрдВ) рдореЗрдВ import '../css/index.css
рдореИрдВ рдЯреНрд╡рд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдЗрд╕ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдореНрдореАрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:
import tw, { styled } from 'twin.macro'
const StyledReactionButton = styled.button`
${tw`bg-blue-400 bg-opacity-25`}
`
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреЛрд╕реНрдЯрдкреНрд╕ рд╕реНрдЯреЗрдк рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░реАрдмреБрдХ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЛ рдПрдбрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ред
рдореИрдВ scue рдХреЗ рд╕рд╛рде Vue.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░рд╛ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдкреНрд░реАрд╡реНрдпреВ.рдЬреЗрдПрд╕ рдореЗрдВ рдЧреНрд▓реЛрдмрд▓ рдПрд╕рд╕реАрдПрд╕ рдХрд╛ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореЗрд░рд╛ рдХреНрд░реЛрдо рдбрд┐рд╡реЛрд▓реНрдЯ рд╕реБрдкрд░ рдзреАрдорд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ред рдХрд┐рд╕реА рдХреЛ рднреА рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд░рд╣рд╛ рд╣реИ? рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк? рдореИрдВ рдЕрдкрдиреА рдкреНрд░рддреНрдпреЗрдХ рдХрд╣рд╛рдиреА рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрддрд░ рдкрд░ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдиреЗ рдПрдХ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рддрд░реАрдХрд╛ __from official docs__ рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреВрд░ рдХрд░рддрд╛ рд╣реИред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╣рдореЗрдВ scss рд▓реЛрдбрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Webpack рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
// .storybook/main.js
const path = require('path');
// Export a function. Accept the base config as the only param.
module.exports = {
webpackFinal: async (config, { configType }) => {
// `configType` has a value of 'DEVELOPMENT' or 'PRODUCTION'
// You can change the configuration based on that.
// 'PRODUCTION' is used when building the static version of storybook.
// Make whatever fine-grained changes you need
config.module.rules.push({
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader'],
include: path.resolve(__dirname, '../'),
});
// Return the altered config
return config;
},
};
рдЕрдм рдЖрдк .storybook/preview.js
рдореЗрдВ ass рдХреЗ рд░реВрдк рдореЗрдВ scss рдлрд╝рд╛рдЗрд▓реЗрдВ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
// .storybook/preview.js
import "../src/styles/main.scss";
// ...
... рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрдкрдХреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рднреА:
<!-- src/components/MyComponent.vue -->
<template>
...
</template>
<script>
// ...
</script>
<style lang="scss">
<strong i="18">@import</strong> "../styles/components/components.my-component";
</style>
рдореИрдВ рдПрдХ рдРрд╕реЗ рдореБрджреНрджреЗ рдкрд░ рднрд╛рдЧ рдЧрдпрд╛, рдЬрд┐рд╕рдореЗрдВ preview.js
рд╕реЗ рдПрдХ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ SCSS рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП 5+ рд╕реЗрдХрдВрдб рдХреА рдкреБрди: рдмрд┐рдХреНрд░реА рд╣реЛ рд░рд╣реА рд╣реИред рдХрд┐рд╕реА рдХрд╣рд╛рдиреА рдореЗрдВ рдЗрд╕реЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдиреЗ рд╕реЗ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рд╡рд╛рдкрд╕ <1s recompile times рдкрд░ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧреИрдЯреНрд╕рдмреА рдФрд░ рдорд╛рдирдХ рдПрд╕рд╕реАрдПрд╕ рдкреНрд░реАрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣рд╛ рд╣реВрдВред global.scss
рдлрд╝рд╛рдЗрд▓ рдХреЛ preview.js
рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ global.scss
рдореЗрдВ рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдШрдЯрдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ:
ERROR in ./src/stories/button.scss (./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/stories/button.scss)
Module build failed (from ./node_modules/sass-loader/dist/cjs.js):
SassError: Undefined variable: "$black".
рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ Global.scss рдлрд╝рд╛рдЗрд▓ рдмрд╣реБрдд рджреЗрд░ рд╕реЗ рднрд░реА рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдмрдЧ рднреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реИрд╢реНрд╡рд┐рдХ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ preview.js
рдЬреЛрдбрд╝рдирд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╡рд┐рдзрд┐ рд╣реИред
рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ
рдпрд╣ рдЖрджреЗрд╢ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдореИрдВ Global.scss рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦреВрдВред
body {
background-color: black;
}
рдФрд░ Button.scss рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд:
body {
background-color:green;
}
рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд░рдВрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рд░рд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ Buttons.scss рдХреЛ Global.scss рдХреЗ рдмрд╛рдж рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЪрд░ рдЕрднреА рднреА рдирд╣реАрдВ рдЙрдард╛рдП рдЧрдП рд╣реИрдВред
рдЙрдкрд╛рдп
рдпреАрдЬрд╝, рдореИрдВрдиреЗ рдЖрдЬ рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦрд╛ рд╣реИред рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ sass рдЪрд░реЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ sass-рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкреБрд░рд╛рдирд╛ рддрд░реАрдХрд╛ @import рдХрд╛ рдЙрдкрдпреЛрдЧ button.scss
рд╕рд╛рде @use pathtomodule/global.scss
рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ preview.js
рдЕрдирд╛рд╡рд╢реНрдпрдХ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдФрд░ рдХреИрдЪ рдерд╛ред @use рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ npm i node-sass --save-dev
)ред рдПрдХ рдкреИрдХреЗрдЬ рд╣реИ рдЬрд┐рд╕реЗ dart-sass
( npm i dart-sass --save-dev
) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдП рдЧрдП рдкреНрд░реАрд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рдбрд╛рд░реНрдЯ рд╕реИрд╕ рдирд┐рдпрдорд┐рдд рд╕реИрд╕ рдмрди рдЧрдпрд╛ рд╣реИ ред рдЖрдк рдмрд╕ рдЗрд╕реЗ npm i sass --save-dev
рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рд╛рдп @Piepongwong ,
рдореИрдВ Gatsby рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди Vue рдореЗрдВ рдореИрдВрдиреЗ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рднреА рдорд┐рдХреНрд╕рд┐рди рдФрд░ рд╡реИрд░рд┐рдПрдмрд▓ рдЖрдпрд╛рддреЛрдВ рдХреЛ _common.scss
рдирд╛рдордХ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛:
<style lang="scss">
<strong i="9">@import</strong> 'path/to/styles/_common.scss';
<strong i="10">@import</strong> 'path/to/styles/components/_components.component.scss';
</style>
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдореЗрд░реЗ рдорд┐рд╢реНрд░рдг рдФрд░ рдЪрд░ рдореМрдЬреВрдж рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЕрд╡рдЧрдд рд░рд╣реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕рднреА рдШрдЯрдХреЛрдВ рдФрд░ рдЪрд░ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрдиреБрдХреЗрдЯреНрд╕ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрдореНрдореАрдж рд╣реИ рдХреА рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛ред
рд╣рд╛рдп @omaracrystal рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛:
.storybook/config.js
рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ, рд╕рд╣реА рд▓реЛрдбрд░ рдЗрдирдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд рдЬреЛрдбрд╝реЗрдВ:import '!style-loader!css-loader!sass-loader!./scss-loader.scss';
рдлрд┐рд░
scss-loader.scss
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдХреА рд╕рднреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ / рдЖрдпрд╛рдд рдХрд░реЗрдВ:$font-path: '../projects/lib/src/theming/fonts/OpenSans/'; <strong i="15">@import</strong> '../projects/lib/src/theming/reset.scss'; <strong i="16">@import</strong> '../projects/lib/src/theming/main.scss'; html { font-family: $font-name; font-size: $font-size--small; }
@ рдХреНрд░реЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдПрдХ рдХреЛрдгреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдЖрдкрдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреЛрдгреАрдп рдореЗрдВ
styles
рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рдлрд╝рд╛рдЗрд▓рдХреНрдпрд╛ рд╡рд╣ рд╕рднреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ? рдореЗрд░реЗ рдкрдХреНрд╖ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ :(
рдореЗрд░реЗ рд▓рд┐рдП рдирд╣реАрдВ :( рдореИрдВ рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ рдФрд░ рд░рд┐рдПрд╕реНрдЯреНрд░реИрдк рдХреЗ рд╕рд╛рде рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ app.scss рдХреЛ рд▓реЛрдб рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛ / -
рд╣рд╛рдп @omaracrystal рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛:
.storybook/config.js
рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ, рд╕рд╣реА рд▓реЛрдбрд░ рдЗрдирдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд рдЬреЛрдбрд╝реЗрдВ:import '!style-loader!css-loader!sass-loader!./scss-loader.scss';
рдлрд┐рд░
scss-loader.scss
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдХреА рд╕рднреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ / рдЖрдпрд╛рдд рдХрд░реЗрдВ:$font-path: '../projects/lib/src/theming/fonts/OpenSans/'; <strong i="16">@import</strong> '../projects/lib/src/theming/reset.scss'; <strong i="17">@import</strong> '../projects/lib/src/theming/main.scss'; html { font-family: $font-name; font-size: $font-size--small; }
@ рдХреНрд░реЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдПрдХ рдХреЛрдгреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдЖрдкрдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреЛрдгреАрдп рдореЗрдВ
styles
рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рдлрд╝рд╛рдЗрд▓рдХреНрдпрд╛ рд╡рд╣ рд╕рднреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ? рдореЗрд░реЗ рдкрдХреНрд╖ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ :(
рдореЗрд░реЗ рд▓рд┐рдП рдирд╣реАрдВ :( рдореИрдВ рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ рдФрд░ рд░рд┐рдПрд╕реНрдЯреНрд░реИрдк рдХреЗ рд╕рд╛рде рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ app.scss рдХреЛ рд▓реЛрдб рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛ / -
@Hayatbiralem рддрд░реАрдХрд╛ рдЖрдЬрд╝рдорд╛рдПрдВ - рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░реАрдмреБрдХ @storybook/[email protected]
рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ред рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ!
// .storybook/main.js
const path = require('path');
module.exports = {
"stories": [
"../stories/**/*.stories.mdx",
"../stories/**/*.stories.@(js|jsx|ts|tsx)",
"../app/frontend/components/**/*.stories.@(js|jsx|ts|tsx)"
],
"addons": [
"@storybook/addon-links",
"@storybook/addon-essentials",
'@storybook/preset-scss'
],
webpackFinal: async (config) => {
// this sets the default path for modules
config.resolve.modules = [
...(config.resolve.modules || []),
path.resolve(__dirname, "../app/frontend"),
];
config.module.rules.map(rule => {
if (rule.test instanceof RegExp && rule.test.toString() === '/\\.s[ca]ss$/') {
rule.use.push({
loader: require.resolve('sass-resources-loader'),
options: {
resources: [
path.resolve(__dirname, '../app/frontend/styles/base/_variables.scss')
]
}
})
}
return rule
})
return config;
},
}
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╣рд╛рдп @omaracrystal рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛:
.storybook/config.js
рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ, рд╕рд╣реА рд▓реЛрдбрд░ рдЗрдирдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд рдЬреЛрдбрд╝реЗрдВ:рдлрд┐рд░
scss-loader.scss
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рдд рдХреА рд╕рднреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ / рдЖрдпрд╛рдд рдХрд░реЗрдВ:@ рдХреНрд░реЛрдбрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдПрдХ рдХреЛрдгреАрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдЖрдкрдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреЛрдгреАрдп рдореЗрдВ
styles
рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рдлрд╝рд╛рдЗрд▓