Razzle: рдПрдХ рдирдпрд╛ рдРрдк рд╢реБрд░реВ рдХрд░рдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 5 рдЬреВрди 2017  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jaredpalmer/razzle

рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрдорд╛рд▓ рдХрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдмрд╕ next.js, create-react-app, рдФрд░ razzle рдХреЗ рдмреАрдЪ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рд▓рд╛рдн рд╣реИрдВ, рдпрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрд╕рдПрд╕рдЖрд░ рдХреЛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдЗрд╕рд▓рд┐рдП рд╕реАрдЖрд░рдП рд╢рд╛рдпрдж рд╕рд╡рд╛рд▓ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред рдореИрдВрдиреЗ рдЕрдЧрд▓реЗ рдХреЗ рд╕рд╛рде рдПрдХ рдРрдк рдмрдирд╛рдпрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЦреЛрдЬ рдХреА рд╣реИред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдареАрдХ рдЬрдЧрд╣ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХреНрдпрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

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

рдзрдиреНрдпрд╡рд╛рдж @knipferrc

рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЕрдиреБрднрд╡ рдиреЗ рдореБрдЭреЗ рд░реИрдЬрд╝рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред

рд▓рдЧрднрдЧ 6 рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдРрдк рд╢реБрд░реВ рдХрд┐рдпрд╛, рдЗрд╕рдХреЗ рдареАрдХ рдмрд╛рдж рдореЗрдВ рдФрд░ рдордВрдерди рдореЗрд░реЗ рд▓рд┐рдП рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдерд╛ред рдореИрдВрдиреЗ рд╕рдЪрдореБрдЪ рдкреИрд░рд╛рдореАрдЯрд░рдпреБрдХреНрдд рд░реВрдЯрд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг (рдпрд╛рдиреА /user/:id ) рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдЬрдорд╛ рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдорд╛рд░реНрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ getInitialProps рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рдЕрдЬреАрдм рдмрдЧ рдХреЗ рдХрд╛рд░рдг рдореИрдВрдиреЗ рдкреВрд░реЗ рд╕рдкреНрддрд╛рд╣ рдХрд╛ рдХрд╛рдо рдЦреЛ рджрд┐рдпрд╛ ред рджрд┐рди рдХреЗ рдЕрдВрдд рдореЗрдВ, Next.js рдЖрдкрдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИ (рдпрд╛рдиреА рд░реВрдЯрд┐рдВрдЧ, рдбреЗрдЯрд╛-рдлрд╝реЗрдЪрд┐рдВрдЧ, рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ)ред рдпреЗ рдЕрдЪреНрдЫреЗ рд╣реИрдВ рдпрд╛ рдмреБрд░реЗ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЛ рд╣рд░ рдПрдХ рдорд╛рд░реНрдЧ (рдХреЗрд╡рд▓ 2 рдХреА рддрд░рд╣) рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА, рдореИрдВ рдкреВрд░реНрдг рдкреГрд╖реНрда рд░реАрд▓реЛрдб рдХреЗ рдмрдЬрд╛рдп рдХреНрд▓рд╛рдЗрдВрдЯ рд▓реЛрдбрд┐рдВрдЧ рд░рд╛рдЬреНрдп рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░ рдореИрдВ рдорд╛рд░реНрдЧ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмреАрдЪ рд╡реИрд╢реНрд╡рд┐рдХ рд░рд╛рдЬреНрдп рдкреЗрдбрд╝ рдХреЛ рдирд╖реНрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд╡рд╣, рдореЗрд░реА рд░рд╛рдп рдХреЗ рд╕рд╛рде рдпреБрдЧреНрдорд┐рдд рд╣реИ рдХрд┐ рдХрдЯрд╛ рд╣реБрдЖ рдмреНрд░реЗрдб рдХреЗ рдмрд╛рдж рд╕реЗ рд░рд┐рдПрдХреНрдЯ-рд░рд╛рдЙрдЯрд░ 4 рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЪреАрдЬ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдлрд┐рдЯ рдирд╣реАрдВ рдерд╛ред

рдХреБрдЫ рдФрд░ рд╕реНрдерд┐рд░ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ, рдореИрдВ NYT рдХреЗ kyt рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ред рдпрд╣ рд▓рдЧрднрдЧ ~ 2 рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛, рд▓реЗрдХрд┐рди 1) рдРрдк рдХреЗ рдмрдврд╝рдиреЗ рдХреЗ рд╕рд╛рде рд╣реА рдмрд┐рд▓реНрдб рдЯрд╛рдЗрдо рдмрд╣реБрдд рдзреАрдорд╛ (>45s) рд╣реЛ рдЧрдпрд╛, 2) kyt рдХреЗ SCSS рдирд┐рдпрдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдлрд┐рдЯ рдирд╣реАрдВ рдереЗ, рдФрд░ 3) рдореБрдЭреЗ kyt рдХрд╛ рд▓реЙрдЧрд┐рдВрдЧ рдорд┐рд▓рд╛ (рд╕рд╛рде рдореЗрдВ) рдЗрдореЛрдЬреА рдХреА рдкрд╛рдЧрд▓ рд░рд╛рд╢рд┐) рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рджред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ kyt рдХреЗ рд▓рд┐рдП рдПрдХ рдкрддрд▓реЗ, рддреЗрдЬрд╝ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпреВрдирд┐рд╡рд░реНрд╕рд▓ HMR рдФрд░ рдПрдХ рд╕рдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди API рдХреЗ рд╕рд╛рде Next.js-- create-react-app-ssr , рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред

рдПрдХ рдмрд╛рд░ рдЬрдм рд╕рдм рдХреБрдЫ рдХрд╣рд╛ рдФрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛, рддреЛ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВрдиреЗ рд▓рдЧрднрдЧ рдврд╛рдВрдЪрд╛-рдЕрдЬреНрдЮреЗрдп рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдИ рд╣реИ рдФрд░ рдпрд╣ рдХрд┐ рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рдпрд╣ рд╕реНрддрд░ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рдерд╛ред "рдлреНрд░реЗрдорд╡рд░реНрдХ-рдЕрдЬреНрдЮреЗрдпрд╡рд╛рджреА" рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд░реИрдЬрд╝рд▓ 100% рдПрдВрдЧреБрд▓рд░, рд╡реАрдпреВ, рд░реИрдХреНрд╕, рдкреНрд░реАрдПрдХреНрдЯ, рдЗрдиреНрдлрд░реНрдиреЛ, рд░рд┐рдПрдХреНрдЯ-рдПрдХреНрд╕рдкреА, рдЖрд░рдПрди-рд╡реЗрдм, рд░реАрдЬрд╝рди-рд░рд┐рдПрдХреНрдЯ рдФрд░, _рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореЗрд░реЗ рд▓рд┐рдП_ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЬреЛ рднреА рдкрд╛рдЧрд▓ рд╕рд╛рдорд╛рди рдЖрдЧреЗ рдЖрддрд╛ рд╣реИред рдЖрдИрдПрдордПрдЪрдУ, рдЕрдиреБрдХреВрд▓рди рдХреНрд╖рдорддрд╛ рд░реИрдЬрд╝рд▓ рдФрд░ рдореИрдВрдиреЗ рдЬреЛ рдХреБрдЫ рднреА рджреЗрдЦрд╛ рд╣реИ, рдХреЗ рдмреАрдЪ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рд╣реИред рд░реИрдЬрд╝рд▓ рдХреЗ рд╕рд╛рде, рдЖрдк рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдХрд╛рдВрдЯрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдмреИрдмреЗрд▓-рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо/рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди/рдкреИрд░реЗрд▓рд▓ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╕ рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рдиреЗрдХреНрд╕реНрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд░реИрдЬрд╝рд▓ рдПрдХ рдврд╛рдВрдЪрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕реАрдЖрд░рдП рдХреЗ рд╡рд┐рдкрд░реАрдд, рд░реИрдЬрд╝рд▓ рдЖрдкрдХреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдлреЛрд░реНрдХ рдХрд┐рдП рдмрд┐рдирд╛ рдмрдврд╝рд╛рдиреЗ рджреЗрддрд╛ рд╣реИред рдореЗрд░реЗ рд╕реАрдЦрдиреЗ, рд╕рд┐рдЦрд╛рдиреЗ, рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рд╡реНрдпрд╡рд╕рд╛рдп рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИред

рд░реИрдЬрд╝рд▓ рдХреЗ рд▓рдЪреАрд▓реЗрдкрди рдФрд░ рдЕрдЬреНрдЮреЗрдпрд╡рд╛рдж рдиреЗ рдореБрдЭреЗ рдФрд░ рдореЗрд░реА рдЯреАрдо рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╣реА рднреБрдЧрддрд╛рди рдХрд░ рджрд┐рдпрд╛ рд╣реИ:

  • рд╣рдордиреЗ razzle.config.js рдореЗрдВ рдХреЛрдб рдХреА 10 рд╕реЗ рдХрдо рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓рдХрд░ рдЕрдкрдиреЗ рдРрдк рдХреЛ рдЖрдВрд╢рд┐рдХ-рдкреНрд░рд╡рд╛рд╣ рд╕реЗ 100% рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред
  • рдмрд┐рдирд╛ рдХреЛрд╢рд┐рд╢ рдХрд┐рдП рднреА, рд░реИрдЬрд╝рд▓ рдПрдХ рд░реАрдЬрд╝рди рд░рд┐рдПрдХреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ (SSR рдпрд╛ SPA) рдХреЛ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рдмрди рдЧрдпрд╛ рд╣реИред

рд░реИрдЬрд╝рд▓ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдХреЗ рд░реВрдк рдореЗрдВред рджреЛ рджрд┐рди рдкрд╣рд▓реЗ, "рд╕реАрдЖрд░рдП рдореЗрдВ рдПрд╕рдПрд╕рдЖрд░ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛" рдХреЛ рд░рд┐рдПрдХреНрдЯ рдХреЛрд░ рдЯреАрдо рдХреЗ рд░реЛрдбрдореИрдк рдкрд░ рд╢реАрд░реНрд╖ ~ 15 рдЯреВрдбреВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рд╕реАрдЖрд░рдП рдореЗрдВ рдПрд╕рдПрд╕рдЖрд░ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд░реИрдЬрд╝рд▓ рдХреЛ рдЕрдм рдореМрдЬреВрдж рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ... рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╢рд╛рдВрдд рд╣реВрдВ_ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рд╣реЛрдиреЗ рддрдХ, рд░реИрдЬрд╝рд▓ рд╕рд░реНрд╡рд░ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдлреНрд░реЗрдорд╡рд░реНрдХ-рдПрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдмрд┐рд▓реНрдб рдЯреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝реЗрдЧрд╛ред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реЛрдЧрд╛ рдХрд┐ рд╕рд╣реА рдЙрддреНрддрд░ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдФрд░ рдЖрдкрдХреА рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдПред

рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ Next.js рдПрдХ рдкреВрд░реНрдг рдврд╛рдВрдЪрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ ZEIT рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рдПрдХ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдпрд╛ рдордВрдЪ?. рдЬрдмрдХрд┐ рд░реИрдЬрд╝рд▓ рдЕрдзрд┐рдХ рдиреНрдпреВрдирддрд░ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рд╡реЗ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ рдЬрд┐рдирдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рд╕рдЪ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╡реЗ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ рдЬрд┐рдирдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдпрд╛ рдЬрд┐рдирдХреА рдЖрдкрдХреЛ рдЕрдВрддрддрдГ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рднреА Next.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЫреЛрдЯреЗ рд╡рд┐рд╡рд░рдг рдереЗ рдЬреЛ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд░ рд░рд╣реЗ рдереЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ рдПрдЪрдЯреАрдПрдордПрд▓ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдареАрдХ рд╕реЗ рдЫреЛрдЯрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдбреАрд▓ рдмреНрд░реЗрдХрд░ рдерд╛ред) рдпрд╣ рд╕реНрдЯрд╛рдЗрд▓-рдЬреЗрдПрд╕рдПрдХреНрд╕ рдПрдХ рд╕реАрдПрд╕рдПрд╕-рдЗрди-рдЬреЗрдПрд╕ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕реНрдЯрд╛рдЗрд▓ рдШрдЯрдХ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореЗрд░реА рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд░реВрдЯрд┐рдВрдЧ (рдЕрднреА рддрдХ ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред

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

рдзрдиреНрдпрд╡рд╛рдж @knipferrc

рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЕрдиреБрднрд╡ рдиреЗ рдореБрдЭреЗ рд░реИрдЬрд╝рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред

рд▓рдЧрднрдЧ 6 рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдРрдк рд╢реБрд░реВ рдХрд┐рдпрд╛, рдЗрд╕рдХреЗ рдареАрдХ рдмрд╛рдж рдореЗрдВ рдФрд░ рдордВрдерди рдореЗрд░реЗ рд▓рд┐рдП рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдерд╛ред рдореИрдВрдиреЗ рд╕рдЪрдореБрдЪ рдкреИрд░рд╛рдореАрдЯрд░рдпреБрдХреНрдд рд░реВрдЯрд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг (рдпрд╛рдиреА /user/:id ) рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдЬрдорд╛ рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдорд╛рд░реНрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ getInitialProps рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рдЕрдЬреАрдм рдмрдЧ рдХреЗ рдХрд╛рд░рдг рдореИрдВрдиреЗ рдкреВрд░реЗ рд╕рдкреНрддрд╛рд╣ рдХрд╛ рдХрд╛рдо рдЦреЛ рджрд┐рдпрд╛ ред рджрд┐рди рдХреЗ рдЕрдВрдд рдореЗрдВ, Next.js рдЖрдкрдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИ (рдпрд╛рдиреА рд░реВрдЯрд┐рдВрдЧ, рдбреЗрдЯрд╛-рдлрд╝реЗрдЪрд┐рдВрдЧ, рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ)ред рдпреЗ рдЕрдЪреНрдЫреЗ рд╣реИрдВ рдпрд╛ рдмреБрд░реЗ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЛ рд╣рд░ рдПрдХ рдорд╛рд░реНрдЧ (рдХреЗрд╡рд▓ 2 рдХреА рддрд░рд╣) рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА, рдореИрдВ рдкреВрд░реНрдг рдкреГрд╖реНрда рд░реАрд▓реЛрдб рдХреЗ рдмрдЬрд╛рдп рдХреНрд▓рд╛рдЗрдВрдЯ рд▓реЛрдбрд┐рдВрдЧ рд░рд╛рдЬреНрдп рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░ рдореИрдВ рдорд╛рд░реНрдЧ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмреАрдЪ рд╡реИрд╢реНрд╡рд┐рдХ рд░рд╛рдЬреНрдп рдкреЗрдбрд╝ рдХреЛ рдирд╖реНрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд╡рд╣, рдореЗрд░реА рд░рд╛рдп рдХреЗ рд╕рд╛рде рдпреБрдЧреНрдорд┐рдд рд╣реИ рдХрд┐ рдХрдЯрд╛ рд╣реБрдЖ рдмреНрд░реЗрдб рдХреЗ рдмрд╛рдж рд╕реЗ рд░рд┐рдПрдХреНрдЯ-рд░рд╛рдЙрдЯрд░ 4 рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЪреАрдЬ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдлрд┐рдЯ рдирд╣реАрдВ рдерд╛ред

рдХреБрдЫ рдФрд░ рд╕реНрдерд┐рд░ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ, рдореИрдВ NYT рдХреЗ kyt рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ред рдпрд╣ рд▓рдЧрднрдЧ ~ 2 рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛, рд▓реЗрдХрд┐рди 1) рдРрдк рдХреЗ рдмрдврд╝рдиреЗ рдХреЗ рд╕рд╛рде рд╣реА рдмрд┐рд▓реНрдб рдЯрд╛рдЗрдо рдмрд╣реБрдд рдзреАрдорд╛ (>45s) рд╣реЛ рдЧрдпрд╛, 2) kyt рдХреЗ SCSS рдирд┐рдпрдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдлрд┐рдЯ рдирд╣реАрдВ рдереЗ, рдФрд░ 3) рдореБрдЭреЗ kyt рдХрд╛ рд▓реЙрдЧрд┐рдВрдЧ рдорд┐рд▓рд╛ (рд╕рд╛рде рдореЗрдВ) рдЗрдореЛрдЬреА рдХреА рдкрд╛рдЧрд▓ рд░рд╛рд╢рд┐) рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рджред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ kyt рдХреЗ рд▓рд┐рдП рдПрдХ рдкрддрд▓реЗ, рддреЗрдЬрд╝ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпреВрдирд┐рд╡рд░реНрд╕рд▓ HMR рдФрд░ рдПрдХ рд╕рдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди API рдХреЗ рд╕рд╛рде Next.js-- create-react-app-ssr , рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред

рдПрдХ рдмрд╛рд░ рдЬрдм рд╕рдм рдХреБрдЫ рдХрд╣рд╛ рдФрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛, рддреЛ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореИрдВрдиреЗ рд▓рдЧрднрдЧ рдврд╛рдВрдЪрд╛-рдЕрдЬреНрдЮреЗрдп рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдИ рд╣реИ рдФрд░ рдпрд╣ рдХрд┐ рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рдпрд╣ рд╕реНрддрд░ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рдерд╛ред "рдлреНрд░реЗрдорд╡рд░реНрдХ-рдЕрдЬреНрдЮреЗрдпрд╡рд╛рджреА" рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд░реИрдЬрд╝рд▓ 100% рдПрдВрдЧреБрд▓рд░, рд╡реАрдпреВ, рд░реИрдХреНрд╕, рдкреНрд░реАрдПрдХреНрдЯ, рдЗрдиреНрдлрд░реНрдиреЛ, рд░рд┐рдПрдХреНрдЯ-рдПрдХреНрд╕рдкреА, рдЖрд░рдПрди-рд╡реЗрдм, рд░реАрдЬрд╝рди-рд░рд┐рдПрдХреНрдЯ рдФрд░, _рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореЗрд░реЗ рд▓рд┐рдП_ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЬреЛ рднреА рдкрд╛рдЧрд▓ рд╕рд╛рдорд╛рди рдЖрдЧреЗ рдЖрддрд╛ рд╣реИред рдЖрдИрдПрдордПрдЪрдУ, рдЕрдиреБрдХреВрд▓рди рдХреНрд╖рдорддрд╛ рд░реИрдЬрд╝рд▓ рдФрд░ рдореИрдВрдиреЗ рдЬреЛ рдХреБрдЫ рднреА рджреЗрдЦрд╛ рд╣реИ, рдХреЗ рдмреАрдЪ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рд╣реИред рд░реИрдЬрд╝рд▓ рдХреЗ рд╕рд╛рде, рдЖрдк рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдХрд╛рдВрдЯрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдмреИрдмреЗрд▓-рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо/рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди/рдкреИрд░реЗрд▓рд▓ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╕ рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рдиреЗрдХреНрд╕реНрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд░реИрдЬрд╝рд▓ рдПрдХ рдврд╛рдВрдЪрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╕реАрдЖрд░рдП рдХреЗ рд╡рд┐рдкрд░реАрдд, рд░реИрдЬрд╝рд▓ рдЖрдкрдХреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдлреЛрд░реНрдХ рдХрд┐рдП рдмрд┐рдирд╛ рдмрдврд╝рд╛рдиреЗ рджреЗрддрд╛ рд╣реИред рдореЗрд░реЗ рд╕реАрдЦрдиреЗ, рд╕рд┐рдЦрд╛рдиреЗ, рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рд╡реНрдпрд╡рд╕рд╛рдп рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИред

рд░реИрдЬрд╝рд▓ рдХреЗ рд▓рдЪреАрд▓реЗрдкрди рдФрд░ рдЕрдЬреНрдЮреЗрдпрд╡рд╛рдж рдиреЗ рдореБрдЭреЗ рдФрд░ рдореЗрд░реА рдЯреАрдо рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╣реА рднреБрдЧрддрд╛рди рдХрд░ рджрд┐рдпрд╛ рд╣реИ:

  • рд╣рдордиреЗ razzle.config.js рдореЗрдВ рдХреЛрдб рдХреА 10 рд╕реЗ рдХрдо рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓рдХрд░ рдЕрдкрдиреЗ рдРрдк рдХреЛ рдЖрдВрд╢рд┐рдХ-рдкреНрд░рд╡рд╛рд╣ рд╕реЗ 100% рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред
  • рдмрд┐рдирд╛ рдХреЛрд╢рд┐рд╢ рдХрд┐рдП рднреА, рд░реИрдЬрд╝рд▓ рдПрдХ рд░реАрдЬрд╝рди рд░рд┐рдПрдХреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ (SSR рдпрд╛ SPA) рдХреЛ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рдмрди рдЧрдпрд╛ рд╣реИред

рд░реИрдЬрд╝рд▓ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдХреЗ рд░реВрдк рдореЗрдВред рджреЛ рджрд┐рди рдкрд╣рд▓реЗ, "рд╕реАрдЖрд░рдП рдореЗрдВ рдПрд╕рдПрд╕рдЖрд░ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛" рдХреЛ рд░рд┐рдПрдХреНрдЯ рдХреЛрд░ рдЯреАрдо рдХреЗ рд░реЛрдбрдореИрдк рдкрд░ рд╢реАрд░реНрд╖ ~ 15 рдЯреВрдбреВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рд╕реАрдЖрд░рдП рдореЗрдВ рдПрд╕рдПрд╕рдЖрд░ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд░реИрдЬрд╝рд▓ рдХреЛ рдЕрдм рдореМрдЬреВрдж рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ... рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╢рд╛рдВрдд рд╣реВрдВ_ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рд╣реЛрдиреЗ рддрдХ, рд░реИрдЬрд╝рд▓ рд╕рд░реНрд╡рд░ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдлреНрд░реЗрдорд╡рд░реНрдХ-рдПрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдмрд┐рд▓реНрдб рдЯреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝реЗрдЧрд╛ред

рдмрд╣реБрдд рдЦреВрдм!! рд╢рд╛рдирджрд╛рд░ рдЙрддреНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдк рд▓реЛрдЧреЛрдВ рдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

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

рдПрдХ рд░реИрдЬрд╝рд▓ рдХреЛрдгреАрдп рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП +1ред https://github.com/jaredpalmer/razzle/issues/1109

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