рдмрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
рдЬреИрд╕рд╛ рдХрд┐ рддрдХрдиреАрдХреА рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдЧрд╛рдЗрдб рдореЗрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИ, рдбреЙрдХреНрд╕ рдкреНрд░реАрд╕реЗрдЯ рдореЗрдВ sourceLoaderOptions: null
рдкрд╛рд╕ рдХрд┐рдП рдмрд┐рдирд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ:
Variable '__MODULE_DEPENDENCIES__' implicitly has an 'any[]' type
рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдХрд╣рд╛рдирд┐рдпреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдХреЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ tsconfig.json
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "noImplicitAny": false
ред
рдкреНрд░рдЬрдирди рдХрд░рдирд╛
рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо:
addon-docs
рд▓рд┐рдП рдПрдХ рдХрд╣рд╛рдиреА рд▓рд┐рдЦреЗрдВрдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░
рдбреЙрдХреНрд╕ рдкреГрд╖реНрда рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдХрд╣рд╛рдиреА рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдЙрдкрд▓рдмреНрдз рд╣реЛрддрд╛ рд╣реИред
рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ
рдпрджрд┐ рд▓рд╛рдЧреВ рд╣реЛ, рддреЛ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рд╕рдордЭрд╛рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЬреЛрдбрд╝реЗрдВред
рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ
presets.js
:
{
name: '@storybook/addon-docs/react/preset',
options: {
sourceLoaderOptions: null,
},
}
рдкреНрд░рдгрд╛рд▓реА:
рдкрд░реНрдпрд╛рд╡рд░рдг рдЬрд╛рдирдХрд╛рд░реА:
рдкреНрд░рдгрд╛рд▓реА:
рдУрдПрд╕: рдореИрдХреЛрдЬрд╝ 10.14.5
рд╕реАрдкреАрдпреВ: (16) x64 рдЗрдВрдЯреЗрд▓ (рдЖрд░) рдХреЛрд░ (рдЯреАрдПрдо) i9-9880H рд╕реАрдкреАрдпреВ @ 2.30GHz
рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝:
рдиреЛрдб: 10.16.0 - /usr/рд▓реЛрдХрд▓/рдСрдкреНрдЯ/рдиреЛрдб@10/рдмрд┐рди/рдиреЛрдб
рдпрд╛рд░реНрди: 1.17.3 - ~/рд╡рд░реНрдХрд╕реНрдкреЗрд╕/рдШрдЯрдХ-рд▓рд╛рдЗрдмреНрд░реЗрд░реА/рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕/.рдмрд┐рди/рдпрд╛рд░реНрди
рдПрдирдкреАрдПрдо: 6.9.0 - /usr/рд▓реЛрдХрд▓/рдСрдкреНрдЯ/рдиреЛрдб@10/рдмрд┐рди/рдПрдирдкреАрдПрдо
рдмреНрд░рд╛рдЙрдЬрд╝рд░:
рдХреНрд░реЛрдо: 76.0.3809.100
рд╕рдлрд╛рд░реА: 12.1.1
рдПрдирдкреАрдПрдо рдкреИрдХреЗрдЬ:
@storybook/addon-a11y: ^5.2.0-beta.36 => 5.2.0-beta.38
@storybook/addon-actions: ^5.2.0-beta.36 => 5.2.0-beta.38
@storybook/addon-docs: ^5.2.0-beta.36 => 5.2.0-beta.38
@ Storybook/addon-knobs: ^5.2.0-beta.36 => 5.2.0-beta.38
@ Storybook/addon-links: ^5.2.0-beta.36 => 5.2.0-beta.38
@storybook/addon-viewport: ^5.2.0-beta.36 => 5.2.0-beta.38
@storybook/addons: ^5.2.0-beta.36 => 5.2.0-beta.38
@ рд╕реНрдЯреЛрд░реАрдмреБрдХ/рдкреНрд░реАрд╕реЗрдЯ-рдПрд╕рд╕реАрдПрд╕рдПрд╕: 1.0.2 => 1.0.2
@ рд╕реНрдЯреЛрд░реАрдмреБрдХ/рдкреНрд░реАрд╕реЗрдЯ-рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ: 1.1.0 => 1.1.0
@рд╕реНрдЯреЛрд░реАрдмреБрдХ/рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛: ^5.2.0-рдмреАрдЯрд╛.36 => 5.2.0-рдмреАрдЯрд╛.38
@ рд╕реНрдЯреЛрд░реАрдмреБрдХ/рдереАрдорд┐рдВрдЧ: ^5.2.0-рдмреАрдЯрд╛.36 => 5.2.0-рдмреАрдЯрд╛.38
рдзрдиреНрдпрд╡рд╛рдж @enagy27! рдпрд╣рд╛рдВ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
1) source-loader
рдЯрд╛рдЗрдкрдкреНрд░рддрд┐-рдорд┐рддреНрд░ рдХреЛрдб рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
2) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдореЛрдиреЛрд░реЗрдкреЛ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ)
3) source-loader
рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд▓рд┐рдП @ts-ignore
рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреАрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реАрдзрд╛ рд╣реИ, рдкрд╣рд▓рд╛ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд╣реИ
рдорд╣рд╛рди рд╕реАрдЬрд╝рд░ рдХрд╛ рднреВрдд !! рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА https://github.com/storybookjs/storybook/releases/tag/v5.2.0-beta.39 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ PR #7831 рд╣реИ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИред рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЬ рд╣реА рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВ!
рдЖрдк рдЗрд╕ рдкреВрд░реНрд╡-рд░рд┐рд▓реАрдЬрд╝ рдХреЛ @next
NPM рдЯреИрдЧ рдкрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ред рдХреГрдкрдпрд╛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рдФрд░ рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИред
@ enagy27 рдореЗрдВ рд░реЗрдкреНрд░реЛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
@shilman рдмрд┐рд▓реНрдХреБрд▓! рдЗрд╕реЗ рдЕрдм рдПрдХ рд╢реЙрдЯ рджреЗ рд░рд╣реЗ рд╣реИрдВред рд╢реБрдХреНрд░рд┐рдпрд╛!
@shilman рдЕрднреА рднреА рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ beta.39
рдкрд░ рджреЗрдЦ рд░рд╣рд╛ рд╣реИ
ERROR in /Users/eric.nagy/workspace/component-library/src/elements/tag/tag.stories.tsx
./src/elements/tag/tag.stories.tsx
[tsl] ERROR in /Users/eric.nagy/workspace/component-library/src/elements/tag/tag.stories.tsx(69,52)
TS7005: Variable '__MODULE_DEPENDENCIES__' implicitly has an 'any[]' type.
ERROR in /Users/eric.nagy/workspace/component-library/src/elements/tag/tag.stories.tsx
./src/elements/tag/tag.stories.tsx
[tsl] ERROR in /Users/eric.nagy/workspace/component-library/src/elements/tag/tag.stories.tsx(74,3)
TS2300: Duplicate identifier 'parameters'.
npx -p @storybook/cli<strong i="10">@next</strong> sb info
Environment Info:
System:
OS: macOS 10.14.5
CPU: (16) x64 Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
Binaries:
Node: 10.16.0 - /usr/local/opt/node@10/bin/node
Yarn: 1.17.3 - ~/workspace/component-library/node_modules/.bin/yarn
npm: 6.9.0 - /usr/local/opt/node@10/bin/npm
Browsers:
Chrome: 76.0.3809.100
Safari: 12.1.1
npmPackages:
@storybook/addon-a11y: ^5.2.0-beta.39 => 5.2.0-beta.39
@storybook/addon-actions: ^5.2.0-beta.39 => 5.2.0-beta.39
@storybook/addon-docs: ^5.2.0-beta.39 => 5.2.0-beta.39
@storybook/addon-knobs: ^5.2.0-beta.39 => 5.2.0-beta.39
@storybook/addon-links: ^5.2.0-beta.39 => 5.2.0-beta.39
@storybook/addon-viewport: ^5.2.0-beta.39 => 5.2.0-beta.39
@storybook/addons: ^5.2.0-beta.39 => 5.2.0-beta.39
@storybook/preset-scss: 1.0.2 => 1.0.2
@storybook/preset-typescript: 1.1.0 => 1.1.0
@storybook/react: ^5.2.0-beta.39 => 5.2.0-beta.39
@storybook/theming: ^5.2.0-beta.39 => 5.2.0-beta.39
рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рд╕реНрд░реЛрдд рд▓реЛрдбрд░ рдкрд░ рд╣реИ, рдХреНрдпрд╛ рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкреНрд░реАрд╕реЗрдЯ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдкреНрд░реАрд╕реЗрдЯ рдХреА рдПрдХ рдирдИ рд░рд┐рд▓реАрдЬрд╝ рдЖрд╡рд╢реНрдпрдХ рд╣реИ?
@ enagy27 рдХреНрдпрд╛ рдЖрдк рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕реНрд░реЛрдд рдкрд░ рдПрдХ рдирдЬрд╝рд░ .mdx
рдХреЛ .tsx
рдмрджрд▓реЗрдВ рдФрд░ рдмрд╛рдХреА рдХреЛ рд▓рд╛рдЧреВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)
https://github.com/storybookjs/storybook/blob/next/addons/docs/docs/faq.md#how -do-i-debug-my-mdx-story
@shilman рдореИрдВ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ рдЬрдм sourceLoaderOptions: null
рдкреНрд░рднрд╛рд╡ рдореЗрдВ рд╣реИ ЁЯШЮ рдЕрдиреНрдпрдерд╛ рдПрдХ рдЕрд╕рдлрд▓ рдирд┐рд░реНрдорд╛рдг рд╕рд░реНрд╡рд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕реНрд░реЛрдд рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВред рдХреНрдпрд╛ рдкрд╣рд▓реЗ рдЕрд╕рдлрд▓ рдирд┐рд░реНрдорд╛рдг рдкрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдмрд╛рдп-рдкрд╛рд╕ рдХрд░рдиреЗ рдФрд░ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рд╡реНрд╣реВрдкреА !! рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА https://github.com/storybookjs/storybook/releases/tag/v5.2.0-beta.40 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ PR #7845 рд╣реИ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИред рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЬ рд╣реА рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВ!
рдЖрдк рдЗрд╕ рдкреВрд░реНрд╡-рд░рд┐рд▓реАрдЬрд╝ рдХреЛ @next
NPM рдЯреИрдЧ рдкрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
@enagy27 рдиреЗ рдЖрдкрдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдорд░реНрдЬ рдХрд┐рдП рдФрд░ рдЬрд╛рд░реА рдХрд┐рдПред рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдЗрдП?
@shilman рдРрд╕реА рдХреЛрдИ рдХрд┐рд╕реНрдордд рдирд╣реАрдВ ЁЯШЮ рдореИрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рд▓рдЯрдХрд╛ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рднреА рдзреЛрдЦрд╛ рджрд┐рдпрд╛ рдФрд░ рдЙрди рд╕рднреА рдХреЛ as any
рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЪрд░ parameters
рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ __STORY__
рдареАрдХ рд╕реЗ рдмрдЪ рдирд╣реАрдВ рд░рд╣рд╛ рд╣реИ? рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореИрдВ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдХрд┐ рдпрд╣ рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рдЯреАрдПрд╕ рдирд╣реАрдВ ... рдореИрдВ рд╕реНрдЯрдореНрдкреНрдб рд╣реВрдВ
рдореИрдВ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЕрдзрд┐рдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИред
рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ рдХрд┐ рд╕реНрдЯреЛрд░реАрдмреБрдХ рд▓реЛрдб рдХрд░рдиреЗ рд╡рд╛рд▓реА tsconfig.js
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рднреА "рд╕рдЦреНрдд" рдЯрд╛рдЗрдкрдЪреЗрдХрд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рд╣реИ (рдпрд╛ рддреЛ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ tsconfig рдпрд╛ .storybook/tsconfig.js
(рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ))ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВ рдХрд┐ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВ:
@libetl рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реИрдВ рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рджреЗрдЦ рд╕рдХреЗрдВред
@JonKrone рдЬрдм рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдбреЙрдХреНрд╕ рдЯреИрдм рдореЗрдВ рд╕реЛрд░реНрд╕ рдХреЛрдб рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ? рдореИрдВрдиреЗ рдпреЗ рд╕рдВрд╢реЛрдзрди рдХрд┐рдП рд╣реИрдВ рдФрд░ рдореБрдЭреЗ рдЕрднреА рднреА рд╕реНрд░реЛрдд рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ
рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдпрджрд┐ рдЖрдк рднрдпрд╛рдирдХ-рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ-рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
/* tsconfig.json */
{
"compilerOptions": { },
"awesomeTypescriptLoaderOptions": {
"ignoreDiagnostics": [7005]
}
}
рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
@shilman рдХреНрдпрд╛ рдЖрдк рдпрд╣реА рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВ? FYI рдХрд░реЗрдВ рдпрд╣ TS7005 рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдирд╣реАрдВ рдмрдиреЗрдЧрд╛ (рдХреЛрдИ рдирд┐рд╣рд┐рдд рдирд╣реАрдВ)ред
// @ts-ignore
var withSourceLoader = require('@storybook/source-loader/preview').withSource;
// @ts-ignore
var __SOURCE_PREFIX__ = "/home/user/projects/real/ts/my-blog-react/src/graphql";
// @ts-ignore
var __STORY__ = "import React from \"react\";\n\nimport { ApolloProvider } from \"@apollo/react-hooks\";\nimport { storiesOf } from \"@storybook/react\";\n\nimport { Posts } from \"../views/Posts/index\"; // ! Fix coupling\nimport { PostContent } from \"../views/PostContent\"; // ! Fix coupling\nimport { withPostContentQuery } from \"./components/withPostContentQuery\";\nimport { withPostsQuery } from \"./components/withPostsQuery\";\nimport * as fakeQl from \"./fakeql/fakeql-endpoints\";\nimport apolloClientFactory from \"./apollo\";\n\n// FIXME: #coupling - find a way to not depend on Post and Container, probably fakes - but not good enough.\n\nconst apolloClient = apolloClientFactory(fakeQl.normalApiEndpoint);\nconst PostContentQuery = withPostContentQuery(PostContent);\nconst PostsQuery = withPostsQuery(Posts);\n\n// ~~~ Posts ~~~\nstoriesOf(\"GraphQL\", module).add(\"PostsQuery\", () => (\n <ApolloProvider client={apolloClient}>\n <PostsQuery routeHandler={() => null} />\n </ApolloProvider>\n));\n\n// ~~~ PostContent ~~~\nstoriesOf(\"GraphQL\", module).add(\"PostContentQuery\", () => (\n <ApolloProvider client={apolloClient}>\n <PostContentQuery postId=\"1\" />\n </ApolloProvider>\n));\n";
// @ts-ignore
var __ADDS_MAP__ = {"graphql--postsquery":{"startLoc":{"col":33,"line":20},"endLoc":{"col":1,"line":24},"startBody":{"col":47,"line":20},"endBody":{"col":1,"line":24}},"graphql--postcontentquery":{"startLoc":{"col":33,"line":27},"endLoc":{"col":1,"line":31},"startBody":{"col":53,"line":27},"endBody":{"col":1,"line":31}}};
// @ts-ignore
var __MAIN_FILE_LOCATION__ = "/root.stories.tsx";
// @ts-ignore
var __MODULE_DEPENDENCIES__ = [];
// @ts-ignore
var __LOCAL_DEPENDENCIES__ = {};
// @ts-ignore
var __IDS_TO_FRAMEWORKS__ = {};
import React from "react";
import { ApolloProvider } from "@apollo/react-hooks";
import { storiesOf } from "@storybook/react";
import { Posts } from "../views/Posts/index"; // ! Fix coupling
import { PostContent } from "../views/PostContent"; // ! Fix coupling
import { withPostContentQuery } from "./components/withPostContentQuery";
import { withPostsQuery } from "./components/withPostsQuery";
import * as fakeQl from "./fakeql/fakeql-endpoints";
import apolloClientFactory from "./apollo";
// FIXME: #coupling - find a way to not depend on Post and Container, probably fakes - but not good enough.
const apolloClient = apolloClientFactory(fakeQl.normalApiEndpoint);
const PostContentQuery = withPostContentQuery(PostContent);
const PostsQuery = withPostsQuery(Posts);
// ~~~ Posts ~~~
storiesOf("GraphQL", module).addParameters({ storySource: { source: __STORY__, locationsMap: __ADDS_MAP__ } }).addDecorator(withSourceLoader(__STORY__, __ADDS_MAP__,__MAIN_FILE_LOCATION__,__MODULE_DEPENDENCIES__,__LOCAL_DEPENDENCIES__,__SOURCE_PREFIX__,__IDS_TO_FRAMEWORKS__)).add("PostsQuery", () => (
<ApolloProvider client={apolloClient}>
<PostsQuery routeHandler={() => null} />
</ApolloProvider>
));
// ~~~ PostContent ~~~
storiesOf("GraphQL", module).addParameters({ storySource: { source: __STORY__, locationsMap: __ADDS_MAP__ } }).addDecorator(withSourceLoader(__STORY__, __ADDS_MAP__,__MAIN_FILE_LOCATION__,__MODULE_DEPENDENCIES__,__LOCAL_DEPENDENCIES__,__SOURCE_PREFIX__,__IDS_TO_FRAMEWORKS__)).add("PostContentQuery", () => (
<ApolloProvider client={apolloClient}>
<PostContentQuery postId="1" />
</ApolloProvider>
));
@ 0b10 рдореИрдВ рдЗрд╕реЗ tsconfig.json
рдХреЛ рднреА рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛
рд╕реНрдЯреЛрд░реАрдмреБрдХ-рд░рд┐рдПрдХреНрд╢рди-рд░рд╛рдЙрдЯрд░ рдХреЛ 1.0.6 рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдпрд╣рд╛рдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓ рд░рд╣реА рдереАрдВ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдореБрджреНрджрд╛ рдЦреБрд▓рд╛ рд╣реИ: gvaldambrini/storybook-router#42 рдореБрдЭреЗ рдпрд╣рд╛рдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИрдВ (рд╕реНрдЯреЛрд░реАрдмреБрдХ-рд░рд╛рдЙрдЯрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╢рд╛рдпрдж рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рдереАрдВ, рдиреАрдЪреЗ рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВ )
рдореЗрд░реА TSX рдХрд╣рд╛рдирд┐рдпреЛрдВ рдкрд░ "рдХреЛрдИ рдХреЛрдб рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ", MDX рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди/рдмрд┐рд▓реНрдХреБрд▓ @ 0b10 рдХреА рдХрд╣рд╛рдиреА рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ
// @ts-ignore
var withSourceLoader = require('@storybook/source-loader/preview').withSource;
// @ts-ignore
var __SOURCE_PREFIX__ = "C:\\Workspace\\application-ui\\src\\components\\atoms\\container";
// @ts-ignore
var __STORY__ = "import { storiesOf } from \"@storybook/react\";\nimport React, { ReactElement } from \"react\";\n\nimport { Container } from \"components\";\n\nconst stories = storiesOf(\"Atoms/Container\", module).addParameters({ component: Container });\n\nstories.add(\"Default\", (): ReactElement => <Container>Hello</Container>);\n";
// @ts-ignore
var __ADDS_MAP__ = {};
// @ts-ignore
var __MAIN_FILE_LOCATION__ = "/Container.stories.tsx";
// @ts-ignore
var __MODULE_DEPENDENCIES__ = [];
// @ts-ignore
var __LOCAL_DEPENDENCIES__ = {};
// @ts-ignore
var __IDS_TO_FRAMEWORKS__ = {};
import { storiesOf } from "@storybook/react";
import React, { ReactElement } from "react";
import { Container } from "components";
const stories = storiesOf("Atoms/Container", module).addParameters({ storySource: { source: __STORY__, locationsMap: __ADDS_MAP__ } }).addDecorator(withSourceLoader(__STORY__, __ADDS_MAP__,__MAIN_FILE_LOCATION__,__MODULE_DEPENDENCIES__,__LOCAL_DEPENDENCIES__,__SOURCE_PREFIX__,__IDS_TO_FRAMEWORKS__)).addParameters({ component: Container });
stories.add("Default", (): ReactElement => <Container>Hello</Container>);
рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ config.js рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл docs: DocsPage
docs: {
container: DocsContainer,
page: DocsPage,
},
рдкреНрд░реАрд╕реЗрдЯ:
module.exports = [
{
name: "@storybook/addon-docs/react/preset",
options: {
configureJSX: true,
},
},
];
рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНтАНрдлрд╝рд┐рдЧрд░реЗрд╢рди, рд╕рдВрднрд╡рдд: рдЖрд╡рд╢реНтАНрдпрдХ рдирд╣реАрдВ рд╣реИ?
config.module.rules.push({
exclude: /node_modules/,
test: /\.(ts|tsx)$/,
use: [
{
loader: require.resolve("babel-loader"),
options: {
presets: [["react-app", { flow: false, typescript: true }]],
},
},
{
loader: require.resolve("react-docgen-typescript-loader"),
},
],
});
config.module.rules.push({
enforce: "pre",
include: [path.resolve(__dirname, "../src")],
loader: require.resolve("@storybook/source-loader"),
test: /\.(stories|story)\.[tj]sx?$/,
});
tsconfig.json рдореЗрдВ "noImplicitAny": true
рдФрд░ рдХреЛрдИ ignoreDiagnostics
рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ
rc.4
рд╕рд╛рде рдЕрдм рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╕реНрд░реЛрдд рдирд╣реАрдВ рд╣реИ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ #6641 рдореЗрдВ рднреА рдЪрд┐рд╣реНрдирд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдм рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реЛ рд╕рдХрддреА рд╣реИ
рдореБрдЭреЗ рдПрдХ рдЙрдкрд╛рдп рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ!
sourceLoaderOptions: null
, рдореИрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ transpileOnly: true
рдореЗрд░реА рдореЗрдВ tsLoaderOptions
parameters
рдЪрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛as 'optionA' | 'optionB'
рдЬреИрд╕реЗ рджрд╛рдПрдВ рд╣рд╛рде рдХреЗ рдмрдпрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛ рдФрд░ рдЗрд╕реЗ рдмрд╛рдПрдВ рд╣рд╛рде рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛рдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛редрдпрд╣ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:
const colors = {
primary: 'primary',
secondary: 'secondary',
};
const color = radios('color', colors, colors.primary) as ButtonColor;
рдпрд╣ рдХрд╛рдо:
const colors: Record<string, ButtonColor> = {
primary: 'primary',
secondary: 'secondary',
};
const color = radios('color', colors, colors.primary);
рдЕрдВрдд рдореЗрдВ рдпрд╣ рдЯрд╛рдЗрдк рдЕрдиреБрдорд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп source-loader
рдореБрджреНрджреЗ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рд╡реИрд╕реЗ рднреА, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИ!
@ enagy27 рдЖрдкрдиреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЙрдХ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ @libetl 5.3 рдореЗрдВ рдХрд┐рд╕реА рд╕рдордп рдСрдирд▓рд╛рдЗрди рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╣рдо рдХреЗрд╡рд▓ source-loader
рдЕрдкрдЧреНрд░реЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЗрди рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░ рдХрд░! рдореИрдВ
рдирдорд╕реНрддреЗред рдХреНрдпрд╛ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рд░реЗрдкреЛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИ?
@simonhoss рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдореИрдВ рднреА
TS рдирд┐рд░реНрджреЗрд╢ рдЖрдкрдХреЛ react-docgen-typescript-loader
рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ addon-info
рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ addon-docs
addon-info
рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИ? рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ TS рдХреЗ рд╕рд╛рде addon-docs
рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП TS рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕реЗрдЯрдЕрдк рдпрд╛ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рджреЗрдЦрдирд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдФрд░ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдпреЗ рдЯреБрдХрдбрд╝реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдлрд┐рдЯ рд╣реЛрддреЗ рд╣реИрдВ! рдореИрдВ
рдЕрдм рдЬрдм рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЬрд╛рд░реА рдХрд░ рджрд┐рдП рдЧрдП рд╣реИрдВ рддреЛ рдореБрдЭреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП cra- ts-
import '@storybook/addon-knobs/register';
import '@storybook/addon-a11y/register';
import '@storybook/addon-actions/register';
import { configure, addDecorator, addParameters } from '@storybook/react';
import { withA11y } from '@storybook/addon-a11y';
import { withKnobs } from '@storybook/addon-knobs';
import theme from './theme';
import '../stylesheets/gusto.scss';
// This file overrides styles from the global Gusto
// styles which interfere with Storybook styles
import './storybook.scss';
// Is your addon not showing up? Try looking for a `register` function
// and add it to .storybook/addons.js
addDecorator(withA11y);
addDecorator(withKnobs);
addParameters({
// storybook built-in
// more info available here:
// https://storybook.js.org/docs/configurations/options-parameter/
options: {
showPanel: true,
panelPosition: 'right',
// https://storybook.js.org/docs/configurations/theming/
theme,
},
knobs: {
escapeHTML: false,
},
// viewport structure here:
// https://github.com/storybookjs/storybook/tree/master/addons/viewport#use-custom-set-of-devices
// viewport: {
// defaultViewport: 'iphone6',
// type: 'mobile',
// },
});
configure(require.context('../src', true, /\.stories\.(js|jsx|ts|tsx|mdx)$/), module);
const path = require('path');
module.exports = [
'@storybook/preset-scss',
{
name: '@storybook/preset-typescript',
options: {
// Point the loader here to override the root "noEmit" compilerOption
tsLoaderOptions: {
// Transpile only means no type-checking from storybook, which greatly speeds up
// builds. Types will be checked as part of the normal build process. This may also
// be necessary for loading story source
transpileOnly: true,
configFile: path.resolve(__dirname, 'tsconfig.json'),
},
// We must use our config to ensure props and their comments are loaded
tsDocgenLoaderOptions: {
tsconfigPath: path.resolve(__dirname, 'tsconfig.json'),
// https://github.com/styleguidist/react-docgen-typescript#parseroptions
propFilter: prop => {
if (prop.parent) {
return !prop.parent.fileName.includes('node_modules/@types/react/');
}
return true;
},
},
},
},
'@storybook/addon-docs/react/preset',
];
рдореИрдВ рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЗрд░реА рдХрдВрдкрдиреА рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╕рдВрджрд░реНрдн config.js
ред
рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдХреЗрд╡рд▓ рд░реВрдЯ tsconfig.json
рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИ рдЬреЛ рдХрд┐ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдореЗрдВ рдпрд╣рд╛рдВ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
{
"extends": "../tsconfig.json",
"compilerOptions": {
"noEmit": false
}
}
рд╣рд╛рдп @ enagy27 - рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рдПрдХ рдХрд╕реНрдЯрдо рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдХрд┐рд╕реА рдЕрдЬреАрдм рдХрд╛рд░рдг рд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реАрд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдореБрдЭреЗ рд╕реНрдЯреЛрд░реАрдмреБрдХ, рдпрд╛рдиреА - рд╕реАрдПрд╕рдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реА рдкреНрд░реЙрдкреНрд╕ рдЯреЗрдмрд▓ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ:
SomeType['property']
рдЕрднреА рдореИрдВ рдПрдХ рд╕рдВрдШ рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ any
рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдирдорд╕реНрддреЗ, @ enagy27ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдпрд╣ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдХреБрдЫ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЬрдм рдореИрдВ tsx рдХреЗ рд╕рд╛рде рдШрдЯрдХ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдШрдЯрдХ рд╡рд┐рд╡рд░рдг рдФрд░ рдкреНрд░реЛрдк рд╡рд┐рд╡рд░рдг рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ jsxуАВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рд╣рд╛рдп @ рдЬреАрд░реЛрдлреНрд░рдВрдЯред рдореБрдЭреЗ рдЗрд╕ рд╕рдЯреАрдХ рдЯрд┐рдкреНрдкрдгреА рдкреИрдЯрд░реНрди рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдкрдбрд╝рд╛
рдШрдЯрдХ рд╡рд┐рд╡рд░рдг:
/**
* This is a component description and should sit directly above your component
*/
рдкреНрд░реЛрдк рд╡рд┐рд╡рд░рдг:
/** I am a prop description and should sit directly above the interface property i am describing */
@ enagy27 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВрдиреЗ рдЖрдкрдХреА рдкрд╣рд▓реА рддрд╕реНрд╡реАрд░ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдЯрд┐рдкреНрдкрдгреА рдкреИрдЯрд░реНрди рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдерд╛
@zerofront рдЖрдкрдХреЛ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп export const Button: React.FC<BaseButtonProps> = props => {...}
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
TS рдФрд░ docgen рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рд╕реЗрдЯрдЕрдк рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣рд╛рдБ #8133 рдПрдХ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХреА рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ
@zerofront рдореЗрд░реЗ рдкрд╛рд╕ рдмрд┐рд▓реНрдХреБрд▓ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЖрдкрдХреЗ рдмрдЯрди рдбреЙрдХреНрд╕ рдХреЗ рдкреНрд░реЙрдкреНрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ, рд╕реНрдЯреЛрд░реАрдмреБрдХ BaseButtonProps
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдмрдЬрд╛рдп defaultProps
рдкреНрд░рд┐рдВрдЯ рдХрд░ рд░рд╣реА рд╣реИред рдФрд░ рдореБрдЭреЗ рд╡рд┐рд╡рд░рдг рднреА рдпрд╛рдж рдЖрддреА рд╣реИред рдЙрдкрд╢реАрд░реНрд╖рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЖрдк рдЗрд╕реЗ рдХрд╣рд╛рдиреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
export default {
title: 'Button',
component: Button,
parameters: {
componentSubtitle: 'Handy status label',
},
}
@zerofront рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ @ enagy27 рдиреЗ рдХреНрдпрд╛ рдХрд╣рд╛ред
*.stories.tsx рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕ рдХреЙрдиреНрдлрд┐рдЧ рдХреА рддрд░рд╣ рдХреБрдЫ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
.рд╕реНрдЯреЛрд░реАрдмреБрдХ/webpack.config.js
const path = require('path');
const include = path.resolve(__dirname, '../src');
module.exports = ({ config }) => {
config.module.rules.push({
test: /\.ts(x?)$/,
exclude: /node_modules/,
use: [
{
loader: require.resolve('babel-loader'),
options: {
presets: [['react-app', { flow: false, typescript: true }]],
},
},
],
include,
});
return config;
};
@zerofront рдЖрдкрдХреЛ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп
export const Button: React.FC<BaseButtonProps> = props => {...}
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
@zerofront @ enagy27 рдХрд▓ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореЗрд░рд╛ рдореБрджреНрджрд╛ (рдЬреЛ рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ @zerofront рдХрд╛ рд╣реА рдерд╛) рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░рдг рд╣реБрдЖ рдерд╛ред
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рддрдп рд╣реИ:
- import React from 'react'
+ import React, { FC } from 'react'
- export const Button: React.FC<Props>
+ export const Button: FC<Props>
рд╕реНрд░реЛрдд:
https://github.com/strothj/react-docgen-typescript-loader/issues/42#issuecomment -535090697
рдФрд░ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рдиреЛрдЯ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
https://github.com/strothj/react-docgen-typescript-loader#react -component-class-import
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
@sergiop @enagy27 рдзрдиреНрдпрд╡рд╛рдж! рдЕрдВрдд рдореЗрдВ, рд╕рд╣рд╛рд░рд╛ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛рдо рд╣реИред
рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред
рдпрджрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯрдкреНрд░реЙрдкреНрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
@zerofront рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдпрд╣ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрджреНрджреЛрдВ рдХреА рдореЗрд░реА рдЯреВ-рдбреВ рд╕реВрдЪреА рдореЗрдВ рд╣реИред ;-)
рдпрджрд┐ рдЖрдк рдХрд╛рд░рдг рдХреА рдЦреЛрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рд╕реНрдЯреЛрд░реАрдмреБрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдпрд╛ react-docgen-typescript-loader
ред
@zerofront рд╢рд╛рдпрдж рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдореБрджреНрджрд╛ рдЦреЛрд▓рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред ;-)
рдореБрдЭреЗ рдбреА-рд╕реНрдЯреНрд░рдХреНрдЪрд░рд┐рдВрдЧ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рджреМрд░рд╛рди рдбрд┐рдлреЙрд▓реНрдЯ рдкреНрд░реЙрдкреНрд╕ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕реМрднрд╛рдЧреНрдп рдорд┐рд▓рд╛ рд╣реИред рдмрд╣реБрдд рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рдЧреИрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЕрд░реНрдерд╛рдд:
const Text = ({
text: 'Hello world'
}: Props) => <p>{text}</p>
рдореБрдЭреЗ рдбреА-рд╕реНрдЯреНрд░рдХреНрдЪрд░рд┐рдВрдЧ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рджреМрд░рд╛рди рдбрд┐рдлреЙрд▓реНрдЯ рдкреНрд░реЙрдкреНрд╕ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕реМрднрд╛рдЧреНрдп рдорд┐рд▓рд╛ рд╣реИред рдмрд╣реБрдд рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рдЧреИрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЕрд░реНрдерд╛рдд:
const Text = ({ text: 'Hello world' }: Props) => <p>{text}</p>
@ sami616 рдореИрдВ рдЖрдкрдХреЗ рдЬреИрд╕реЗ рд╣реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реЙрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЧреИрд░-рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ @zerofront рдкрд╣рд▓реЗ рд╣реА рд░рд┐рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ, рд╣рд╛рдБ, рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред
@ sami616 , рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдмрддрд╛рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ, рдореИрдВ рдЗрд╕ рдкрд░ рдПрдХ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореБрдЭреЗ рдХреЛрдбрдмреЗрд╕ рдкрд░ рдереЛрдбрд╝реА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕реНрд░реЛрдд storybook
рдпрд╛ react-docgen-typescript-loader
ред рдЗрд╕ рддрд░рд╣ рдореИрдВ рд╕рд╣реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЗрд╢реНрдпреВ рдЦреЛрд▓реВрдВрдЧрд╛ред
@sami616 @sergiop
рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреЙрдХрдЬреЗрди-рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ-рд▓реЛрдбрд░ рд╕рдВрд╕реНрдХрд░рдг 3.2.1 рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ
рдореБрдЭреЗ node_modules/react-docgen-typescript-loader/dist/generateDocgenCodeBlock рдореЗрдВ рдХреБрдЫ рдХреЛрдб рдорд┐рд▓реЗ
var setDefaultValue = function(defaultValue) {
return typescript_1.default.createPropertyAssignment(
typescript_1.default.createLiteral('defaultValue'),
// Use a more extensive check on defaultValue. Sometimes the parser
// returns an empty object.
defaultValue != null && typeof defaultValue === 'object' && 'value' in defaultValue && typeof defaultValue.value === 'string'
? typescript_1.default.createObjectLiteral([
typescript_1.default.createPropertyAssignment(
typescript_1.default.createIdentifier('value'),
typescript_1.default.createLiteral(defaultValue.value),
),
])
: typescript_1.default.createNull(),
);
};
&& typeof defaultValue.value === 'string'
рдпрд╣ рд╕реНрдерд┐рддрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯрдкреНрд░реЙрдк рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддреА рд╣реИред
рдФрд░ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг 3.3.0 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреЙрдХрдЬреЗрди-рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ-рд▓реЛрдбрд░ рдореЗрдВ, рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧуАБрдирдВрдмрд░уАБрдмреВрд▓рд┐рдпрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ
https://github.com/strothj/react-docgen-typescript-loader/blob/master/src/generateDocgenCodeBlock.ts
const setDefaultValue = (
defaultValue: { value: string | number | boolean } | null,
) =>
ts.createPropertyAssignment(
ts.createLiteral("defaultValue"),
// Use a more extensive check on defaultValue. Sometimes the parser
// returns an empty object.
defaultValue != null &&
typeof defaultValue === "object" &&
"value" in defaultValue &&
(typeof defaultValue.value === "string" ||
typeof defaultValue.value === "number" ||
typeof defaultValue.value === "boolean")
? ts.createObjectLiteral([
ts.createPropertyAssignment(
ts.createIdentifier("value"),
ts.createLiteral(defaultValue!.value),
),
])
: ts.createNull(),
);
@zerofront ,
@zerofront рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ react-docgen-typescript-loader
рд╕реЗ 3.3.0 рддрдХ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧреАред рдзрдиреНрдпрд╡рд╛рджред
рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдпрджрд┐ рдЖрдк рднрдпрд╛рдирдХ-рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ-рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
/* tsconfig.json */ { "compilerOptions": { }, "awesomeTypescriptLoaderOptions": { "ignoreDiagnostics": [7005] } }
рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЖрдЬ рд╣реА рел.рез рд╕реЗ рел.реи.рел рддрдХ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдФрд░ рдЕрднреА рддрдХ рдПрдбрдСрди-рдбреЙрдХреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛, рдпрд╣ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрд╣ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред
рд╣реЗрд▓реЛ рд╕рдм рд▓реЛрдЧ! рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдпрджрд┐ рдЕрднреА рднреА рдкреНрд░рд╢реНрди, рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдпрд╛ рдмрдЧ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдмреЗрдЭрд┐рдЭрдХ рдЪрд░реНрдЪрд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рд░ рдореБрджреНрджреЗ рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред рд╣рдо рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдЦреБрд▓реЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВред рдирд┐рд╖реНрдХреНрд░рд┐рдп рдореБрджреНрджреЗ 30 рджрд┐рдиреЛрдВ рдХреЗ рдмрд╛рдж рдмрдВрдж рдХрд░ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдзрдиреНрдпрд╡рд╛рдж!
рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдВрд╕реНрдХрд░рдг "@storybook/react": "5.2.6"
рдФрд░ "react-docgen-typescript-loader": "3.6.0"
рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╕рдВрджрд░реНрднрд┐рдд рдкреАрдЖрд░ рдореЗрдВ // @ts-ignore
s рдХреЛ __MODULE_DEPENDENCIES__
рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдПрдХрдорд╛рддреНрд░ рдлрд╝рд╛рдЗрд▓ src/server/build.js рд╣реИ, рдЬрдмрдХрд┐ рдпрд╣ рдЕрднреА рднреА src рдореЗрдВ рдЕрдирджреЗрдЦрд╛ рд╣реИ
@jalooc рдХреГрдкрдпрд╛ 5.3 рдмреАрдЯрд╛ рджреЗрдЦреЗрдВред рдкреНрд░реЙрдкреНрд╕ рдЯреЗрдмрд▓ рдореЗрдВ рдвреЗрд░ рд╕рд╛рд░реЗ рд╕реБрдзрд╛рд░ред
@shilman рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдмреАрдЯрд╛.6 рдкрд░ рдЖрдЦрд┐рд░реА рдмрд╛рд░ рдЖрдЬрдорд╛рдпрд╛ рдерд╛ рдФрд░ рдпрд╣ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореИрдВ рдирд╡реАрдирддрдо . рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛
рдореБрдЭреЗ рдЕрднреА рднреА рд╕реНрдЯреЛрд░реАрдмреБрдХ 5.3 рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИред [email protected] рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреЙрдХрдЬреЗрди-рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ-рд▓реЛрдбрд░ 3.6.0ред
рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ "noImplicitAny": false
рдХреЛ tsconfig.json
рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛ рдерд╛ рдЬреЛ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред
рдореБрдЭреЗ рдЬреЛ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ:
TS7005: Variable '__MODULE_DEPENDENCIES__' implicitly has an 'any[]' type.
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдореИрдВ рдЕрдкрдиреА рдХрд╣рд╛рдирд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдлреЙрд▓реЛ рдЕрдк рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ @enagy27 рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд transpileOnly
рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рдкреВрд░реНрдг рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрдЬрд╛рдп рдкреНрд░реАрд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЗрд░рд╛ presets.js
ред tsconfig.json
рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ:
// presets.js
const path = require("path");
module.exports = [
{
name: "@storybook/preset-typescript",
options: {
tsLoaderOptions: {
configFile: path.resolve(__dirname, "../tsconfig.json"),
transpileOnly: true,
},
tsDocgenLoaderOptions: {
tsconfigPath: path.resolve(__dirname, "../tsconfig.json"),
},
include: [path.resolve(__dirname, "../src")],
},
},
{
name: "@storybook/addon-docs/react/preset",
options: {
configureJSX: true,
//sourceLoaderOptions: null,
},
},
];
рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рд╣рдо TS рдХреЗ рд╕рд╛рде рд╕реНрдЯреЛрд░реАрдмреБрдХ рдРрдбрдСрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд╕рд╛рде рднреА рдЗрд╕реЗ рдкрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВ
"рд╡реИрд░рд┐рдПрдмрд▓ '__MODULE_DEPENDENCIES__' рдХрд╛ рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ 'рдХреЛрдИ рднреА []' рдкреНрд░рдХрд╛рд░ рд╣реИред"
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЛ 5.3.0-рдмреАрдЯрд╛.16 рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рдмрддрд╛рдП рдЧрдП рдЕрдиреНрдп рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдзрдиреНрдпрд╡рд╛рдж
рдореБрдЭреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░реЙрдкреНрд╕ рдЯреЗрдмрд▓ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░реАрдмреБрдХ рдПрдбрдСрди-рдбреЙрдХреНрд╕ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреЗред рдпрд╣ рд╕рд┐рд░реНрдл "рдХреЛрдИ рдШрдЯрдХ рдирд╣реАрдВ рдорд┐рд▓рд╛" рдХрд╣рддрд╛ рд╣реИред
addons.js
import '@storybook/addon-knobs/register'
import '@storybook/addon-a11y/register'
import '@storybook/addon-docs/register'
рдкреНрд░реАрд╕реЗрдЯ.рдЬреЗрдПрд╕
module.exports = [
{
name: "@storybook/addon-docs/react/preset",
options: {
configureJSX: true,
}
}
]
webpack.config.js
const path = require('path')
const SRC_PATH = path.join(__dirname, '../src')
module.exports = ({ config }) => {
config.module.rules.push({
test: /\.(ts|tsx|js|jsx)$/,
include: [SRC_PATH],
use: [
{
loader: require.resolve('babel-loader'),
options: {
presets: [['react-app', { flow: false, typescript: true }]],
plugins: ['babel-plugin-styled-components']
},
},
{
loader: require.resolve('react-docgen-typescript-loader'),
options: {
tsconfigPath: path.resolve(__dirname, '../tsconfig.json'),
},
},
{
loader: require.resolve('@storybook/source-loader'),
options: { parser: 'typescript', injectParameters: true, },
},
],
exclude: [/node_modules/],
enforce: 'pre',
})
config.resolve.extensions.push('.ts', '.tsx', '.js', '.jsx')
return config
}
рд╕реНрдЯреЛрд░реАрдмреБрдХ 5.2.8
рдПрдбрдСрди-рдбреЙрдХреНрд╕ 5.2.8
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреЙрдХрдЬреЗрди-рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ-рд▓реЛрдбрд░ 3.6.0
рдмреЗрдмреЗрд▓-рд▓реЛрдбрд░ 8.0.6
@рд╕реНрдЯреЛрд░реАрдмреБрдХ/рд╕реЛрд░реНрд╕-рд▓реЛрдбрд░ 5.2.8
рд╕рд╛рде рд╣реА, рдЕрдЧрд░ рдореИрдВ рдХрдВрдкреЛрдиреЗрдВрдЯ рд╕реНрдЯреЛрд░реА рдлреЙрд░реНрдореЗрдЯ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рд╡рд╣ рдШрдЯрдХ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдвреВрдВрдврддрд╛ рд╣реИ (рдХреИрдирд╡рд╛рд╕ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ рдореЗрдиреВ рдЦрд╛рд▓реА рд╣реИрдВ), рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдХрд╣рд╛рдирд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдк рд╕рдЦреНрдд рдирд┐рдпрдореЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдХреЗ tsconfig.json рдХреА рдУрд░ рдбреЙрдХ рдЬреЗрдирд░реЗрд╢рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рддреЛ рдЕрдЧрд▓реЗ рд╣рдлреНрддреЗ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпреЗ рдореЗрд░реЗ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИрдВ, рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЧрд┐рдЯ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред
++ рдЗрдЯреНрд╕
рдирд┐рд░реНрдпрд╛рдд рдХреЙрдиреНрд╕реНрдЯ рдЕрдХреЙрд░реНрдбрд┐рдпрдирдЖрдЗрдЯрдо
рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ webpack.config.js рдирд╣реАрдВ рд╣реИ
рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдЕрдВрддрддрдГ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреЙрдХрдЬреЗрди-рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ-рд▓реЛрдбрд░ рдХреЗ рдХреБрдЫ рджрд░реНрджрдирд╛рдХ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рд╣реВрдВред
React-docgen-typescript-loader рдлрд╝реЛрд▓реНрдбрд░ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ __docgeninfo
рдЕрд╕рд╛рдЗрди рдХрд░рддрд╛ рд╣реИ, рдШрдЯрдХ рдирд╛рдо рдХрд╛ рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЛ рдЙрд╕реА рдирд╛рдо (рдХреЗрд╕ рд╕рдВрд╡реЗрджрдирд╢реАрд▓) рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред
|__
CTALink
|___index.tsx
рдореБрдЭреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдПрд╕рдПрдл рдкреНрд░рд╛рд░реВрдк рдирд╣реАрдВ рдорд┐рд▓рд╛ (рд╣рдореЗрд╢рд╛ рдЦрд╛рд▓реА), рд▓реЗрдХрд┐рди storiesOf
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдкреНрд░реЙрдкреНрд╕ рдЯреЗрдмрд▓ рдХреЛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд░реАрдмреБрдХ рд╕реЗ addParameters
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШрдЯрдХ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред .
storiesOf('CTALink', module)
.addParameters({
component: CTALink,
})
.add('default story', () => (
<CTALink to="/">Click here</CTALink>
))
рд╣реЗрд▓реЛ рд╕рдм рд▓реЛрдЧ! рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдпрджрд┐ рдЕрднреА рднреА рдкреНрд░рд╢реНрди, рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдпрд╛ рдмрдЧ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдмреЗрдЭрд┐рдЭрдХ рдЪрд░реНрдЪрд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рд░ рдореБрджреНрджреЗ рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред рд╣рдо рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдЦреБрд▓реЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВред рдирд┐рд╖реНрдХреНрд░рд┐рдп рдореБрджреНрджреЗ 30 рджрд┐рдиреЛрдВ рдХреЗ рдмрд╛рдж рдмрдВрдж рдХрд░ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдзрдиреНрдпрд╡рд╛рдж!
рдЯрд╛рдЗрдкрдкреНрд░рддрд┐ 5.3 рдореЗрдВ рд╕реНрд░реЛрдд рдмреНрд▓реЙрдХ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдорд╛рдкрдиред
рдореИрдВрдиреЗ @storybook/react
рдФрд░ @storybook/addon-docs
рд╕реЗ 5.3.0-rc.4 рджреЛрдиреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ TS7005: Variable '__MODULE_DEPENDENCIES__' implicitly has an 'any[]' type.
рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд░рд╣реЗрдВ
рдореИрдВ рдкреНрд░реАрд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рд╡реЗрдмрдкреИрдХ рдореЗрдВ рднреА рдирдпрд╛ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдореИрдВрдиреЗ рдХреБрдЫ рдЧрд▓рддрд┐рдпрд╛рдВ рдХреА рд╣реИрдВред
рдпрд╣рд╛рдБ рдореЗрд░рд╛ webpack.config.js рд╣реИ:
`` `рдХреЙрдиреНрд╕реНрдЯ рдкрде = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('рдкрде');
рдореЙрдбреНрдпреВрд▓.рдПрдХреНрд╕рдкреЛрд░реНрдЯ = {
рдиреЛрдб: {
рдПрдлрдПрд╕: 'рдЦрд╛рд▓реА',
рдЪрд╛рдЗрд▓реНрдб_рдкреНрд░реЛрд╕реЗрд╕: 'рдЦрд╛рд▓реА'
},
рд╕рдВрдХрд▓реНрдк: {
рдореЙрдбреНрдпреВрд▓: [
'рдиреЛрдб_рдореЙрдбреНрдпреВрд▓',
],
рдПрдХреНрд╕рдЯреЗрдВрд╢рди: [.ts", ".tsx"],
рд╕рд┐рдореНрд▓рд┐рдВрдХ: рд╕рдЪ
},
рдорд╛рдкрд╛рдВрдХ: {
рдирд┐рдпрдо: [
{
рдкрд░реАрдХреНрд╖рдг: /ред (рдЯреАрдПрд╕ | рдЯреАрдПрд╕рдПрдХреНрд╕) $ /,
рдЙрдкрдпреЛрдЧ: [
{
рд▓реЛрдбрд░: requ.resolve ('рд╡рд┐рд╕реНрдордпрдХрд╛рд░реА-рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ-рд▓реЛрдбрд░')
},
{
рд▓реЛрдбрд░: requ.resolve('react-docgen-typescript-loader')
},
]
},
{
рдкрд░реАрдХреНрд╖рдг: /.(рдХрд╣рд╛рдирд┐рдпрд╛рдВ|рдХрд╣рд╛рдиреА)ред[tj]sx?$/,
рд▓реЛрдбрд░: requ.resolve('@storybook/source-loader')
}
]
},
рдмрд╛рд╣рд░реА: {
'рдХреНрд▓рд╛рд╕-рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░': 'рдХреНрд▓рд╛рд╕-рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░'
}
};
```
рдпреЛ-рд╣реЛ-рд╣реЛ !! рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА https://github.com/storybookjs/storybook/releases/tag/v5.3.0-rc.5 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ PR #9272 рд╣реИ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИред рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЬ рд╣реА рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВ!
рдЖрдк рдЗрд╕ рдкреВрд░реНрд╡-рд░рд┐рд▓реАрдЬрд╝ рдХреЛ @next
NPM рдЯреИрдЧ рдкрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
@JacopoBonta рдХреНрдпрд╛ рдЖрдк рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рд░рд┐рд▓реАрдЬрд╝ 5.3.0-rc.5
рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рдирдорд╕реНрддреЗ @shilman рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд рдбреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрджреНрднреБрдд рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдореИрдВрдиреЗ 5.3.0-rc.5
рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдФрд░ рдореБрдЭреЗ рдЕрднреА рднреА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ TS7005: Variable '__MODULE_DEPENDENCIES__' implicitly has an 'any[]' type.
рдпрд╣ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдореИрдВ ignoreDiagnostics: [7005]
рдХреЛ ts-loader
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЬреЛрдбрд╝ рджреВрдВ рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдлрд╝рд╛рдЗрд▓ main.js
:
const { addons } = require('@storybook/addons');
const path = require('path');
const tsImportPluginFactory = require('ts-import-plugin')
module.exports = {
stories: ['../packages/**/*.stories.(tsx|mdx)'],
presets: [
{
name: '@storybook/preset-typescript',
options: {
tsLoaderOptions: {
configFile: path.resolve(__dirname, 'tsconfig.json'),
ignoreDiagnostics: [7005],
getCustomTransformers: () => ({
before: [ tsImportPluginFactory(
{
libraryName: 'antd',
style: 'css',
libraryDirectory: 'es'
}
) ]
}),
},
tsDocgenLoaderOptions: {
tsconfigPath: path.resolve(__dirname, 'tsconfig.json'),
},
forkTsCheckerWebpackPluginOptions: {
colors: false, // disables built-in colors in logger messages
},
include: [path.resolve(__dirname, "../packages")]
},
},
{
name: '@storybook/addon-docs/preset',
options: {
}
}],
addons: [
'@storybook/addon-docs/register',
'@storybook/addon-knobs/register',
'@storybook/addon-actions/register',
'@storybook/addon-links/register'
],
};
@JacopoBonta рдХреНрдпрд╛ рдЖрдк рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рд░рд┐рд▓реАрдЬрд╝
5.3.0-rc.5
рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ?
рдореБрдЭреЗ рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди 5.3.0-rc.5
рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓рд╛ред
рдореИрдВрдиреЗ @storybook/react
рдФрд░ @storybook/addon-docs
рджреЛрдиреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд░рд╣рддреА рд╣реИред
AcJacopoBonta рдХреНрдпрд╛ рдЖрдк esakal рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
@JacopoBonta рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдЖрдк awesome-typescript-loader
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдиреНрдп рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВрдиреЗ рдПрдХ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рддреЛ рдореИрдВрдиреЗ рдЗрд╕реА рддрд░рд╣ рдХрд╛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд┐рдпрд╛ред awesome-typescript-loader
рдЖрдкрдХреЛ рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдЪрд╛рд╣рд┐рдП:
/* tsconfig.json */
{
"compilerOptions": { },
"awesomeTypescriptLoaderOptions": {
"ignoreDiagnostics": [7005]
}
}
рдпрд╣рд╛рдБ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛
рд╣рд╛рдБ, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд░рд╛рд╕реНрддрд╛ рдвреВрдВрдв рд░рд╣рд╛ рдерд╛ред
рд╡реИрд╕реЗ рднреА, рдорджрдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рд╣реИ рдФрд░ рдирдпрд╛ рд╕рд╛рд▓ рдореБрдмрд╛рд░рдХ рд╣реЛ ЁЯОЙ
рдзрдиреНрдпрд╡рд╛рдж @esakal рдЖрдк рд╕рдорд╛рдзрд╛рди рдЕрдм рддрдХ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ (рдореЗрд░реЗ рд▓рд┐рдП) рд╣реИред рдореИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП transpileOnly: true
рд╕реЗрдЯ рдХрд░рддрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдЙрд╕ рдУрдПрдлрд╕реА рдХрд╛ рдкреНрд░рднрд╛рд╡ рдЕрдзрд┐рдХ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХрд┐рд╕реА рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рдЬрд╛рдиреЗ рджреЗрдиреЗ рдХрд╛ рдерд╛ред
рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди, рдмрд╣реБрдд рдХрдо рд╡рд┐рдиреНрдпрд╛рд╕ ( presets.js
) рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
const path = require("path");
module.exports = [
{
name: "@storybook/preset-typescript",
options: {
tsLoaderOptions: {
configFile: path.resolve(__dirname, "../tsconfig.json"),
ignoreDiagnostics: [7005],
},
},
},
{
name: "@storybook/addon-docs/preset",
options: {
configureJSX: true,
},
},
];
рд╢реБрдХреНрд░рд┐рдпрд╛!
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕рдорд╛рдзрд╛рди рдпрджрд┐ рдЖрдк рднрдпрд╛рдирдХ-рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ-рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред