
рдХреНрдпрд╛ рдЖрдкрдиреЗ рдирдП рдЬрд╛рдорд╕реНрдЯреИрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реИ? рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдврд╛рдВрдЪреЗ рдкрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдкреНрд░рдмрдВрдзрди, рдФрд░ рдПрд╕рдИрдУ, PWA рдФрд░ a11y рдХреА рдирд╡реАрдирддрдо рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд┐рд░реНрдорд┐рдд рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реИрдз HTML рдкреГрд╖реНрдареЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрдиред
рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ? рдлрд┐рд░ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрджреНрджреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ:
- рдпрд╣ рдирдпрд╛ рд╕реНрдЯреИрдХ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?
- Gatsby рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдореВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ?
- рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдФрд░ рдбреЗрдЯрд╛ рдХрд╛ рдкрд╣рд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдирд╛
- рдЧреНрд░рд╛рдлрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдВрдЯреЗрдВрдЯрдлреБрд▓ рдФрд░ рдЧреИрдЯреНрд╕рдмреА рдХреЛ рдХреИрд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ?
- Netlify рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕реЗрдЯ рдХрд░реЗрдВ
JAMstack
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ: "рд╕рдм рдХреБрдЫ рдирдпрд╛ рдкреБрд░рд╛рдирд╛ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ" рджрд╕ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреНрдпрд╛ рдерд╛? рдпрд╣ рдПрдХ PHP рд╕рд░реНрд╡рд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдерд╛ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ HTML рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рдерд╛ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬрддрд╛ рдерд╛ред

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

рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ? рдЬрд╛рдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- рдХреЛрдИ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдирд╣реАрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЛ рд╣реА рд╣рдЯрд╛ рджреЗрдВ
- рдХреЛрдИ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдирд╣реАрдВ, рдиреАрдЪреЗ
<div id=тАЭrootтАЭ></div>
- рд╕рд╛рдЗрдЯ рдХреЛ рдирд┐рдпрдорд┐рдд HTML рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ, рдПрдХ рдмрд╛рд░, рд╕рд╛рдордЧреНрд░реА рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рдордп
- рдХрд┐рд╕реА рднреА рдлрд╛рдЗрд▓ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкрд░ рд╕рд╛рдЗрдЯ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ

рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдиреНрдп рд▓реЗрдЖрдЙрдЯ рд╡рд╛рд▓рд╛ рдкреНрд░реА-рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреЗрдЬ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рд╕рд╡рд╛рд▓ рдЕрдм рдХреЗрд╡рд▓ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреА рдЧрддрд┐ рдХреА рдЪрд┐рдВрддрд╛ рдХрд░рддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╣рд╛рдереЛрдВ рдХреЗ рдЧреБрдгрд╛рдВрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛)ред
рдЙрдкрдХрд░рдг
рдЬреЗрдПрдПрдо рд╕рд┐рд░реНрдл рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдмрд╛рдЬрд╛рд░ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рдзрдирд░рд╛рд╢рд┐ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдирд╛рдЦреВрдиреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рд╣рдереМрдбрд╝рд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред

2019 рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА:
Gatsby React + GraphQL рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рдПрдХ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯ рдЬрдирд░реЗрдЯрд░ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреНрдпреЛрдВ рд╣реИ, рдФрд░ рди рдХрд┐ рдХреЛрдгреАрдп рдпрд╛ Vue, рдореБрдЭреЗ рдЙрддреНрддрд░ рджреЗрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдмреБрд░реЗ рдЖрдБрдХрдбрд╝реЛрдВ рдореЗрдВ, рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рд╡рд┐рд╡рд╛рджреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд┐рдЫрд▓реЗ рддреАрди рд╡рд░реНрд╖реЛрдВ рдХрд╛ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдврд╛рдВрдЪрд╛ рд╣реИ (рдЗрд╕ рдХрдерди рдХреЗ рд▓рд┐рдП, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдореБрдЭ рдкрд░ рдкрддреНрдерд░ рдордд рдлреЗрдВрдХреЛ) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛)ред рдЕрдзрд┐рдХ рджреГрд╢реНрдп рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рд▓рд┐рдП, create-react-app
рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд┐рд▓реНрдб рдореЗрдВ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдкреГрд╖реНрда рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдЖрдЧреЗ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП, Gatsby рдорд╛рдиреНрдп рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг HTML рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЬреЗрдПрд╕ рдХреЗ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
рд╕рд╛рдордЧреНрд░реА - рд╕реНрдерд┐рд░ рдкреГрд╖реНрдареЛрдВ рдкрд░ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реАред рдпрд╣ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рд╣реИ , рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдбреЗрдЯрд╛ рдХреЛ рд╕реАрдзреЗ HTML рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИред
Netlify рдПрдХ рдмрд╣реБрдд рд╣реА рдЖрд╕рд╛рди рдЙрдкрдпреЛрдЧ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкреНрд░рдгрд╛рд▓реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдлрд╝рд╛рдЗрд▓ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ JAM рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ HTTPS рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред
рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рдЕрднреНрдпрд╛рд╕ рддрдХ
рдЕрдм рдЬрдм рдЖрдкрдиреЗ рдЯреВрд▓ рдкрд░ рдлреИрд╕рд▓рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ - рдЖрдк рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
Contentful
рд╣рдо рдПрдХ рдЦрд╛рддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрд╡рд╛ рдПрдХ рдореЙрдбрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рддреБрд░рдВрдд рд╣рдЯрд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рд░рд╛рдп рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИред рд╣рдо рдПрдХ рдирдИ рдореБрдХреНрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдмрд┐рдирд╛ред
рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рджреЛ рд╕рдВрд╕реНрдерд╛рдУрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ - рд╕рд╛рдордЧреНрд░реА рдореЙрдбрд▓ , рдЬреЛ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░, рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдореЙрдбрд▓ рдмрдирд╛рдПрдВред рд╕рд╛рдордЧреНрд░реА рдореЙрдбрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдмреНрд▓реЙрдЧ рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ: рдЕрдиреБрдЪреНрдЫреЗрдж , рд╡реНрдпрдХреНрддрд┐ ред

рдмреЗрд╢рдХ, рдЖрдк рдХрд┐рд╕реА рднреА рд╕реНрддрд░ рдХреЗ рдЕрдореВрд░реНрдд рдХреЛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдкрд╕рдВрдж рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреБрдЪреНрдЫреЗрдж рдХреЗ рдЕрдВрджрд░ рд▓реЗрдЦрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ Article.author_name
рдореЗрд░реЗ рдореЙрдбрд▓ рдХреА рд╕рдВрд░рдЪрдирд╛ article/ тФЬтФАтФА title (Short text) тФЬтФАтФА text (Long text) тФЬтФАтФА banner (Single media) тФФтФАтФА publishedAt (Date & Time) person/ тФЬтФАтФА fullName (Short text) тФФтФАтФА avatar (Single media)
рдЕрдЧрд▓рд╛, рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╕рд╛рдордЧреНрд░реА рдЬреЛрдбрд╝реЗрдВ, рдЙрди рдкрд╛рдареЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЖрдк рдЕрдирд╕реНрдкреНрд▓реИрд╢ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдЧрдирдЗрдкреНрд╕рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Gatsby
рд╣рдо рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рдо рдХрд╛ рдорд╛рд╣реМрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ
## npm install --global gatsby-cli ## gatsby new personal-blog ## Hello World ## gatsby new minimal-gatsby https://github.com/gatsbyjs/gatsby-starter-hello-world ## cd personal-blog
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ personal-blog/ тФЬтФАтФА gatsby-browser.js тФЬтФАтФА gatsby-config.js тФЬтФАтФА gatsby-node.js тФЬтФАтФА gatsby-ssr.js тФЬтФАтФА LICENSE тФЬтФАтФА node_modules тФЬтФАтФА package.json тФЬтФАтФА README.md тФФтФАтФА src тФЬтФАтФА components тФВ тФЬтФАтФА header.js тФВ тФЬтФАтФА image.js тФВ тФЬтФАтФА layout.css тФВ тФЬтФАтФА layout.js тФВ тФФтФАтФА seo.js тФЬтФАтФА images тФВ тФЬтФАтФА gatsby-astronaut.png тФВ тФФтФАтФА gatsby-icon.png тФФтФАтФА pages тФЬтФАтФА 404.js тФЬтФАтФА index.js тФФтФАтФА page-2.js
## hot-reloading gatsby develop
рдХреНрдпрд╛ рд╣реБрдЖ рдерд╛? рдПрдХ React + GraphQL рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЧреИрдЯреНрд╕рдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рдкреБрд░рд╛рдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕реНрдерд┐рд░ рдПрдЪрдЯреАрдПрдордПрд▓ рд╕рд╛рдЗрдЯ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдФрд░ рдЧрддрд┐ рдореЗрдВ рдХрдИ рдЧреБрдирд╛ рд╡реГрджреНрдзрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд▓рдВрдмрд╛ рд╕рдордп рд▓реЗрддреА рд╣реИред
Gatsby + рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж
## npm install gatsby-source-contentful dotenv
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдЖрд╡реЗрджрди рдХреА рдЬрдбрд╝ рдореЗрдВ .env рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
/* 12- Contentful тЖТ Settings тЖТ API keys тЖТ Example key 1тЖТ Space ID */ CONTENTFUL_SPACE_ID=xxxxxxxxxxxx /* 64- Contentful тЖТ Settings тЖТ API keys тЖТ Example key 1тЖТ Content Delivery API - access token */ CONTENTFUL_ACCESS_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Gatsby-config.js рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ :
if (process.env.NODE_ENV === "development") { require("dotenv").config(); } module.exports = { /* other settings */ plugins: [ /* other plugins */ { resolve: `gatsby-source-contentful`, options: { spaceId: process.env.CONTENTFUL_SPACE_ID, accessToken: process.env.CONTENTFUL_ACCESS_TOKEN, }, } ] }
рд╣рдо рдЧреИрдЯреНрд╕рдмреА рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рддреЛ рдХрдВрдЯреЗрдВрдЯрдлреБрд▓ рдХрд╛ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрдк рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
Gatsby + GraphQL + рдХрдВрдЯреЗрдВрдЯрдлреБрд▓
рдпрджрд┐ рдЖрдк рдЧреНрд░рд╛рдлрдХреЙрд▓ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рдЕрдм рдпрд╣рд╛рдВ рд╕реНрдерд┐рдд рд╣реИ:
http: // рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 8000 /
рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ рдФрд░ рджреВрд╕рд░рд╛ рдЯреИрдм рдЦреЛрд▓реЗрдВрдЧреЗ:
http: // рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 8000 / ___ рдЧреНрд░рд╛рдлрдХрд▓
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╕рд╣реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ GraphQL рдХреЗ рд▓рд┐рдП рдЖрдИрдбреАрдИ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдФрд░ рдЙрдирдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрдбрдмрд╛рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рдбреЙрдХреНрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рд╣реИ, рдпрд╣ рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЖрдкрдХрд╛ рдПрдкреАрдЖрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИред рдХреНрд╡реЗрд░реА рдХреЗ рд▓рд┐рдП рд╕рднреА рдЙрдкрд▓рдмреНрдз рд╕реНрдХреАрдорд╛рдУрдВ рдХреЛ рдЙрдирдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реА рд╕реВрдЪреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВред
рдЬрд┐рди рд╕рд░реНрдХрд┐рдЯреЛрдВ рдореЗрдВ рд╣рдо рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд╡реЗ рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд╛рдо рд╣реИрдВ:
рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж YourDataType - рдПрдХ рдЙрджрд╛рд╣рд░рдг
AllContentful YourDataType - рдЙрджрд╛рд╣рд░рдг рд╕реВрдЪреА
рдореЗрд░реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг- contentfulArticle
- contentfulPerson
- allContentfulArticle
- allContentfulPerson
рдмрд╛рдПрдВ рдкреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдХреНрд╡реЗрд░реА рдмрдирд╛рдПрдВрдЧреЗ (рдСрдЯреЛ-рдкреВрд░реНрдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ)ред
рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдХрд╛рд░ рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЕрдиреБрдЪреНрдЫреЗрдж рд╕реЗ рдПрдХ рд╕реВрдЪреА рдХрд╛ рдЕрдиреБрд░реЛрдз { contentfulPerson { fullName avatar { file { url } } } allContentfulArticle { edges { node { title text { text } banner { file { url } } publishedAt } } } }
рдХреНрд╡реЗрд░реА рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдХреНрдпрд╛ рдиреЛрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП URL рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрде
typeName.file.url
рдкрд░ рдЬрд╛рдирд╛ typeName.file.url
- рдкрд╛рда рдХреЛ рд▓рдВрдмреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрде
typeName.typeName
- рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
allContentfulName.edges
рд╣рдо рдЕрдиреБрд░реЛрдз рдпреЛрдЬрдирд╛ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдирд┐рдпрдорд┐рдд рдбреЗрдЯрд╛ рдХреА рддрд░рд╣ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ Gatsby рдкреИрдХреЗрдЬ рд╕реЗ <StaticQuery />
рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдЕрднреНрдпрд╛рд╕ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред
рдЙрджрд╛рд╣рд░рдг index.js рдлрд╝рд╛рдЗрд▓ import React from "react" import { StaticQuery, graphql } from "gatsby" import Layout from "../components/layout" import Article from "../components/article" const IndexPage = () => ( <Layout> <StaticQuery query={graphql` { allContentfulArticle { edges { node { id title text { text } banner { file { url } } publishedAt } } } } `} render={({ allContentfulArticle: { edges } }) => ( edges.map(({ node }) => ( <Article key={node.id} content={node} /> )) )} /> </Layout> ) export default IndexPage
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рд░реЗрдЦрд╛рдВрдХрди query
рд╕реНрдХреАрдорд╛ query
рд▓рд┐рдП рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ render
рдХрд░рдиреЗ рдХреЗ render
рд╣рдорд╛рд░рд╛ рдкрд╕рдВрджреАрджрд╛ JSXред рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдШрдЯрдХреЛрдВ / article.js рдХреЗ рдЙрджрд╛рд╣рд░рдг рджреНрд╡рд╛рд░рд╛ рдкреБрдирд░реНрдЧрдарди import React from "react" const Article = ({ content: { title, text, banner: { file: { url } }, publishedAt } }) => ( <div> <h2>{title}</h2> <img src={url} alt={title}/> <p> {text} </p> <h5>{publishedAt}</h5> </div> ) export default Article
рдЕрдм рдЬрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЙрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ, рддреЛ рдЖрдк рд╡рд┐рдХрд╛рд╕ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд░ рд╕рд╛рдЗрдЯ рдХреИрд╕реЗ рдмрдирд╛рдИ рдЬрд╛рдП, рд╣рдо рдЗрд╕ рдХреНрд╖рдг рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ рдФрд░ рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╕рд╛рдЗрдЯ рддреИрдпрд╛рд░ рд╣реИред
рд╣рдо рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ GitHub рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВрдЧреЗ, рдЬрд╣рд╛рдВ рд╕реЗ рдЗрд╕реЗ рдЕрдЧрд▓реЗ рдЪрд░рдг рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрднреА рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ ## git init ## git add . git commit -m тАЬinitial commitтАЭ ## GitHub git remote add origin git@github.com:yourname/my-repository-name.git ## git push origin master
Netlify рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рд╣рдо рдЙрд╕ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЦрд╛рддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕ рдкрд░ рдЖрдк рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд░рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЧрд┐рдЯрд╣рдм рдХреЛ рдЪреБрдирд╛, рдЗрд╕рд▓рд┐рдП рд╕рдлрд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж рд╣рдо рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдЧреЗ, рдЧрд┐рдЯ рд╕реЗ рдирдИ рд╕рд╛рдЗрдЯ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЕрдкрдиреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдиреЗрдЯрд▓рд╛рдЗрдЬрд╝ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЧреИрдЯреНрд╕рдмреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдФрд░ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред
рд╣рдо рд╡рд╛рдВрдЫрд┐рдд рд╢рд╛рдЦрд╛ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рднреВрд▓рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЙрдиреНрдирдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдиреВ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдерд╛рдиреАрдп .env рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддреЗ рд╣реИрдВред
рдХреБрдЫ рдорд┐рдирдЯ рдХрд╛ рдЬрд╛рджреВ рдФрд░ рдЬрдЧрд╣ рдореЗрдВ рдПрдХ рд╕рд╛рдЗрдЯ:
https://tender-liskov-ce3ad0.netlify.com
рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реБрдХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рд╕реЗрдЯрд┐рдВрдЧ рдкрд░ рдЬрд╛рдПрдВ:
рд╕реЗрдЯрд┐рдВрдЧ рд╕реЗрдЯ рдХрд░реЗрдВ тЖТ рд╣реБрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ тЖТ рдмрд┐рд▓реНрдб рд╣реБрдХ рдЬреЛрдбрд╝реЗрдВ

рд╣рдо рдХрд┐рд╕реА рднреА рдЕрдиреБрдХреВрд▓ рдирд╛рдо рдХреЛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдХрдВрдЯреЗрдВрдЯрдлреБрд▓ рд╣реБрдХ" , рдЙрд╕ рд╢рд╛рдЦрд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВрдЧреЗред рдкрд░рд┐рдгрд╛рдо рдПрдХ рд▓рд┐рдВрдХ рд╣реИ, рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рдХрдВрдЯреЗрдВрдЯрдлреБрд▓ рдкреИрдирд▓ рдкрд░ рдЬрд╛рдПрдВ:
рд╕реЗрдЯрд┐рдВрдЧ тЖТ рд╡реЗрдмрд╣реВрдХ

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