Storybook: рд╕рднреА рд╕реНрдЯреЛрд░реАрдмреБрдХ iframes рдХреЗ рд▓рд┐рдП рдореИрдВ рдПрдХ рдмрд╛рд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╢реИрд▓рд┐рдпреЛрдВ (scss) рдХреЛ рдХреИрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░реВрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдЕрдкреНрд░реИрд▓ 2019  ┬╖  39рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: storybookjs/storybook

рдмрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
рдореИрдВ рд╕рднреА рд╕реНрдЯреЛрд░реАрдмреБрдХ рдЗрдлреНрд░реЗрдореНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╢реИрд▓рд┐рдпреЛрдВ (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]

рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрджрд░реНрдн
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЗ рднреАрддрд░ рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдмрдирд╛ рджреЗрдЧрд╛ред

angular has workaround inactive question / support

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

рд╣рд╛рдп @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 рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рдлрд╝рд╛рдЗрд▓

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

рдЕрдкрдиреЗ 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 рдЯреЗрд▓рд╡рд┐рдВрдб рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд┐рдиреНрд╣реЗрдВ рдкреВрд░реНрд╡-рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ "рдЯреВрдЯреА рд╣реБрдИ" рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВред

рдореБрдЭреЗ рддреАрди рдЪреАрдЬреЗрдВ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рдереА:

  1. рдПрдХ рдЗрдирдкреБрдЯ рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ css/tailwind.css рдЬрд╣рд╛рдВ рдореИрдВ рдЕрдкрдиреЗ рдЯреЗрд▓рд╡рд┐рдВрдб рд╕реЗрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреБрдЫ рднреА рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реВрдВред
  2. рд╕реНрдЯреЛрд░реАрдмреБрдХ рдЪрд▓рд╛рддреЗ рд╕рдордп, рдкрд╣рд▓реЗ рдЙрд╕ рдлрд╛рдЗрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ PostCSS рдХрдорд╛рдВрдб postcss css/tailwind.css -o css/index.css
  3. .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;
  },
}
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

tomitrescak picture tomitrescak  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

alexanbj picture alexanbj  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ZigGreen picture ZigGreen  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

shilman picture shilman  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

levithomason picture levithomason  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ