рдореЗрд░реЗ рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдерд┐рд░ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо public
рдЬрд┐рд╕реЗ рдореЗрд░реЗ рдиреЛрдб рд╕рд░реНрд╡рд░ рд╕реЗ /public/...
рдкрде рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░реЛрд╕рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЪрд┐рддреНрд░ рдФрд░ CSS рдлрд╛рдЗрд▓реЗрдВ рдЙрд╕ /public/
рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рджреА рдЧрдИ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ: start-storybook -p 6006 -s ./public
/public/
рд╡рд╛рд▓рд╛ рдкрде рдЕрдм рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред
рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рд╕реЗрд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХреЛ start-storybook -p 6006 -s ./
рдмрджрд▓ рджрд┐рдпрд╛, рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред
рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЕрдкрдиреА рд╕реНрдЯреЛрд░реАрдмреБрдХ build-storybook -s ./
рдХреЗ рд╕рд╛рде рдмрдирд╛рддрд╛ рд╣реВрдВ рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ storybook-static
рдХреЙрдкреА рдХрд░ рд▓реЗрдЧреАред
рдФрд░ рдЕрдЧрд░ рдореИрдВ рдХрдорд╛рдВрдб рдХреЛ build-storybook -s ./public
рдмрджрд▓рддрд╛ рд╣реВрдВ, рддреЛ /public/
рдЙрдкрд╕рд░реНрдЧ рд╡рд╛рд▓рд╛ рдкрде рдЕрдм рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдХреНрдпрд╛ рд╕реНрдереИрддрд┐рдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?
рд╣рдореНрдо рддреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ build-storybook
рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХреБрдЫ рд╣реИред
рдЖрдк рдХрд╕реНрдЯрдо рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рдПрдХ рдХреЛрд╢рд┐рд╢ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ?, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
https://github.com/storybooks/react-storybook/pull/435#issuecomment -26464131388
https://github.com/storybooks/react-storybook/blob/master/src/server/middleware.js#L35
: +1: рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ - рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рд╕рд┐рд░реНрдл рджреЗрд╡ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдпрд╣рд╛рдБ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛:
const express = require('express');
const path = require('path');
const paths = require("../config/paths");
const expressMiddleWare = (router) => {
console.log(path.join(__dirname), paths.appPublic);
router.use('/public', express.static(paths.appPublic))
};
module.exports = expressMiddleWare;
рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдордп рд╣реИ
рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! тЭдя╕П
рд╣реЗрд▓реЛ рд╕рдм рд▓реЛрдЧ! рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдпрджрд┐ рдЕрднреА рднреА рдкреНрд░рд╢реНрди, рдЯрд┐рдкреНрдкрдгреА рдпрд╛ рдмрдЧ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЪрд░реНрдЪрд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рд░ рдореБрджреНрджреЗ рдкрд░ рдЖрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред рд╣рдо рд╣рдореЗрд╢рд╛ рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд░рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ рдЕрдЧрд░ рдЖрдк рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред 60 рджрд┐рдиреЛрдВ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдХреНрд░рд┐рдп рдореБрджреНрджреЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдзрдиреНрдпрд╡рд╛рдж!
рдЕрд░реЗ, рдпрд╣ рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рд╣реИ! рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ рд░рдЦрд╡рд╛рд▓реЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡рд░реНрддрдорд╛рди рд╡рд┐рдХрд╛рд╕ рд░реЛрдбрдореИрдк рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХреЗрдВред рдпрджрд┐ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдореБрджреНрджрд╛ рдЕрднреА рднреА рдПрдХ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдЯрд┐рдХрдЯ рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕ рдкреБрд░рд╛рдиреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВред рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрдпрд░реНрд╕ рдФрд░ рдзрдиреНрдпрд╡рд╛рдж!
рдирдорд╕реНрддреЗ! @ndelangen @hansthinhle @patrickgordon
Im рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдХрднреА рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛?
рдзрдиреНрдпрд╡рд╛рдж!
рд╣рд╛рдп @aviramga - рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХреБрдЫ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╣рд▓ рдХрд┐рдпрд╛ред рдореИрдВ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдХрд░рдиреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЕрднреА рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм рд╣реИ рдХрд┐ рдореЗрд░реА рд╕реНрдореГрддрд┐ рдХреЛ рдЭрдЯрдХрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ :)
рд╣рд╛рдп @patrickgordonред рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдореБрджреНрджрд╛ рдХреЗрд╡рд▓ рдмрд┐рд▓реНрдб-рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЗ рд╕рд╛рде рд╣реИ: /
рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ ui рдореБрджреНрджреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрд╕реА рдирд╛рдордХ рдЯреВрд▓ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд┐рдпрд╛ рдерд╛?
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд┐рдорд┐рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдПрдХ рдордирдорд╛рдирд╛ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬреЛрдбрд╝реЗрдВ (рдЬреИрд╕реЗ static-link
, рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде public
(рдмрд┐рдирд╛ рдХрд┐рд╕реА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ) рдирд╛рдордХ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдбрд╛рд▓реЗрдВ:
../public
рддрдм рдЖрдкрдХреЛ -s static-link
рд╕рд╛рде рдЬреЛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
@Hypnosphi рдЯрд┐рдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдХреНрдпрд╛ рдЖрдк рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рдореЗрд░реА рд╕рднреА рд╕реНрдерд┐рд░ рдлрд╛рдЗрд▓реЗрдВ "рд╕реНрдЯреЗрдЯрд┐рдХ" (рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдирд╣реАрдВ) рдирд╛рдо рдХреА рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╣реИрдВред
рдореИрдВрдиреЗ рдЙрди рддрд░реАрдХреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рдереЗ:
рдХреЛрдИ рд╕рд▓рд╛рд╣?
рдзрдиреНрдпрд╡рд╛рдж
рдЖрдк рдХрд┐рд╕ OS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
https://en.wikipedia.org/wiki/Symbolic_link#Overview
рдХреНрдпрд╛ рддреНрд░реБрдЯрд┐ рдереА?
рдореИрдХ рдЙрдЪреНрдЪ рд╕рд┐рдПрд░рд╛
@Hypnosphi рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдПрдХ рдирдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ
рд╕рд╣реА рдмрд╛рдд?
рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рдореНрдХрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдирд┐рд░реНрджреЗрд╢ рдЧрд▓рдд рдерд╛ред рд╕рд╣реА рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ:
mkdir static-link
ln -s static static-link/static
рдпрд╣ рд╕реНрдЯреИрдЯрд┐рдХ-рд▓рд┐рдВрдХ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдПрдХ "рдлрд╛рдЗрд▓" рдмрдирд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ git рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛)
@ рд╣рд╛рдЗрдкреЛрд╕реНрдлреА рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╢реЙрдЯ рджреВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╣рд░ рдмрд╛рд░ рдмрд┐рд▓реНрдб-рд╕реНрдЯреЛрд░реАрдмреБрдХ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛?
рдирд╣реАрдВ, рдпрд╣ рд▓рдЧрд╛рддрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
@ рд╣рд╛рдЗрдкреЛрд╕реНрдлреА рдиреЛрдк , рдлрд┐рд░ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рдореБрдЭреЗ рдПрдХ рд▓реЙрдЧ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ:
cp: рдРрд╕реА рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛: static-link / static
рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЦрд╛рд▓реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрдЯреЗрдЯрд┐рдХ-рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рд╕реНрдЯреЗрдЯрд┐рдХ рд╕реЗ рд╕реНрдЯреИрдЯрд┐рдХ-рд▓рд┐рдВрдХ / рд╕реНрдЯреЗрдЯрд┐рдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
рдореИрдВ рдХреНрдпрд╛ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ?
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВ :)
рдФрд░ рдЖрдк -s static-link
рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд╣реИ рдирд╛?
@Hypnosphi рдЖрдк рдмрд┐рд▓реНрдб-рд╕реНрдЯреЛрд░реАрдмреБрдХ -рд╕реА .storybook -s рд╕реНрдЯреЗрдЯрд┐рдХ-рд▓рд┐рдВрдХ рдХрд╛ рдорддрд▓рдм рд╣реИ?
рд╣рд╛рдБ
рдореИрдВ рдХрд░рддрд╛ рд╣реВрдБ
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдЧрд▓рдд рд╕рдордЭрд╛:
ln -s ../static static-link/static
@ рд╣рдиреАрдкреЛрд╕реНрдлреА
рдХреНрдпреЛрдВ ../static?
рдХреНрдпрд╛ рдореИрдВ рд╕рд╣реА рд╣реВрдВ рдХрд┐ рд╕реНрдЯреЗрдЯрд┐рдХ-рд▓рд┐рдВрдХ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдЦрд╛рд▓реА рд╣реИ?
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдирд┐рдЬреА рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рдореЗрдВ рдЬрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдпрд╣рд╛рдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдмрд╣реБрдд рдХрд░реАрдм рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЧрд▓рдд рдорддрд▓рдм рд╣реИ :)
рдпрд╣ рд▓рд┐рдВрдХ рд╕реНрдерд╛рди рд╕реЗ рд▓рд┐рдВрдХ рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рд╣реИ
@ рд╣рд╛рдЗрдкреЛрд╕реНрдлреА рдореИрдВ рдЗрд╕реЗ рдкреВрд░реНрдг рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ ..... рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕реЗ рд░рд┐рд╢реНрддреЗрджрд╛рд░ рдкрде рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЙрд╕реА рддрд░реНрдХ рдХреЛ рд╕реЗрдорд╛рдлреЛрд░ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ
@ рд╣рд╛рдЗрдкреЛрд╕реНрдлреА рдХреЛ рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдорд┐рд▓рд╛ред рдЖрдкрдХреА рд╕рднреА рдорджрдж рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдЖрдк рдПрдХ рдЬреАрд╡рди рд░рдХреНрд╖рдХ рд╣реИрдВ !!
рдХрд┐ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЯрд┐рдк?
рд╣рд╛рдВ, рдмрд╕ рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХреЛ рдЪрд▓рд╛рдПрдВред рд╕рд┐рдорд┐рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
ln -s /<absolute-path-your-static-directory> storybook-static-symlink/static
@aviramga рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рдзрд┐ рдЕрднреА рднреА рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИ? рдореБрдЭреЗ рд╕рд┐рдореНрдмрд▓рд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕реМрднрд╛рдЧреНрдп рдирд╣реАрдВ рд╣реИред
рдореЗрд░реА рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛
|- docs
|- folders-with-images
|- sandbox (holds my storybook files)
|- src
|- README.md with image paths `/docs/folder/image.png`
рдореИрдВ рдПрдХ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕реНрдЯреЛрд░реАрдмреБрдХ start-storybook -c sandbox -s sandbox,docs -p 6006
рдкрд░реЛрд╕рддреЗ рд╣реБрдП рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:
const express = require('express');
const path = require('path');
module.exports = router => {
router.use('/docs', express.static(path.join(__dirname, '..', 'docs')));
}
рд▓реЗрдХрд┐рди ln -s /docs sandbox/docs
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╕рд┐рдорд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдирд╛ рдФрд░ build-storybook -c sandbox -s sandbox,docs -o storybook
рдЪрд▓рдирд╛ рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
docs
рдореЗрдВ рдлрд╝реЛрд▓реНрдбрд░ рдХреЙрдкреА рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рдореБрдЭреЗ рдлрд╝рд╛рдЗрд▓ рдкрде рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ /docs/folder/image.png
404 рд╣реИ, рддрдм рддрдХ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ 404ред
рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдереИрддрд┐рдХ-рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ:
package.json:
"scripts": {
"storybook": "(mkdir ./src/static-link || true) && (ln -s ../static ./src/static-link/static || true) && start-storybook -p 6006 -s ./src/static-link"
}
рдореИрдВ рд╕рдВрдЧрддрддрд╛ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП package.json рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд┐рдорд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛, рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╡рд▓рдкрд░ рдПрдХ рд╣реА рдУрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ .storybook / webpack.config.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЙрдкреА- рд╡реЗрдмрдкреИрдХ -рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ:
const path = require('path');
const CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = config => {
function resolve(dir) {
return path.join(__dirname, '..', dir);
}
// Other configuration properties
config.plugins.push(
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, 'static-foo'),
to: '.'
},
{
from: path.resolve(__dirname, '../static-bar'),
to: './bar'
}
])
);
return config;
}
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА .storybook/static-foo
рд╕реЗ http://localhost:6006/
рдФрд░ static-bar
http://localhost:6006/bar/
рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░реЗрдЧрд╛ред
рдЕрдиреНрдп рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП push
plugins
рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗрдВ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рд╕реНрдЯреЛрд░реАрдмреБрдХ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рд╕реАрдорд▓рд┐рдВрдХ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ / рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдкреЗрдХреНрд╖ рд░рд╛рд╕реНрддреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдмрд╕ -r рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреИрд╕реЗ: ln -rs dir1 air2
рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдерд┐рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛, рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдПрдХ рдХреЗ рд▓рд┐рдП рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдпреБрдХреНрдд рд╕реАрд▓рд┐рдВрдХ рдмрдирд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдирдХрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЪреАрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрддреНрдпрдзрд┐рдХ рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рдХреЛ рдХреНрд░реИрд╢ рдХрд░ рд░рд╣рд╛ рдерд╛!
рддреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдХреЛрдИ рдЕрдзрд┐рдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕рднреА "рд╕рдорд╛рдзрд╛рди" рдмрд╕ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░реИрдкреА рд╣реИрдХреНрд╕ рд╣реИрдВ :)
рдореИрдВ рд╕рдВрдЧрддрддрд╛ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП package.json рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд┐рдорд▓рд┐рдВрдХ рдмрдирд╛рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛, рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╡рд▓рдкрд░ рдПрдХ рд╣реА рдУрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ .storybook / webpack.config.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЙрдкреА- рд╡реЗрдмрдкреИрдХ -рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ:
const path = require('path'); const CopyWebpackPlugin = require('copy-webpack-plugin'); module.exports = config => { function resolve(dir) { return path.join(__dirname, '..', dir); } // Other configuration properties config.plugins.push( new CopyWebpackPlugin([ { from: path.resolve(__dirname, 'static-foo'), to: '.' }, { from: path.resolve(__dirname, '../static-bar'), to: './bar' } ]) ); return config; }
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА
.storybook/static-foo
рд╕реЗhttp://localhost:6006/
рдФрд░static-bar
http://localhost:6006/bar/
рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░реЗрдЧрд╛редрдЕрдиреНрдп рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП
push
plugins
рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗрдВ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рд╕реНрдЯреЛрд░реАрдмреБрдХ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ;)
.storybook / webpack.config.js
(рд╕реНрдереИрддрд┐рдХ рдлрд╝реЛрд▓реНрдбрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рд╣реИ)
const path = require('path');
const CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = async ({ config }) => {
function resolve(dir) {
return path.join(__dirname, '..', dir);
}
// Other configuration properties
config.plugins.push(
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../../static'),
to: './static'
}
])
);
return config;
}
@mtrabelsi рдХреБрдЫ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ...
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ .storybook
рдлрд╝реЛрд▓реНрдбрд░ рдПрдХ рд╕реНрддрд░ рдкрд░ root
рд╕реЗ рдЧрд╣рд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рд╣реИ, рди рдХрд┐ рдбрдмрд▓ рдЧрд╣рд░рд╛ред рддреЛ, рдЖрдкрдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
from - from: path.resolve(__dirname, '../../static')
to - from: path.resolve(__dirname, '../static')
"рдХреЙрдкреА-рд╡реЗрдмрдкреИрдХ-рдкреНрд▓рдЧрдЗрди": "^ 5.0.4"
рд╕рднреА рд░рд╛рд╕реНрддреЗ рд╕рд╣реА рд╣реИрдВред рджреЛ рдмрд╛рд░ рдЬрд╛рдВрдЪ рдХреА рдЧрдИред
рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ
рдореИрдВрдиреЗ middleware.js
рдлрд╝рд╛рдЗрд▓ рдЕрдкрдиреЗ .storybook/
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдмрдирд╛рдХрд░ @BradMcGonigle рдКрдкрд░реА рдХреЗ рд╕рд╛рде рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ рд╣реИ:
const express = require('express');
const path = require('path');
module.exports = router => {
router.use('/docs', express.static(path.join(__dirname, '..', 'docs')));
}
@BiosBoy рдпрд╣рд╛рдБ рдХрд┐рд╕реА рднреА рднреНрд░рдо рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рд╕реЗ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╡рд┐рдЪрд╛рд░ (рдХреЗрд╡рд▓ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдЬрд╛рдирдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ):
My_sweet_projet_ROOT_DIR / рдШрдЯрдХреЛрдВ / .storybook / webpack.config.js
My_sweet_projet_ROOT_DIR / рд╕реНрдерд┐рд░
рдореИрдВ рднреА рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ next.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдШрдЯрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдореЗрд░рд╛ рд╕реЗрдЯрдЕрдк (рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреА рдУрд░ рд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдореБрдЭреЗ рдЖрдк рдкрд░ рднрд░реЛрд╕рд╛ рд╣реИ: рдбреА)
My_sweet_projet_ROOT_DIR / package.json
{
"name": "sweet_like_butter",
"version": "0.1.0",
"private": true,
"dependencies": {
"@zeit/next-css": "^1.0.1",
"next": "^8.1.0",
"react": "^16.8.6",
"react-dom": "^16.8.6",
"styled-components": "^4.2.0"
},
"scripts": {
"dev": "next",
"build": "next build",
"start": "next start"
},
"devDependencies": {
"babel-plugin-styled-components": "^1.10.0"
}
}
My_sweet_projet_ROOT_DIR / next.config.js
const withCSS = require('@zeit/next-css')
module.exports = withCSS()
рдореИрдВ рдмреЗрд╕ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рдорд╛рди рдореБрджреНрджреЗ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛:
manager-head.html
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВред https://storybook.js.org/docs/configurations/add-custom-head-tags/<head>
<script>
const hostname = window.location.hostname
if (hostname !== "" && hostname !== "localhost") {
const script = document.createElement('base')
script.href = '/storybook-static/'
document.getElementsByTagName('head')[0].appendChild(script)
}
</script>
</head>
(script.href = рдЖрдкрдХреЗ рдЗрдЪреНрдЫрд┐рдд рдкрде рдХреЗ рд▓рд┐рдП)
index.html рдореЗрдВ рдлрд╛рдЗрд▓реЗрдВ рдЕрдм рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд╕рд╛рде рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИрдВ
рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдореЗрдВ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрджрд┐ рдЖрдк -s ./static
рдЭрдВрдбрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЗ рд░рд╛рд╕реНрддреЗ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдореЗрдВ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рдЬреИрд╕реЗ рд╡реЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ? рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдореИрдВ рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реА рд╕реНрдерд┐рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ ./static
, рддреЛ рдореЗрд░реЗ рд╕рд╛рдкреЗрдХреНрд╖ рд░рд╛рд╕реНрддреЛрдВ рдЬреИрд╕реЗ ./static/image.png
рдХреЗ рдмрдЬрд╛рдп ./image.png
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдХреБрдЫ рдирд╛рд╕рдордЭ рд╕рд┐рдореНрдкреАрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ЁЯдФ
@eckmLJE рдпрджрд┐ рдЖрдк рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдКрдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╕реНрдирд┐рдкреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдпрд╛
рдореИрдВ рдЕрднреА рднреА 2020 рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ ...
рдореЗрд░рд╛ рдорд╛рдорд▓рд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рдореЗрд░реЗ package.json
рдореЗрдВ рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ: "storybook": "start-storybook -s ./dist/img -p 8888"
рдЗрд╕рд▓рд┐рдП рдЬрдм рдореИрдВ npm run storybook
рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ info => Loading static files from: /home/vagrant/projects/MySuperProject/web/themes/ofb/ofb_ui/dist/img .
рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЗрд╕ URL рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ dist/img
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдБ, рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛: http://localhost:8888/myImage.png
...
рддреЛ рджреЛрд╕реНрддреЛрдВ, рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ рдпрд╛ рдореИрдВ рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ?
@ndelangen рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо 6.0 рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рдЗрд╕реЗ рдлрд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдорд╣рд╛рди рддрдп рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ CopyWepbackPlugin
рдПрдкреАрдЖрдИ рдмрджрд▓ рдЧрдИ рд╣реИ рдФрд░ рдЖрдкрдХреЛ @mtrabelsi рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ pattern
рдХреБрдВрдЬреА рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
const path = require('path');
const CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = async ({ config }) => {
config.plugins.push(
new CopyWebpackPlugin({
pattern: [
{
from: path.resolve(__dirname, '../../static'),
to: './static'
}
]
})
);
return config;
}
рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдкрдиреЗ рджреЛ рд╕реЗрдВрдЯ рдЬреЛрдбрд╝реВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди @mtrabelsi рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдмрд╕ рдЕрдкрдиреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ ./static рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реИ рдЬреЛ build-storybook
рдХрдорд╛рдВрдб рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЧрд░ рдореИрдВ рдПрдХ рдЯреЙрдордХреИрдЯ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдРрдк рдХреЛ рддреИрдирд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ http://example.com/docs
рд╕реЗ рд╕реНрдереИрддрд┐рдХ рдРрдк рдХреЛ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдбреЙрдХреНрд╕ рдЯреЙрдордХреИрдЯ рд╡реЗрдмреИрдкреНрд╕ / рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд┐рдд рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИред
рдЙрдкрдкрде рдХреЗ рдХрд╛рд░рдг, / рд╕реНрдерд┐рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ / css рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдмрд╛рд╣рд░ рдХреА рдХреЛрдИ рднреА рдлрд╝рд╛рдЗрд▓ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛ рд░рд╣реА рдереАред рдореИрдВ рдЫрд╡рд┐рдпреЛрдВ рдФрд░ рдлреЛрдВрдЯ рдХреЗ рд▓рд┐рдП рд░рд┐рд╢реНрддреЗрджрд╛рд░ рд░рд╛рд╕реНрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдпреЗ рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐ рдереЗ рдЬреЛ рддреИрдирд╛рдд рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣реЗ рдереЗ)ред рддреЛ https://example.com/img/path/to/my/image
рдЬреИрд╕реЗ рдЕрдиреБрд░реЛрдз рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдП, рдЬрдм рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ / рд╕реНрдерд┐рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рддред https://example.com/static/img/path/to/my/image
рдореЗрд░реЗ рд╕рдорд╛рдзрд╛рди, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, @mtrabelsi рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд┐рд░реНрдл рджреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВ рдЕрдЧрд░ рдлреЛрдВрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЬрдбрд╝ рдореЗрдВ img:
const path = require('path');
const CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = async ({ config }) => {
function resolve(dir) {
return path.join(__dirname, '..', dir);
}
// Other configuration properties
config.plugins.push(
new CopyWebpackPlugin({
pattern: [
{
from: path.resolve(__dirname, './_assets'), // My static font and images are located in the .storybook dir
to: './' // Drop both the fonts/ and img/ directory into the root of the build output.
}
]
})
);
return config;
}
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЫрд╡рд┐рдпреЛрдВ рдФрд░ рдлреЛрдВрдЯ рдХреЛ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
@tmeasday рдмрддрд╛рддрд╛ рд╣реИ: рд╣рдо рдЗрд╕реЗ main.js
рд╡рд┐рдХрд▓реНрдк рдХреНрдпреЛрдВ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рджреЛрдиреЛрдВ start-storybook
рдФрд░ build-storybook
@ vcastro45 рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрдЯрд╛рд░реНрдЯ-рд╕реНрдЯреЛрд░реАрдмреБрдХ рдФрд░ рдмрд┐рд▓реНрдб-рд╕реНрдЯреЛрд░реАрдмреБрдХ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ ( next
рд╢рд╛рдЦрд╛ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛)ред
рдХреНрдпрд╛ рдЖрдк рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдЬрдирди рд░реЗрдкреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ?
@ рд╢реАрд▓рдореИрди рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реЗрдЯрдЕрдк рдХреЛ рдКрдкрд░ рдЙрдард╛рдирд╛ рд╣реЛрдЧрд╛
https://github.com/storybookjs/storybook/blob/9ea455a1746c489b7364448212663f2445af8a8b/lib/core/src/server/manager/manager-config.js#L101-L102 -L102
рдпрд╣рд╛рдБ рд╕реЗ рдкрд╣рд▓реЗ:
https://github.com/storybookjs/storybook/blob/19c2420db80fcb3b89b34cdbbe03bf9010b0b3b2/lib/core/core/server/server/build-static.js#L190 -L1911
рдФрд░ рдлрд┐рд░ рдмрд┐рд▓реНрдб / рджреЗрд╡ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╕рднреА рдирд┐рдЪрд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВред
рдпрд╣ рдХрд╛рдлреА рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рд╣реИ, рдХреБрдЫ рдирд╣реАрдВ рдЬреЛ рдореИрдВ 1 рджрд┐рди рдореЗрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдпрд╣ рднреА рдПрдХ рдФрд░ рдХреНрд╖рдг рд╣реЛрдЧрд╛ рдЬрдм рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рд╕рднреА рдЯреАрдПрд╕ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╣рдо рд╡реИрд╕реЗ рднреА 50% lib / core рдХреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЫреВ рд░рд╣реЗ рд╣реЛрдВрдЧреЗред
@ndelangen OOF, рдЪрд▓реЛ рдЕрдм рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ
рд╣рд╛рдБ, рд╣рдо рдЗрд╕реЗ рдХрд┐рд╕реА рджрд┐рди рдХрд░реЗрдВрдЧреЗ
@ndelangen рдореИрдВрдиреЗ # 11370 рдореЗрдВ @tmeasday рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд┐рдпрд╛ рд╣реИред рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ main.js
рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ 6.x рдореЗрдВ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реИред
рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ./public
/static
рдкрде рд╕реЗ рд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП start-storybook -p 6006 -s "./public:/static"
рдХрд╛ рд╕рдорд╛рдзрд╛рди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╣ рдмреЗрд╣рдж рд▓рдЪреАрд▓реЗ рдЙрдкрдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЗ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдорд╛рд░реНрдЧ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЗ рдбреЙрдХрд░ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЛ рдлрд┐рдЯ рдХрд░реЗрдЧрд╛ рдЬреЛ рдХрд┐ рд╣рдо рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред
рд╣реЗрд▓реЛ рд╕рдм рд▓реЛрдЧ! рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдпрджрд┐ рдЕрднреА рднреА рдкреНрд░рд╢реНрди, рдЯрд┐рдкреНрдкрдгреА рдпрд╛ рдмрдЧ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЪрд░реНрдЪрд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рд░ рдореБрджреНрджреЗ рдкрд░ рдЖрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред рд╣рдо рд╣рдореЗрд╢рд╛ рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдЦреБрд▓реЗ рд░рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ рдЕрдЧрд░ рдЖрдк рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдирд┐рд╖реНрдХреНрд░рд┐рдп рдореБрджреНрджреЛрдВ рдХреЛ 30 рджрд┐рдиреЛрдВ рдХреЗ рдмрд╛рдж рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдзрдиреНрдпрд╡рд╛рдж!
@nfroidure рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рд╣реИ!
@ndelangen рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдореИрдВ рдПрдХ рдкреАрдЖрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдХреЛрд╢рд┐рд╢ рджреЗ рд╕рдХрддрд╛ рд╣реВрдВред рдХрд┐рд╕реА рднреА рдореМрдХрд╛ рдпрд╣ рд╡рд┐рд▓рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ?
@nfroidure рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛:
рдпрд╣рд╛рдБ рд╣реИ рдЬрд╣рд╛рдБ рдХреЛрдб рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛:
https://github.com/storybookjs/storybook/blob/9182d9f5ddbe136e9cd5fc9f11fa962a3cfe08f1/lib/core/serrc/server/build-dev.js#L77 -L9393
рд╡реИрд╕реЗ рдореЗрд░реЗ рдпрд╣рд╛рдБ рдХреБрдЫ рд╣реИ: https://github.com/storybookjs/storybook/pull/12222
рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрди рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдФрд░ рдореЗрд░реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмреАрдЪ рдХреЛрдИ рд▓рд┐рдВрдХ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ред
LMKWYT;)
рдЗрд╕ PR @nfroidure рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдореИрдВ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдЗрд╕реЗ рджреЗрдЦреВрдВрдЧрд╛!
ZOMG !! рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА https://github.com/storybookjs/storybook/releases/tag/v6.1.0-alpha.6 рдХреЛ PR # 12222 рдпреБрдХреНрдд рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдЖрдЬрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЬ рд╣реА рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВ!
рдЖрдк рдЗрд╕ @next
рдПрдирдкреАрдПрдо рдЯреИрдЧ рдкрд░ рдЗрд╕ рдкреНрд░реАрд▓реЗрд░реЗрдЬрд╝ рдХреЛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ред рдХреГрдкрдпрд╛ рдкреБрди: рдЦреЛрд▓реЗрдВ рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рдФрд░ рдХреБрдЫ рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИред
рдХреНрдпрд╛ рдЗрд╕ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐
./public
/static
рдкрде рд╕реЗ рд╕реНрдерд┐рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПstart-storybook -p 6006 -s "./public:/static"
рдХрд╛ рд╕рдорд╛рдзрд╛рди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╣ рдмреЗрд╣рдж рд▓рдЪреАрд▓реЗ рдЙрдкрдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЗ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдорд╛рд░реНрдЧ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЗ рдбреЙрдХрд░ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЛ рдлрд┐рдЯ рдХрд░реЗрдЧрд╛ рдЬреЛ рдХрд┐ рд╣рдо рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред