Storybook: рдореИрдВ рдПрдХ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЗ рдЕрдВрджрд░ рд╕реАрдПрд╕рдПрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ

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

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдореЗрд░рд╛ рдЖрд╡реЗрджрди рдХреБрдЫ рд╕реАрдПрд╕рдПрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЬреИрд╕реЗ рдХрд┐ рд╕реЗрдореЗрдЯрд┐рдХ рдпреВрдЖрдИ, рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдпрд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдореИрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрд╕ рд╢реИрд▓реА рдХреЛ рдХрд╣рд╛рдиреА рдХреА рдХрд┐рддрд╛рдм рдХреЗ рдЕрдВрджрд░ рдХреИрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдореЗрд░реЗ рдШрдЯрдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдВ?

compatibility with other tools question / support

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

рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛: https://storybook.js.org/configurations/default-config/#css-

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

рд╣рд╛рдБ рдпрд╣реА рд╣реИред рдпрд╣рд╛рдВ рдкрдврд╝реЗрдВ- https://github.com/kadirahq/react-storybook/blob/master/docs/setting-up-for-css.md

рдореБрдЭреЗ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП, рдмрд╕ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВред

UPD 2017-08-17 (@hypnos)
https://storybook.js.org/configurations/add-custom-head-tags/

рд▓рд┐рдВрдХ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВ рдвреВрдБрдв рд╕рдХрддрд╛ред

рдзрдиреНрдпрд╡рд╛рджред рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ ".storybook" рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ head.html рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рдирд╛ рдерд╛ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдпрд╛ рд╢рдмреНрджрд╛рд░реНрде рдпреВрдЖрдИ рдХреЗ рд▓рд┐рдП рддрддреНрд╡

UPD 2017-08-17 (@hypnos)
рдЕрдм рдпрд╣ preview_head.html

рдзрдиреНрдпрд╡рд╛рдж head.html рд╡рд┐рдзрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ!

рдХреНрдпрд╛ head.html рднреА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ URL рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╣реЛрд╕реНрдЯ рдХреА рдЧрдИ рд╣реИ? рд╡рд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛?

рджреЛрдиреЛрдВ рд▓рд┐рдВрдХ рдЯреВрдЯ рдЧрдП рд╣реИрдВред

рдЯреВрдЯреЗ рд╣реБрдП рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╣рдорд╛рд░реЗ рдкреБрдирд░реНрдЧрдарди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдЦреЛрдЬрдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЦреЛрдЬ рд╣реИред

рдЖрдк рдХреНрдпрд╛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ / @kirkstrobeck рдХреЗ рд╕рд╛рде рдорджрдж рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ? рдпрд╣ рдореБрджреНрджрд╛ рдХрд╛рдлреА рдкреБрд░рд╛рдирд╛ рдФрд░ рдмрдВрдж рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛ рд╣реИ рддреЛ рд╣рдо рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдЗрдП рдЬрд╛рдирддреЗ рд╣реИрдВ problem

рдореИрдВ рдпрд╣рд╛рдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреИрд╕реЗ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реА рд╕рднреА рд╢реИрд▓рд┐рдпрд╛рдВ app/assets/stylesheets рдореЗрдВ scss рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╣реЛрдВред

рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрдврд╝рд╛рдиреЗ / рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╕реНрдЯрдо рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдЗрд╕рдореЗрдВ рдЖрдкрдХреЛ webpack рдХреЛ .scss -files рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдпрд╣ рдмрддрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЙрд░реНрдл, рдЖрдкрдХреЛ sass-loader рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рдВрднрд╡рддрдГ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрдк рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реЗрдЯрдЕрдк рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕реЗ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд┐рдЧ рд╕реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛: https://storybook.js.org/configurations/default-config/#css-

@ рд╡рд░реБрдгреЛрджрдп рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рджреЛ рд▓рд┐рдВрдХ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдКрдкрд░ рдЕрдВрдХрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рдкреГрд╖реНрда рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреА рдмрдЪрдд рдХрд░реЗрдВред рдзрдиреНрдпрд╡рд╛рдж!

рднреНрд░рдорд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рд╢рд╛рдпрдж рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рднреА рдЙрдХрд╕рд╛рдпрд╛ред

рдмрд╕ рдкреБрд░рд╛рдиреА рд▓рд┐рдВрдХ рд╡рд╛рд▓реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛

рдХрд╣рд╛рдиреА рдХреА рдХрд┐рддрд╛рдм рдХреЗ рд▓рд┐рдП рд╣реИрдбрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ preview-head.html рд╕рдВрджрд░реНрдн рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
https://storybook.js.org/configurations/add-custom-head-tags/

рдореЗрд░реЗ "рдореБрдЦреНрдп" рдРрдк рдХреЗ рднреАрддрд░ рдореЗрд░реА рд╡реИрд╢реНрд╡рд┐рдХ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рднреАрддрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╕рднреА рд╡реИрд╢реНрд╡рд┐рдХ рд╕реАрдПрд╕рдПрд╕ рдирд┐рдпрдореЛрдВ рд╡рд╛рд▓реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред
рдХреНрдпрд╛ рд╕реАрдПрд╕рдПрд╕ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЗрдлреНрд░реЗрдо рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХрд╣рд╛рдирд┐рдпрд╛рдВ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЬрд╛рддреА рд╣реИрдВ?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдЪреВрдВрдХрд┐ рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╢реИрд▓реА рд╡рд╛рд▓реЗ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдм рдореИрдВ рдЙрдирдХреЗ injectGlobal рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

@flavordaaave рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк config.js рд╕реЗ рд╢реИрд▓реА-рдЯреИрдЧ рдореЗрдВ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

@ndelangen рдЕрдм рддрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╢реИрд▓реА ( import './styles.css'; рдпрд╛ preview-head.html ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЬреЗрдХреНрд╢рди рд▓рдЧрд╛рдиреЗ рдХреА рд╕рднреА рд╕рдВрднрд╛рд╡рдирд╛рдПрдБ рдореБрдЭреЗ рдЧрддрд┐рд╢реАрд▓ рдкрд╛рд░рд╛рдо рдХреЗ рд╕рд╛рде рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВред

рдореЗрд░реА рд╢реИрд▓реА рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

/* .storybook/config.js */

import theme from './theme'

export default `
html {
  font-family: Helvetica;
  background: ${theme.canvas_ground};
  ...
}
`

рддреЛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ injectGlobal react-styled-components рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдореЗрд░реЗ EDIT рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

/* .storybook/config.js */
...
import { injectGlobal } from 'styled-components'
import styles from '../src/styles'

injectGlobal`${styles}`
...

рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

// create a <style></style> DOM element
const styleElement = document.createElement('style')
// put the text from styles variable between opening and closing <style> tags
styleElement.appendChild(document.createTextNode(styles))
// place the style element inside <head>
document.head.appendChild(styleElement)

рдирдорд╕реНрддреЗ!
рдореИрдВ рдЕрдкрдиреА рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рдХреЛ рд╕реНрдЯреЛрд░реАрдмреБрдХ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рд╣рдбрд╝рддрд╛рд▓реА рд╣реВрдВред

рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд╛рдЗрд▓ (рдЬреЛ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд░реВрдЯ рдореЗрдВ static/style.css рдореЗрдВ рд░рд╣рддреА рд╣реИ) рдХреЛ рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛: import '../static/style.css'; ред рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк r рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИ

Error: Can't resolve '../i/link.svg' in [path]

рдореИрдВ рдЕрдкрдиреА рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рдореЗрдВ рд╣рд░ рдмрд╛рд╣рд░реА-рд╕рдВрджрд░реНрднрд┐рдд рд╕рдВрд╕рд╛рдзрди рдХреЛ рд╕рдореЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рднреА рдХрдареЛрд░рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рдореИрдВрдиреЗ рдЗрди рдбреЙрдХреНрд╕ рдореЗрдВ preview-head.html рдкреНрд░рддрд┐ рдЬреЛрдбрд╝рд╛, рдЕрдкрдиреА рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдВрдХ рдХрд┐рдпрд╛:

<link rel="stylesheet" href="./static/style.css" />

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП 404 рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред I _think_ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдкрд╛рде рдЗрд╢реВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХрд╣рд╛рдБ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореИрдВ рдХрд┐рд╕ рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВред рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рдпрджрд┐ рдЖрдкрдХреЛ 404 рдорд┐рд▓ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╕реАрдПрд╕рдПрд╕ рдПрдХ рд╕реАрдбреАрдПрди рдкрд░ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рд╕реНрдерд┐рд░ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд╕рд╛рде рд╕реНрдЯреЛрд░реАрдмреБрдХ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдХреЗрд╡рд▓ ./some.css рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред storybook -p 9001 -s ./a-static-folder рдЪрд▓рд╛рдПрдВ рдФрд░ рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЕрдкрдирд╛ рд╕реАрдПрд╕рдПрд╕ рдбрд╛рд▓реЗрдВред

рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, @nickytonline рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореЗрд░реЗ рдкрд╛рд╕ static/style.css рдореЗрдВ рдЕрдкрдиреА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдФрд░ рдореИрдВрдиреЗ рдХрдорд╛рдВрдб storybook -p 9001 -s ./static рднрд╛рдЧрд╛ред рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк storybook: command not found ред рдореИрдВрдиреЗ npm run storybook -p 9001 -s ./static рднрд╛рдЧ рд▓рд┐рдП, рдЬреЛ рдлрд┐рд░ рднреА рдЪрд▓рд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдореЗрд░реА рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рдкрд░ 404 рддреНрд░реБрдЯрд┐ рд╣реБрдИред

@bradfrost , рд╕рд┐рд░реНрдл рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдк npm run storybook -p 9001 -s ./static , ./static рдЬреИрд╕реЗ / ./static рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреА рдлрд╝рд╛рдЗрд▓ static/styles.css рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реИ рдЖрдкрдХрд╛ рд▓рд┐рдВрдХ <link rel="stylesheet" href="./styles.css" /> рдирд╣реАрдВ <link rel="stylesheet" href="./static/styles.css" />

@nickytonline рд╣рд╛рдВ, рдореЗрд░реЗ рдкрд╛рд╕ <link rel="stylesheet" href="./styles.css" /> рд░реВрдк рдореЗрдВ рдЬреБрдбрд╝реА рд╣реБрдИ рдЪреАрдЬреЗрдВ рдереАрдВред

@bradfrost рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдХреЗ рд▓рд┐рдП <link /> рдЯреИрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рд╕реНрдЯреЛрд░реАрдмреБрдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд░рд╣реА рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдпрд╣ рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, https://github.com/nickytonline/for-brad

рдЖрдк рдпрд╣рд╛рдБ рд╕рдВрджрд░реНрднрд┐рдд рд╢реИрд▓реА рдкрддреНрд░рдХ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, https://github.com/nickytonline/for-brad/blob/master/.storybook/preview-head.html#L1

image

@nickytonline рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдБред

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

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЖрдкрдХреА рдореВрд▓ рдкреЛрд╕реНрдЯ рдХреА рд╕рдВрдкреВрд░реНрдг рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрд╡рд╢реЛрд╖рд┐рдд рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдмреБрд░рд╛ред рдЕрдЧрд░ рдЖрдк рд░рд┐рдЧрд╛рдорд╛рд▓реЗрд░реЛ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЕрдЪрд╛рд░ рдХрд╛рдлреА рд╣реИред рдЧреЛрдирд╛ рдХреЛ рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕реЛрдЪрдирд╛ рд╣реЛрдЧрд╛ред

рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ 'рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ' рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
'рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ / рд╢рдмреНрджрд╛рд░реНрде' рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ 'node_modules / рдЕрд░реНрде-рдпреВрдЖрдИ-рд╕реАрдПрд╕рдПрд╕' рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдбрд╛рд▓реЗрдВред
in package.json => рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ => рд╕реНрдЯреЛрд░реАрдмреБрдХ => '' -s/public "рдЬреЛрдбрд╝реЗрдВ
рдЖрдЦрд┐рд░реА рдЪреАрдЬ!!! рдЕрдкрдиреЗ рдШрдЯрдХ рдореЗрдВ .less рдлрд╝рд╛рдЗрд▓ do
рдЕрдм рдЖрдЗрдХрди рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕реНрдЯреЛрд░реАрдмреБрдХ v5 рдФрд░ normalize.css "рдлреНрд░реЗрдорд╡рд░реНрдХ" рдХреЗ рд▓рд┐рдП, рдпрд╣ import "normalize.css"; .storybook/config.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

@jmarceli рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рднреА v6 рдХреЗ рд╕рд╛рде рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИ?

рд╕реНрдЯреЛрд░реАрдмреБрдХ v5 рдФрд░ normalize.css "рдлреНрд░реЗрдорд╡рд░реНрдХ" рдХреЗ рд▓рд┐рдП, рдпрд╣ import "normalize.css"; .storybook/config.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

@ snyderhaus рд╣рд╛рдБ, рд╣рд╛рд▓рд╛рдБрдХрд┐ 5.3 config.js рдирд░рдо-рдЕрдк- рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣рдо рджреГрдврд╝рддрд╛ рд╕реЗ preview.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВред рдФрд░ рдЬрд╛рдирдХрд╛рд░реА:

https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#to -mainjs- рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рдореИрдВ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдмрд╛рд░ рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ рдЖрдпрд╛ рд╣реВрдВ! рддреЛ рдпрд╣ рдореЗрд░реЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рднреА рд╣реИред

рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред

// storybook/config.js

import 'semantic-ui-css/semantic.min.css';
import 'bootstrap/dist/css/bootstrap.css';
import '!style-loader!css-loader!sass-loader!../client/scss/style.scss';

рдореЗрд░рд╛ style.scss sass рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдереАрдо рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд░рд╣рд╛ рд╣реИ

рдореИрдВ рд╕реНрдЯреЛрд░реАрдмреЙрдХреНтАНрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНтАНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдФрд░ рдХреЗрд╡рд▓ рд╢реИрд▓реА рдкрддреНрд░рдХ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реВрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЙрдХреНрд╕ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЕрдиреБрд╕рд╛рд░ рдореЗрд░реА sass рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрдирд▓рд╛рдЗрди рд▓реЛрдбрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред

"babel-core": "6.26.0",
"babel-loader": "7.1.4",
"@storybook/react": "^5.3.14",
"sass-loader": "^8.0.2",
"css-loader": "^3.4.2",
"style-loader": "0.20.3",
"react": "^16.3.2",

V6 + рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП config.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рд╣реВрдВ:

  • .storybook рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ preview.js рдирд╛рдордХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ
  • рдмрд╛рд╣рд░реА рд╕реАрдПрд╕рдПрд╕ рдЖрдпрд╛рдд рдХрд░реЗрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реЗ scss рдлрд╛рдЗрд▓реЗрдВ рдереАрдВ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рд╣реИ:
// .storybook/preview.js

import '!style-loader!css-loader!sass-loader!@company/framework/src/styles.sass'
import '!style-loader!css-loader!sass-loader!./cssoverrides.sass'

рджреВрд╕рд░рд╛ рдЖрдпрд╛рдд рдХреБрдЫ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реИрд╢реНрд╡рд┐рдХ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред

рдореЗрд░реА рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛:

.storybook
тФВ   cssoverrides.sass
тФВ   main.js  
тФВ   preview.js

рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЬ:

"@storybook/react": "^6.0.0",
"react": "^16.13.1",
"@babel/core": "^7.11.1",
"@babel/preset-env": "^7.11.0",
"@babel/preset-react": "^7.10.4",
"sass-loader": "^9.0.3",
"css-loader": "^4.2.1",
"style-loader": "^1.2.1"

рдореЗрд░реЗ рд▓рд┐рдП рдЬреЛ рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд╡рд╣ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдкрд░ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдерд╛ ред/storybook/preview.js

//I added this:
import 'bootstrap-4-grid/css/grid.min.css';

//this was already there
export const parameters = {
  actions: { argTypesRegex: '^on[A-Z].*' },
};

https://storybook.js.org/docs/react/configure/styling-and-css#importing -css-files

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

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

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

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

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

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