Next.js: рд╕реНрдЯреЗрдЯрд┐рдХ рдЬрдирд░реЗрд╢рди / рдПрд╕рдПрд╕рдЬреА рд╕реБрдзрд╛рд░

рдХреЛ рдирд┐рд░реНрдорд┐рдд 25 рдирд╡ре░ 2019  ┬╖  250рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: vercel/next.js

рд╕рд╛рд░рд╛рдВрд╢

рдкреНрд░рддрд┐-рдкреГрд╖реНрда рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдерд┐рд░ рдкреАрдврд╝реА рдФрд░ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рджреЛрдиреЛрдВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ Next.js рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд╛рдЗрдмреНрд░рд┐рдб рдмрдирдиреЗ рджреЗрдВред

  • рджреЛ рдирдП рдкреНрд░рддрд┐-рдкреГрд╖реНрда рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ

    • getStaticProps - next build рд╕рдордп рдкрд░ рд╕реНрдерд┐рд░ рдкреАрдврд╝реА (рдПрд╕рдПрд╕рдЬреА) рдореЗрдВ рдСрдкреНрдЯ-рдЗрди рдХрд░реЗрдВред

    • getServerSideProps - рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ (SSR) рдореЗрдВ рдСрдкреНрдЯ-рдЗрди рдХрд░реЗрдВ рдЬреЛ рдСрди-рдбрд┐рдорд╛рдВрдб рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИред

  • рдЧрддрд┐рд╢реАрд▓ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╕реНрдереИрддрд┐рдХ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ (рдПрд╕рдПрд╕рдЬреА) рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд╡рд┐рдзрд┐

    • getStaticPaths - рд╕реНрдереИрддрд┐рдХ рдкреАрдврд╝реА (SSG) рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рдПрдВ

рдпрд╣ RFC рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ API рдкрд░рд┐рд╡рд░реНрдзрди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ RFC рдХреЛрдИ рдмрд╣рд┐рд╖реНрдХрд░рдг рдирд╣реАрдВ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред

рдкреГрд╖реНрдарднреВрдорд┐

рд╡реЗрдмрд╕рд╛рдЗрдЯ рдпрд╛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ 2 рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ: рд╕реНрдЯреЗрдЯрд┐рдХ рдЬреЗрдирд░реЗрд╢рди (SSG) рдпрд╛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ (SSR)ред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп Next.js рдЖрдкрдХреЛ рд╣рд╛рдЗрдмреНрд░рд┐рдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░рддрд┐-рдкреГрд╖реНрда рдЪреБрдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Next.js 9 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, getInitialProps рдмрд┐рдирд╛ рдкреЗрдЬ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ .html рдкрд░ next build .html рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддреЗ рд╣реИрдВред

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

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

рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ getInitialProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк SSR рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

Next.js рдХреЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ next export рдХрдорд╛рдВрдб рд╣реИ, рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ SSG рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ Next.js рдХреА рд╣рд╛рдЗрдмреНрд░рд┐рдб рдкреНрд░рдХреГрддрд┐ рдХреЛ рдЦреЛрддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк next export рд╕рд╛рде getInitialProps рддреЛ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИред getInitialProps рдирд┐рд░реНрдорд╛рдг рд╕рдордп (рдЬреЛ рдорд╣рд╛рди рд╣реИ) рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЬрдм рдЖрдк рдХрд╛ рдЙрдкрдпреЛрдЧ next/link рдкреГрд╖реНрдареЛрдВ рдХреЗ рдмреАрдЪ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП getInitialProps рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, next export рдкрд░рд┐рдгрд╛рдоред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд (рд╕реАрдПрдордПрд╕ / рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ) рдХреЛ рд╕реАрдзреЗ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдкрдХрд╛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдбрд╛рдЙрди рд╣реИ, рддреЛ рдкреЗрдЬреЛрдВ рдХреЗ рдмреАрдЪ рдЪрд▓рддреЗ рд╕рдордп рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред

рд╣рдордиреЗ рдПрд╕рдПрд╕рдЬреА рдХреЗ рднрд╛рд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ next export рд╕рд╛рде рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ рдЬреИрд╕реЗ рд╣рд╛рд╢реАрдХреЙрд░реНрдк (рдзрдиреНрдпрд╡рд╛рдж @jescalan) рдХреЗ рд╕рд╛рде рд╕рд╣рдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рджреЛ рдирдП рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдмрд╛рдзрд╛рдУрдВ рдХреА рд╡реНрдпрд╛рдкрдХ рдЬрд╛рдВрдЪ рдХреА рд╣реИ: getStaticProps рдФрд░ getServerSideProps . рд▓реЗрдХрд┐рди рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рднреА рд╣реИ: getStaticPaths ( exportPathMap рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЬреЛ рдкреНрд░рддрд┐ рдкреГрд╖реНрда рд╣реИ)ред

рдЗрди рдирдП рддрд░реАрдХреЛрдВ рдХреЗ getInitialProps рдореЙрдбрд▓ рдкрд░ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдПрд╕рдПрд╕рдЬреА рдмрдирд╛рдо рдПрд╕рдПрд╕рдЖрд░ рдмрдирдиреЗ рдХреЗ рдмреАрдЪ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЕрдВрддрд░ рд╣реИред

  • getStaticProps рдирд┐рд░реНрдорд╛рдг рд╕рдордп (рдЬрдм next build рдЪрд▓ рд░рд╣рд╛ рд╣реЛ) рдкрд░ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреГрд╖реНрда рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ
  • getStaticPaths рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдПрдХ рд╕реВрдЪреА рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
  • getServerSideProps рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдкрд░ рдкреГрд╖реНрда рдХреЛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╡рд░реНрддрдорд╛рди getInitialProps рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рдорд╛рди рд╣реИред

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдХреЗ, рдпрд╣ рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЯреНрд░реЗрдб-рдСрдлрд╝ рдХреЛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпреЗ рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдкреГрд╖реНрда рдШрдЯрдХ рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рд╣реИрдВ рдФрд░ getInitialProps рд╕рдорд╛рди рдиреЗрд╕реНрдЯреЗрдб рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреАрдВред

getStaticProps

getStaticProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреГрд╖реНрда рдирд┐рд░реНрдорд╛рдг рд╕рдордп (рдПрд╕рдПрд╕рдЬреА) рдкрд░ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣ рдирдИ рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рдЙрд╕ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧреА рдЬреЛ next build рд╕рдордп рдкрд░ .html рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

Next.js рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ JSON рдлрд╝рд╛рдЗрд▓ рднреА рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ getStaticProps рдХрд╛ рдкрд░рд┐рдгрд╛рдо next build рд╕рдордп рдкрд░ рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реВрдЯрд┐рдВрдЧ next/link рдпрд╛ next/router , Next.js рдкреЗрдЬ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░реЙрдкреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ JSON рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓рд╛рдПрдЧрд╛ред

рдЧреБрдг props рдХреБрдВрдЬреА рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд▓реМрдЯрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдкреЗрд╢ рдХрд┐рдП рдЬрд╛ рд╕рдХреЗрдВред

// pages/index.js

// getStaticProps is only called server-side
// In theory you could do direct database queries
export async function getStaticProps(context) {
  return {
    // Unlike `getInitialProps` the props are returned under a props key
    // The reasoning behind this is that there's potentially more options
    // that will be introduced in the future.
    // For example to allow you to further control behavior per-page.
    props: {}
  };
}

context рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ:

  • params - рдбрд╛рдпрдиреЗрдорд┐рдХ рд░реВрдЯ рдкрд░ рдкреИрд░рд╛рдореАрдЯрд░ред

getStaticPaths

рдпрд╣ рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП getStaticProps рдЙрдкрдпреЛрдЧ рдкрд░ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИред

getStaticPaths exportPathMap рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐ рдкреГрд╖реНрда рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рдЖрдк рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд╛рд▓реЗ url рдХреА рд╕реВрдЪреА рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ slug рдиреАрдЪреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВред Next.js рдПрдХ getStaticPaths рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдЬреЛ url рдХреА рд╕реВрдЪреА рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ async рд╡рд┐рдзрд┐ рд╣реИ,

// pages/blog/[slug].js

// `getStaticProps` gets a `params` object holding the dynamic parameters
// For `/blog/hello-world` it would look like `{ slug: 'hello-world }`
export async function getStaticProps({ params }) {
  return {
    props: {}
  };
}

// `getStaticPaths` allows the user to return a list of parameters to
// render to HTML at build time.
export async function getStaticPaths() {
  return {
    paths: [
      // This renders /blog/hello-world to HTML at build time
      { params: { slug: "hello-world" } }
    ]
  };
}

рдореИрджрд╛рди рдЫреЛрдбрд╝рдирд╛

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

рд╕реЗрд╡рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдЯреАрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛:

  • рдЖрд╡рдХ рдЕрдиреБрд░реЛрдз

    • Next.js рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкрде рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рдЙрддреНрдкрдиреНрди рд╣реБрдЖ рдерд╛

    • рдЕрдЧрд░ рдкрде рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛



      • рд╕реАрдзреЗ рдкрд░реЛрд╕реЗрдВ



    • рдпрджрд┐ рдкрде рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реБрдЖ рдерд╛



      • рдлрд╝реЙрд▓рдмреИрдХ рдкрд░реЛрд╕реЗрдВ


      • Next.js рдкреГрд╖реНрда рдХреЛ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ (рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде) рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЙрддреНрдкрдиреНрди рдкреГрд╖реНрдареЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ


      • рдЙрд╕реА рдкрде рдХреЗ рдмрд╛рдж рдХреЗ рдЕрдиреБрд░реЛрдз рдЙрддреНрдкрдиреНрди рдкреГрд╖реНрда рдХреА рд╕реЗрд╡рд╛ рдХрд░реЗрдВрдЧреЗ


      • рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ рддреЗрдЬрд╝ рдЕрдиреБрднрд╡ рд╣реЛ рдФрд░ рддреЗрдЬрд╝ рдмрд┐рд▓реНрдб рдФрд░ рд╕реНрдерд┐рд░-рдкреАрдврд╝реА рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП рд╕рд░реНрд╡рд░-рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕реЗ рдХрднреА рднреА рдзреАрдорд╛ TTFB рди рд╣реЛ



рдпрджрд┐ рдЖрдк рдРрд╕реЗ рдкрде рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реБрдП рдереЗ, рддреЛ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо 404 рд╣реЛрдЧрд╛ рдЬреЛ fallback: false рд╕реЗ getStaticPaths рд▓реМрдЯрд╛рдХрд░ рднреА рд╕рдВрднрд╡ рд╣реИред

// `getStaticPaths` allows the user to return a list of parameters to
// render to HTML at build time.
export async function getStaticPaths() {
  return {
    // Opt-out of the described fallback behavior
    fallback: false,
    paths: [
      // This renders /blog/hello-world to HTML at build time
      { params: { slug: "hello-world" } }
    ]
  };
}

getServerSideProps

getServerSideProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдкреГрд╖реНрда рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдПрд╕рдПрд╕рдЬреА) рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕рд░реНрд╡рд░ (рдПрд╕рдПрд╕рдЖрд░) рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдкрд░ рдСрди-рдбрд┐рдорд╛рдВрдб рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред

Next.js рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЛ рднреА рдЙрдЬрд╛рдЧрд░ рдХрд░реЗрдЧрд╛ рдЬреЛ getServerSideProps рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реВрдЯрд┐рдВрдЧ next/link рдпрд╛ next/router , рддреЛ Next.js JSON рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдПрдХреНрд╕рдкреЛрдЬрд╝реНрдб рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЛ рд▓рд╛рдПрдЧрд╛ рдЬреЛ рдкреЗрдЬ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рд╡рд┐рдзрд┐ рд╡рд░реНрддрдорд╛рди getInitialProps , рдореБрдЦреНрдп рдЕрдВрддрд░ getServerSideProps рдХреЗ рд╕рд╛рде рд╣рдореЗрд╢рд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдмрдЬрд╛рдп рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реВрдЯрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдпрд╛ рддреЛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкрд░ рдпрд╛ API рдлрд╝реЗрдЪ рдкрд░ред

рдЗрд╕реА рддрд░рд╣ getStaticProps рд▓рд┐рдП рдЧреБрдг props рдХреБрдВрдЬреА рдХреЗ рддрд╣рдд рд▓реМрдЯрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

// pages/index.js

// getServerSideProps is only called server-side
// In theory you could do direct database queries
export async function getServerSideProps(context) {
  return {
    // Unlike `getInitialProps` the props are returned under a props key
    // The reasoning behind this is that there's potentially more options
    // that will be introduced in the future.
    // For example to allow you to further control behavior per-page.
    props: {}
  };
}

context рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ:

  • params - рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧ рдкрд░ рдкреИрд░рд╛рдореАрдЯрд░
  • req - HTTP рдЕрдиреБрд░реЛрдз рд╡рд╕реНрддреБ
  • res - HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╕реНрддреБ
  • query - рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)

@timneutkens , @Timer , @ijjk , @lfades рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рддред @rauchg , @jescalan рдФрд░ рдЕрдиреНрдп рдХреЗ рд╕рд╛рде рд╕рд╣рдпреЛрдЧ рдХрд┐рдпрд╛

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

рдиреЗрдХреНрд╕реНрдЯ-рдЬреЗрди рд╕реНрдЯреЗрдЯрд┐рдХ рд╕рд╛рдЗрдЯ рдЬреЗрдирд░реЗрд╢рди (SSG) рд╕рдкреЛрд░реНрдЯ рдиреЗрдХреНрд╕реНрдЯ.js 9.3 рдореЗрдВ рд╕реНрдЯреЗрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ!

рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ "рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЛрдб" рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди, рдпрд╛ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд░реЗрдВрдбрд░ рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдФрд░ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдХреЛ рдСрди-рдбрд┐рдорд╛рдВрдб рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред

рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рдбреЙрдХреНрд╕ рдореЗрдВ рдХреВрджреЗрдВ!

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

export async function getStaticProps(context) {
  return {
    // Unlike `getInitialProps` the props are returned under a props key
    // The reasoning behind this is that there's potentially more options
    // that will be introduced in the future.
    // For example to allow you to further control behavior per-page.
    props: {}
  };
}

рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдХрд┐ рдХрд┐рд╕ рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рдореЗрдВ props рдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореБрдЭреЗ рдЗрди-рд▓рд╛рдЗрди рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг "рдкреНрд░рддрд┐ рдкреГрд╖реНрда рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдФрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП" рдереЛрдбрд╝рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рдорд┐рд▓рд╛ред

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

рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдХрд┐ рдХрд┐рд╕ рдкрд░рд┐рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рдореЗрдВ props рднреАрддрд░ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореБрдЭреЗ рдЗрди-рд▓рд╛рдЗрди рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг "рдкреНрд░рддрд┐ рдкреГрд╖реНрда рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдФрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП" рдереЛрдбрд╝рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рдорд┐рд▓рд╛ред

рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкреНрд░реВрдлрд┐рдВрдЧ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рд╣рдореЗрдВ рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗред

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

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

рдпрд╣ рд╡рд╛рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд░рд╣рд╛ рд╣реИ! рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░!

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рддреИрдирд╛рддреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рд╣реИ ...

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

рдлрд┐рд░, рдореИрдВ рд╕реАрдПрдордПрд╕ рдореЗрдВ рдХреБрдЫ рд╕рд╛рдордЧреНрд░реА рдмрджрд▓рддрд╛ рд╣реВрдВ рдФрд░ рдХреЗрд╡рд▓ рдПрд╕рдПрд╕рдЬреА рдкреГрд╖реНрдареЛрдВ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред

рддреБрд░рдВрдд рдЕрд▓рд╛рд░реНрдо рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдЧрд░ рдореИрдВ рдмрд┐рд▓реНрдб рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рджреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИрдВ:

1) рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдм рдХреБрдЫ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдХреЛрдИ рдХреЛрдб рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ рдФрд░ рдмреНрд▓реИрдмреНрд▓рд╛ред
2) рдореИрдВ рдЗрд╕реЗ --force рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдЕрдм "рд╕рдм рдХреБрдЫ" рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрд╕рдПрд╕рдЬреА рдкреГрд╖реНрдареЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

_рдпреЗ рдХреЗрд╡рд▓ рдкрд░рд┐рдХрд▓реНрдкрдирд╛рдПрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрд╡рдпрдВ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ - рд╡реЗ рдиреЗрдХреНрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рддрдиреЗ рдЬрд╛рдЧрд░реВрдХ рд╣реИрдВ_

рдпрд╣ рд╢рд╛рдпрдж рдХрд┐рд╕реА рдЕрдиреНрдп рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕рдорд╛рдзрд╛рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ред

рдЗрд╕рдХреЗ рдмрд╛рдж рдореЗрдВ рд╣реА .next/cache ... рдпрд╣ рдЙрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреИрд╕реЗ рдЪрд▓реЗрдЧрд╛?

@joltmode рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯ рдЬрдирд░реЗрдЯрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИред .next/cache рдЕрднреА рдкрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рдмреАрдЪ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ (рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ https://zeit.co/blog/serverless-pre-rendering) рдХреЗ рд╕рд╛рде рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП getInitialProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╣рдорд╛рд░реЗ рд╕реАрдбреАрдПрди рдкрд░ рдХреИрд╢ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрднреА рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдк getServerProps рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдорд╛рд▓ рд╣реИ, рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдЧреНрд░рд╛рд╣рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдиреЗрдХреНрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЛ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реИ getStaticProps рдФрд░ getServerProps рдХрд╛ рдирд╛рдордХрд░рдг, рдпрджрд┐ рд╡реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ {props} рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ *Props рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛? рд╢рд╛рдпрдж getStaticConfiguration, getStaticSetup, getStaticOptions рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдВрдЧреЗ?

@kibs рд╡рд╛рдкрд╕реА рдорд╛рди рд╣рдореЗрд╢рд╛ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдВрдЧреЗ рдХрд┐ рдкреНрд░реЛрдк рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдирд╛рдордХрд░рдг рдареАрдХ рд╣реИ рдЗрдореЛред

рдпрд╣ рдмрд╕ рдХрдорд╛рд▓ рд╣реИ! рдпрд╣ рд╣рд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдФрд░ рдЬрд░реВрд░рдд рдХреЛ рд╣рд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдирд┐рдЬреА рдФрд░ рдкреЗрд╢реЗрд╡рд░ рджреЛрдиреЛрдВ рд╡реЗрдм рдРрдк рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕реЛрдЪ рд╕рдХрддрд╛ рдерд╛ред рдЖрдкрдиреЗ рдореБрдЭреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд╣рд╛рдЗрдмреНрд░рд┐рдб рд╕рд╛рдЗрдЯ рдЬрдирд░реЗрдЯрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрд╛, рдзрдиреНрдпрд╡рд╛рдж!

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

рдЗрд╕реЗ рдЖрдЬрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛!

рдмрд╕ рдПрдХ рд╕рд╛рдЗрдб рдиреЛрдЯ: рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ getServerProps() рдореЗрдВ context рдкрд░рдо рдирд╣реАрдВ рд╣реИред

рдмрд╕ рдПрдХ рд╕рд╛рдЗрдб рдиреЛрдЯ: рдЖрдЦрд┐рд░реА рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ getServerProps() рдореЗрдВ рдПрдХ рд╕рдВрджрд░реНрдн рдкрд░рдо рдЧреБрдо рд╣реИред

рдлрд┐рдХреНрд╕реНрдб!

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ! рдореБрдЭреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ getStaticProps , getStaticPaths рдФрд░ getServerProps рдкреГрд╖реНрда рдШрдЯрдХ рдкрд░ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ (рдЬреИрд╕реЗ getInitialProps рдЗрд╕ рд╕рдордп) рд╣реЛрдЧрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЯрд╛рдЗрдк/рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛред

const Page: NextPage<Props> = (props) => ...

// Explicit types needed here
export const getStaticPaths: NextGetStaticPaths<Params> = () => ...
export const getStaticProps: NextGetStaticProps<Props, Params> = (context) => ...
export const getServerProps: NextGetServerProps<Props> = (context) => ...

export default Page

// vs.

const Page: NextPage<Props, Params> = (props) => ...

// Static method types come from NextPage<Props, Params>
Page.getStaticPaths = () => ...
Page.getStaticProps = (context) => ...
Page.getServerProps = (context) => ..

export default Page

@herrstucki рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреЗрдбрд╝ рдХреЛ рд╣рд┐рд▓рд╛рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдкрдврд╝реЗрдВ: рдЕрд╕рдВрднрд╡ рдХреЗ рдХрд░реАрдм)ред рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрдб рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

@timneutkens рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ ... рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХреНрдпрд╛ рдПрдХ рдЕрд▓рдЧ рдлрд╛рдЗрд▓ рдФрд░ рднреА рдЬреНрдпрд╛рджрд╛ рдорд╛рдпрдиреЗ рдирд╣реАрдВ

// This should all be removed in client-side code тАж
import {fetchQuery, queryTag} from 'big-data-fetching-lib';
const query = queryTag`...`
export const getStaticProps = async () => ({ props: await fetchQuery(query) })

// Only this should be included client-side
export default (props) => ...

@herrstucki рд╣рдо рдордЬрд╝рдмреВрддреА рд╕реЗ рдкреЗрдбрд╝ рдХреЛ рд╣рд┐рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рднреА рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рд░рдЦрдиреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред

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

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

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

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

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

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

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

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЧрд▓рдд рд╕рдордЭ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реАрдбреАрдПрди рдкрд░ рдкреВрд░реНрдг рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╕реАрдбреАрдПрди рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ getInitialProps рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред

@timneutkens рдореИрдВрдиреЗ рдХреИрдирд░реА рдХреЗ рд╕рд╛рде рдЦреЗрд▓рд╛, рдХреБрдЫ babel-plugin-preval рдХреЛрдб рдХреЛ getStaticProps рдкрд░ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рдореБрдЭреЗ fs рд╕рд╛рде рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред

рдореИрдВ рдЕрдкрдиреА ./pages/blog/ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА .md рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЙрдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд╕рднреА рдкреЛрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдмреНрд▓реЙрдЧ рдЗрдВрдбреЗрдХреНрд╕ рдкреЗрдЬ рдмрдирд╛ рд╕рдХреВрдВ

import React from 'react';
import Link from 'next/link';
import fs from 'fs-extra';

const Index = ({ posts }) => (
  <div>
    Hello World. <Thing msg="hello" />
    <Link href="/thing">
      <a>About</a>
    </Link>
    {posts.map(p => (
      <div key={p.title}>{p.title}</div>
    ))}
  </div>
);

Index.getStaticProps = async () => {
  const items = await fs.readdir('./pages/blog');
  items.forEach(path => /* .... do some stuff ... */ )
  return { props: { posts: items } };
};

export default Index;

рдпрд╣ рдХреЛрдб рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ:

Module not found: Can't resolve 'fs' in '/Users/jared/Downloads/nextjs-typescript-template/node_modules/fs-extra/lib'

рд░реИрдЬрд╝рд▓ рд╕реЗ рдЖрдИрдЖрдИрдЖрд░рд╕реА, рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рд╡реЗрдмрдкреИрдХ рдХреЗ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реНрдЯрдмреНрд╕ (рдпрд╛ рдЗрд╕рдХреЗ рдЕрднрд╛рд╡) рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд┐рдЧрд░ рдореЗрдВ рдЬреЛрдбрд╝рдХрд░ рд░реИрдЬрд╝рд▓ рдХреЗ рд╕рд╛рде рддрдп рдХрд┐рдпрд╛ рдерд╛ред

node: {
  fs: "empty";
}

рдореИрдВрдиреЗ рдЗрд╕реЗ next.config.js рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рддреНрд░реБрдЯрд┐ рдХреЛ рджреВрд░ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ fs / fs-extra рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдкрде рдирд╣реАрдВ (рдореЗрд░реЗ рд▓рд┐рдП рдЕрд╕реНрдкрд╖реНрдЯ)ред рдЙрд╕ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

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

js Index.getStaticProps = async () => { const fs = require('fs-extra'); // only require when needed at SSG const props = await fs.readdir('./pages/blog'); return { props: { posts } }; };

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЧрд▓рдд рд╕рдордЭ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реАрдбреАрдПрди рдкрд░ рдкреВрд░реНрдг рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╕реАрдбреАрдПрди рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ getInitialProps рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред

рдЖрд╣, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рддреБрдореНрд╣рд╛рд░рд╛ рдорддрд▓рдм рд╣реИред рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдкрд╣рд▓реА рдПрд╕рдПрд╕рдЖрд░ рдкреАрдврд╝реА рдкрд░ getServerProps рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдмрдирд╛рдПрдЧрд╛, рдПрдХ рд╕рд╛рдордЧреНрд░реА рдкрддрд╛ рдпреЛрдЧреНрдп рд╣реИрд╢ рдореЗрдВ рд╢рд╛рдпрдж рдпреВрдЖрд░рдПрд▓ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕реАрдбреАрдПрди рдкрд░ рдХреИрд╢ рдХрд░ рд╕рдХреЗрдВ? рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд╣рд╛ рдЧрдпрд╛ рдХреИрд╢ рдЧреИрд░ рдиреЗрдХреНрд╕реНрдЯ рдРрдкреНрд╕ (рдПрдВрдбреНрд░реЙрдЗрдб/рдЖрдИрдУрдПрд╕) рдФрд░ рдиреЗрдХреНрд╕реНрдЯ рдРрдкреНрд╕ рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдПрдХ рдмрд╛рд╣рд░реА рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде, рдХреИрд╢ рдирд┐рдпрдВрддреНрд░рдг рдирд┐рд░реНрджреЗрд╢ рдЕрдкрд╕реНрдЯреНрд░реАрдо рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЪреВрдВрдХрд┐ рдЕрдЧрд▓рд╛ рдбреЗрдЯрд╛ рдХреА рд╕реЗрд╡рд╛ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдЧреНрд░рд╣рдг рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрддреНрдкрдиреНрди рдбреЗрдЯрд╛ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдпрд╛ рдкреНрд░реЙрдкреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@jaredpalmer рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ https://github.com/zeit/next.js/issues/9524#issuecomment -558628066 ( рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЯреНрд░реА-рд╢рдХреЗрдмрд┐рд▓рд┐рдЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рдЪрд┐рдВрддрд╛ рд╕рд╣рд┐рдд) рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╛рдЗрд▓ рдмрдирд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдВрдбрд▓ рдХреЛрдб? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

pages/
    foo.js
    foo.data.js (<- exports getStaticProps etc.)

or:

pages/
    foo.js
pages-data/
    foo.js (<- exports getStaticProps etc.)

@jaredpalmer рдкреЗрдбрд╝ рд╣рд┐рд▓рд╛рдирд╛ рдЕрднреА рддрдХ рдХреИрдирд░реА рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЖрдк рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред Next.js рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдПрдХ рдкрд░рдо рдЖрдирдВрдж рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рд╣реИ, рдмрд╕ рд╣рд░ рдлреАрдЪрд░ рд░рд┐рд▓реАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдореЗрдВ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдбрдмреЗрд╕ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ _reduce_ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИред

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

" getStaticPaths рдПрдХ exportPathMap рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐ рдкреГрд╖реНрда рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред"

рдХреБрдЫ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдЬрд╛рдирдирд╛ рдпрд╛ рддреЛ рдЕрд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдпрд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдВрдЧреЗ:

  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдкреГрд╖реНрда
  • рдЙрддреНрдкрд╛рдж рдкреГрд╖реНрда (рддреЗрдЬреА рд╕реЗ рдмрджрд▓рддреА рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рд╡рд╛рд▓реА рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП)
  • рдмрд┐рдХреНрд░реА рдЖрджреЗрд╢ рд╡рд┐рд╡рд░рдг рдкреГрд╖реНрда

рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рд╕рдВрднрд╡рддрдГ /entity-name/entity-id рдФрд░ рдиреЗрдХреНрд╕реНрдЯ рдХреЗ рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк router.push('/customers/[customerId]', '/customers/baer') рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрднреА рднреА рдПрдХ рдкрдХрдбрд╝ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд░реНрд╡, рдиреЗрдЯрд▓рд┐рдлрд╛рдИ, рдПрдирдЬреАрдЖрдИрдПрдирдПрдХреНрд╕, рдЖрджрд┐ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рд╕реЗрд╡рд╛ рджреЗрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреЗрдЬ-рд░реАрдлреНрд░реЗрд╢ рдкрд░ 404 рди рдорд┐рд▓реЗ рдФрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрднреА рднреА exportPathMap ред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рд▓рдЧрднрдЧ рдПрдХ рдХреЛрдбрдмреЗрд╕ рд╕реЗ, рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ:

const buildServeConfig = redirects => {
  const config = {
    public: `dist`,
    trailingSlash: true,
    rewrites: redirects
  };

  const outputPath = `${__dirname}/serve.json`;

  fs.writeFile(outputPath, JSON.stringify(config, null, 2), err => {
    if (err) {
      throw err;
    }
    // eslint-disable-next-line no-console
    console.log(`Generated: ${outputPath}`);
  });
};

...

exportPathMap: function(defaultPathMap, { dev, outDir }) {
  const redirects = Object.entries(defaultPathMap)
    // No need to create a redirect rule for `/dirname/` or `/dirname/index.html`
    .filter(([url]) => url !== `/` && url !== `/index`)
    .map(([url, { page }]) => ({
      // Replaces /[customerId] with /:customerId
      source: url.replace(/]/g, ``).replace(/\[/g, `:`),
      destination: `${page}/index.html`
    }));

  // By default, the routes are sorted such that a route like `/order/:orderId`
  // comes before `/order/new`. Since the `:orderId` portion of `/order/:orderId` 
  // is a wildcard, the route `/order/new` will be a match and consider `new` 
  // as a value for `:orderId`. To get past this, we sort the redirects by the 
  // number of parameters in ascending order.
  const sortedRedirects = [...redirects].sort(
    (currentRedirect, nextRedirect) =>
      currentRedirect.source.split(`:`).length >
      nextRedirect.source.split(`:`).length
  );

  buildServeConfig(sortedRedirects);

  return defaultPathMap;
}

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЖрд░рдПрдлрд╕реА рдХрд┐рд╕реА рднреА рдПрдкреАрдЖрдИ рдХреЛ рд╣рдЯрд╛ рдпрд╛ рд╣рдЯрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдпрд╣ рднреА рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдмрд┐рд▓реНрдб рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдкрд╛рд░ рдХрд░рдХреЗ рдЗрди рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЛ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рднрд▓реЗ рд╣реА рдЗрд╕реЗ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдЪреНрдЫрд╛ ecape рд╣реИрдЪ рд╣реИред рд▓реЗрдХрд┐рди, рдпрд╣ " getStaticPaths рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреВрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред"

рдлрд┐рд░ рд╕реЗ, рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рдЖрдкрдХреА рд╡рд┐рдЪрд╛рд░рд╢реАрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

рдХреНрдпрд╛ getStaticProps / getStaticPaths рдФрд░ getServerProps рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рд╣реИрдВ? рдпрд╛рдиреА рдХреНрдпрд╛ рдПрдХ рднрд╛рдЧ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд░реЗрдВрдбрд░ рдХрд░рдирд╛ рдФрд░ рдПрдХ рднрд╛рдЧ рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛?

рд╣рд╛рдБ рд╡реЗ рдПрдХ рд╕реНрдерд┐рд░ рдкреАрдврд╝реА рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкреНрд░рддрд┐рдкрд╛рджрди рд╣реИред

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдиреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░реЗрдВ, рдпрд╣ рдПрдХ рдмрдбрд╝реА рдЪреАрдЬрд╝ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ Gatsby рд╕реЗ рдпрд╛рдж рдЖрддреА рд╣реИ:

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореЛрдиреЛрд▓рд┐рдерд┐рдХ (100 рдХреЗрдмреАрдПрд╕) рдЬреЗрдПрд╕рдУрдПрди рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ рдЬреЛ рдХрднреА рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВред Gatsby рдореЗрдВ рд╣рдордиреЗ JSON рдлрд╝рд╛рдЗрд▓ рдХреЛ GraphQL рд╕реНрдХреАрдорд╛ рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдФрд░ рдЙрд╕рдХреЗ рд╡рд┐рд░реБрджреНрдз рдкреВрдЫрддрд╛рдЫ рдХреА, рдХреЗрд╡рд▓ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╣рдерд┐рдпрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╣рдореЗрдВ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкреГрд╖реНрда рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдиреЗрдХреНрд╕реНрдЯ рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди/рд╕рд╛рдл рддрд░реАрдХрд╛ import monolith from './monolith.json' , рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрдкреВрд░реНрдг JSON рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдпрд╣ RFC 100% рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ Gatsby рдХреЗ рдЪрдордХрдиреЗ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ Gatsby рдХреЗ рд╕рд╛рде рдЕрдЧрд▓реЗ рдПрдХ рдХрджрдо рдХреЛ рдХрд░реАрдм рд▓рд╛рддрд╛ рд╣реИ (рдЬрд╛рд╣рд┐рд░ рд╣реИ, Gatsby рд░рдирдЯрд╛рдЗрдо SSR рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреЗрд╡рд▓ рд╕реНрдерд┐рд░ рдмрд┐рд▓реНрдбрдЯрд╛рдЗрдо рд░реЗрдВрдбрд░рд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ)

@timneutkens , RFC рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдореЗрд░реЗ рдкрд╛рд╕ Next.js рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ @rauchg рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХреА рд╣реИред

Next.js рдмрд╣реБрдд рд╣реА рд╕рд╣рдЬ DX рдФрд░ рдХреБрдЫ рдЙрдЪрд┐рдд рдЪреВрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдЯреАрд╡реА рдРрдк рдХреЗ рд▓рд┐рдП Next.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реВрдВред

рд╕реНрдорд╛рд░реНрдЯ рдЯреАрд╡реА рдРрдк рд▓рдЧрднрдЧ рдХреНрд▓рд╛рд╕рд┐рдХ рд╡реЗрдм рдРрдк рд╣реИрдВ рдЬреЛ рдЯреАрд╡реА рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ:

  1. рдРрдк рдХреЛ рдПрдХ рдмрдВрдбрд▓ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рд╢реИрд▓рд┐рдпрд╛рдБ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЪрд┐рддреНрд░, _index.html_, рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдФрд░ рдЯреАрд╡реА рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ред
  2. рдмрдВрдбрд▓ рдХреЛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдРрдк рд╕реНрдЯреЛрд░ рдкрд░ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕рдмрдорд┐рдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  3. рдлрд┐рд░ рдмрдВрдбрд▓ рдХреЛ рд╕реНрдЯреЛрд░ рд╕реЗ рдРрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдмрдВрдбрд▓ рдХреЛ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЯреАрд╡реА рдбрд┐рд╡рд╛рдЗрд╕ рджреНрд╡рд╛рд░рд╛ рд╣реА рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреЛрдИ SSR рд╡рд┐рдХрд▓реНрдк рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ (рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП Node.js рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рд╛рдордиреЗ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдРрдк рд╣реА рдЧрддрд┐рд╢реАрд▓ рд╣реИ (рдХрд╣рддреЗ рд╣реИрдВ, рдиреЗрдЯрдлреНрд▓рд┐рдХреНрд╕)ред

рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдПрд╕рдкреАрдП рдЪрд▓рд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЬреЛ рдПрдХ рд╕реНрдерд┐рд░ рд╡реЗрдм рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ getServerProps (рдпрд╛ getInitialProps ) рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ SSR рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред рд▓реЗрдХрд┐рди рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдбрд╛рдпрдиреЗрдорд┐рдХ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд░реВрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЗрд╕ рдЖрд░рдПрдлрд╕реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрднреА рддрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред @timneutkens , рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХреЛ рдХреЗрд╡рд▓ Next.js рдореЗрдВ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╕реБрдЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдФрд░ рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ Next.js рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ? рдзрдиреНрдпрд╡рд╛рдж!

рдкреАрдПрд╕ рдореИрдВ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрджреНрджрд╛ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдЕрд▓рдЧ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

@grushetsky рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрд░рдПрдлрд╕реА рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд░рд╣реА рдмрд╛рддреЛрдВ рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдЕрд▓рдЧ рдкреНрд░рд╢реНрди рд╣реИ

@timneutkens рдЗрд╕ рдЖрд░рдПрдлрд╕реА рдХрд╛ рд╡рд╛рджрд╛ рдЙрди рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдиреЗрдХреНрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдкрд░ рдЙрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛! рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, getInitialProps рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реЛрдЧрд╛, рд╣реИ рдирд╛?

рд╕рд╣реА @outdooricon -- getInitialProps рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрдирд╛ рд░рд╣реЗрдЧрд╛ред

рдЖрд░рдПрдлрд╕реА рдХреЗ рдЕрдиреБрд╕рд╛рд░:

рдпрд╣ RFC рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ API рдкрд░рд┐рд╡рд░реНрдзрди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ RFC рдХреЛрдИ рдмрд╣рд┐рд╖реНрдХрд░рдг рдирд╣реАрдВ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред

рдмрдврд╝рд┐рдпрд╛ RFC, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрддрд┐ рдЙрддреНрд╕рд╛рд╣рд┐рдд!

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

рдЕрдЧрд░ рдореИрдВ getInitialProps рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдерд┐рд░ рдФрд░ рдПрд╕рд┐рдВрдХреНрд╕ рд╣реИ, рддреЛ рдЕрдЧрд▓реА рдмрд╛рд░ рдШрдЯрдХ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рд╡рд╣рд╛рдВ рдмрд╛рд╣рд░реА рдХреИрд╢ рдореЗрдВ рдбрд╛рд▓рдиреЗ рджреЗрддрд╛ рд╣реИред рдпрд╣ getServerProps рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдШрдЯрдХ рдЬреАрд╡рдирдЪрдХреНрд░ рдореЗрдВ рдХреИрд╢ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рд░реЗрдВрдбрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдбреЗрдЯрд╛ рдЕрднреА рддрдХ рдХреИрд╢ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ , рднрд▓реЗ рд╣реА рд╡рд╣ рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛ?

рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдкреВрдЫреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ getStaticProps рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдореИрдВ

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд╣реАрдВ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдЬрдм рд╕рд╛рдордЧреНрд░реА рдХреИрд╢ рдХреА рдЬрд╛рддреА рд╣реИ рддреЛ рд╣рдо рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдбреАрдмреА рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдирдпрд╛ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирдпрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ! рдмрдврд╝рд┐рдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡, рдпрд╣ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ exportPathMaps рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд╕реБрдзрд╛рд░ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рд╢рдВрд╕рдиреАрдп рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА, рдореИрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ рд░реВрдЯ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рдкрд╛рдПрдВрдЧреЗред

рдХреНрдпрд╛ i18n рдкреНрд░реАрдлрд┐рдХреНрд╕реНрдб рд░реВрдЯреНрд╕ рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИ? рдореЗрд░реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рджреЗрд╢-рд▓реИрдВрдЧ рдЙрдкрд╕рд░реНрдЧреЛрдВ рдФрд░ рдпреВрдЖрд░рдПрд▓ рд╡рд╛рд▓реЗ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдХреБрдЫ рд╣рдЬрд╛рд░реЛрдВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

/nl/brillen
/gb/glasses
/es/gafas
...

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ getStaticPaths рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддрдм рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ рдЬрдм url рдХреЗ рд▓рд┐рдП рдЙрдкрд╕рд░реНрдЧ рд╕рд░реНрд╡рд╡рд┐рджрд┐рдд рд╣реЛ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИ ( /blog/[id].js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ getStaticPaths рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ рдпрджрд┐ рдЗрд╕реЗ рд░реВрдЯ рд╕реНрддрд░ рдкрд░ рдкрде рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рджреЛрдиреЛрдВ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдЙрдкрд╕рд░реНрдЧ (рджреЗрд╢-рд▓реИрдВрдЧ) рдФрд░ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкрде рдХреЗ рд╕рд╛рде?

@reaktivo pages/[lang]/blog/[id].js -> getStaticPaths рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА url рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

@timneutkens рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдЬрдм рдпрд╣ рдЙрдкрд▓рдмреНрдз/рдкрд░реАрдХреНрд╖рдг рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛?

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рд╣рдо рдИрдЯреАрдП рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдорд╛рдзрд╛рди рд╕рд╣реА рд╣реИ, рдЙрддреНрдкрд╛рджрди рдРрдкреНрд╕ рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рд╕реБрдзрд╛рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореБрдЭреЗ рдореЗрд░реЗ "рдЬреЛ рдмрдирд╛рдП рдирд╣реАрдВ рд░рдЦрд╛" рдлреАрдиреЛрдорд┐рдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрд╕рдПрд╕рдЬреА рдЬреЛ рдореЗрд░реЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ) рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджреЗрдЧрд╛ред Next.js рдХреЛ рдЗрд╕ рд▓рд╛рдкрддрд╛ рднрд╛рдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП рджреЗрдЦрдХрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛!

рдореИрдВ рдПрдХ рд╕рдВрджреЗрд╣ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╕реАрдПрдордПрд╕ рдЬреИрд╕реЗ рд╡рд░реНрдбрдкреНрд░реЗрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдПред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, getStaticPaths рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдореИрдВ рд╕рднреА рдкреЛрд╕реНрдЯ рд▓рд╛рдКрдВрдЧрд╛ рдФрд░ рдПрдХ рд╕реВрдЪреА рдкрд╛рд╕ рдХрд░реВрдВрдЧрд╛ рдЬреИрд╕реЗ:

export async function getStaticPaths () {
  return [
┬а┬а  // This renders / blog / hello-world to HTML at build time
    {params: {slug: "hello-world"}}
  ];
}

рд╕рд╛рдордЧреНрд░реА рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдкреЛрд╕реНрдЯ рдХреЗ рд╕реНрд▓рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ getStaticProps рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ npm рдмрд┐рд▓реНрдб рдореЗрдВ рд╣реЛрдЧрд╛ред
рдореЗрд░рд╛ рдкреНрд░рд╢реНрди рдЙрди рдирдИ рдкреЛрд╕реНрдЯреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬреЛ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдЬреЛрдбрд╝реА рдЬрд╛рдПрдВрдЧреАред
рдХреНрдпрд╛ рдЗрд╕ рдирдИ рдкреЛрд╕реНрдЯ рдХреЛ рд╕реНрд▓рдЧ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП getStaticProps рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?
рдХреНрдпрд╛ рдЗрд╕ рдирдИ рдкреЛрд╕реНрдЯ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдмрд┐рд▓реНрдб рдХреА рддрд░рд╣ рдПрдХ .html рдлрд╝рд╛рдЗрд▓ рд╣реЛрдЧреА?
рдореБрдЭреЗ рдиреЗрдХреНрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдХреБрдЫ рднреА рд╕реАрдзреЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд░реНрдерди рдореБрдЭреЗ рдРрд╕рд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реИ рдЬреЛ рдореЗрд░реЗ рдкреНрд░рд╢реНрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реЛред

рдЖрдк рдпрд╣рд╛рдВ рдЬреЛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рд╡рд╣ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмреАрдЪ, рдореИрдВ webhooks рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ JAMSTACK рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП nextJS рдмрдирд╛рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВред

рдЕрдЧрд░ рдореБрдЭреЗ рдЗрдирд┐рд╢рд┐рдпрд▓рдкреНрд░реЙрдкреНрд╕ рдорд┐рд▓рддрд╛ рд╣реИ рддреЛ рдореИрдВ рд╕рд░реНрд╡рд░-рд░реЗрдВрдбрд░ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред
рдЕрдЧрд░ рдореИрдВ рдирд╣реАрдВ рдХрд░рддрд╛, рддреЛ рдореИрдВ рд╕рд┐рд░реНрдл CDNized рд╣реВрдВ, рд▓реЗрдХрд┐рди рдкреНрд░реА-рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рд╣реИ? рдФрд░ рдкреГрд╖реНрда рддрдм рддрдХ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрд┐рдирд╛ рд░рд╣реЗрдЧрд╛ рдЬрдм рддрдХ XHR рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрдпрд╛ (рдЕрд▓рд╡рд┐рджрд╛ SEO)

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдиреЗрдХреНрд╕реНрдЯрдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рдЬрд╛рдорд╕реНрдЯреИрдХ рдХрд╛ рдХреЛрдИ рдЪрд▓ рд░рд╣рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдФрд░ рд╣рдо рдиреЗрдЯрд▓рд┐рдлрд╛рдИ рдкрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдзрдиреНрдпрд╡рд╛рдж,
рдПрдВрдбреНрд░рд┐рдпрд╛рд╕

рдЕрд░реЗ @ScreamZ - рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯ рдХреЛ nextjs рдХреЗ рд╕рд╛рде рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред рд╣рдо рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП next export рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ nextjs рд╕рд╛рдЗрдЯ рдХреЛ рд╕реНрдерд┐рд░ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА getInitialProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реВрдЯ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред getStaticProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде, рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ -- getStaticProps рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╕рднреА рдбреЗрдЯрд╛ рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рдПрдХ рдмрд╛рд░ рдлрд╝реЗрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд▓рд╛рдЗрд╡ рд╕рд╛рдЗрдЯ рдЬрдм рддрдХ рдЖрдк рдлрд┐рд░ рд╕реЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░рддреЗред рдпрд╣ рдбреЗрдЯрд╛-рд╕рдВрдЪрд╛рд▓рд┐рдд рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯреЛрдВ рдХрд╛ рдХреНрд▓рд╛рд╕рд┐рдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╣реИ, рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЛ рд╡реЗрдмрд╣реБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ рд╣реЛрд╕реНрдЯ рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ рдФрд░ рдЬрдм рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╣реЛрд╕реНрдЯ рдХреЛ рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВред

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдерд┐рд░ рдиреЗрдХреНрд╕реНрдЯрдЬ рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореМрдЬреВрджрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдФрд░ рдиреЗрдЯрд▓рд┐рдлрд╛рдИ рдкрд░ рдПрдХ рдиреЗрдХреНрд╕реНрдЯрдЬ рд╕рд╛рдЗрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рддреБрдЪреНрдЫ рд╣реИред рдореЗрд░реА рдХрдВрдкрдиреА рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╡рд░реНрддрдорд╛рди рдореЗрдВ nextjs рдкрд░ рдЪрд▓ рд░рд╣реА рд╣реИ, рдФрд░ netlify рджреНрд╡рд╛рд░рд╛ рд╣реЛрд╕реНрдЯ рдХреА рдЧрдИ рд╣реИ, рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИред

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

рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдЬрд╝реАрдЯ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛, рдмрд╕ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд░реНрдерди рд╣реИред рдЖрдк рдЗрд╕реЗ netlify рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХрдИ рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рдкреНрд░рдорд╛рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ nextjs рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ netlify рдкрд░ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЕрдЧрд░ рдЖрдк рдХрд┐рд╕реА рдиреЗрдХреНрд╕реНрдЯрдЬ рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓, рд╕рдмрд╕реЗ рдлреБрд▓рдкреНрд░реВрдл рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЬрд╝реАрдЯ рдХреА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЛ рдЖрдЬрд╝рдорд╛ рджреВрдВрдЧрд╛ред

@jescalan рдЗрд╕ рдорд╣рд╛рди рд╕рд╛рдЭрд╛рдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж ЁЯЩПЁЯП╗

рдореБрдЭреЗ netlify рдХреЗ рд╕рд╛рде рдиреЗрдХреНрд╕реНрдЯрдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк Publish directory рдХрд╛ рдЙрдкрдпреЛрдЧ out рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди zeit Now рдкрд░, рдХрд╣рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдХреГрдкрдпрд╛ SSR рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди next export рд╕рд╛рде рд╕реНрдЯреИрдЯрд┐рдХ рдкрд░ рдкреВрд░реНрдг рдЬрд╛рдПрдВред

@ScreamZ рдпрд╣ рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк "рдкреВрд░реНрдг рд╕реНрдереИрддрд┐рдХ" рд╕рд╛рдЗрдЯ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк zeit рдХреА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╕реЗрд╡рд╛ рд╡рд╛рд▓реЗ рдЕрдкрдиреЗ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП getStaticProps рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЬреЛ рдорд┐рд▓реЗрдЧрд╛ рд╡рд╣ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдПрдХ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛, рднрд▓реЗ рд╣реА рд╡рд╣ next export рди рдЪрд▓реЗ, рдХреНрдпреЛрдВрдХрд┐ getStaticProps рд╕рднреА рдкреГрд╖реНрда

рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЬрд╝реАрдЗрдЯ рдХреА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкрд░ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ (рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЬрд╝реАрдЯ рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд╛рд▓реА рдХреЛрдИ рднреА рд╕рд╛рдЗрдЯ рдЬрд┐рд╕рдореЗрдВ exportPathMap рдЪрд▓реЗрдВрдЧреЗ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдм рд╕рддреНрдп рдирд╣реАрдВ рд╣реИ)ред getStaticProps рдкреЗрдЬ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ next export рджреНрд╡рд╛рд░рд╛ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдкреЗрдЬ -- рд╣рд░ рд╣рд┐рдЯ рдкрд░ рд╕реАрдбреАрдПрди рд╕реЗ рд╕реАрдзреЗ рдкреЗрдЬ рдХреА рдПрдХ рд╕реНрдЯреИрдЯрд┐рдХ рдХреЙрдкреА рджреА рдЬрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк рдХреБрдЫ рдкреГрд╖реНрдареЛрдВ рдХреЛ getServerProps рдпрд╛ getInitialProps рд╕рд╛рде рднреА рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рд╕рд░реНрд╡рд░ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдкреГрд╖реНрдареЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдЗрд╕реЗ рдПрдХ рд▓рд╛рдн рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ - рдпрджрд┐ рдПрд╕рдПрд╕рдЖрд░ рдорд╛рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдЖрдк рдмрд╕ рдПрдХ рдЕрд▓рдЧ рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣ рдПрдХрд▓ рдорд╛рд░реНрдЧ рдЕрдм рдПрд╕рдПрд╕рдЖрд░ рд╣реИ, рдЬрдмрдХрд┐ рдЖрдкрдХреЗ рдЕрдиреНрдп рд╕рднреА рдорд╛рд░реНрдЧ рд╕реНрдерд┐рд░ рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВред

@jescalan рдзрдиреНрдпрд╡рд╛рдж,

рддреЛ рдмрд╕ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕ рдмреАрдЪ рд╕реНрдереИрддрд┐рдХ рдХреЗ рд▓рд┐рдП netlify рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ

рдХреНрдпрд╛ SSG рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рдХрд╣рд╛рдиреА рд╣реИ? рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣рдо рд╕рд╛рдЭрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдХреНрдпреВрдП/рдЙрддреНрдкрд╛рдж рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде next export рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдпреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рди рдХреЗрд╡рд▓ getStaticProps рдореЗрдВ рдкрдврд╝реЗ рдЬрд╛рдПрдВрдЧреЗред рдХреНрдпрд╛ рдпрд╣ рд╕реАрдзреЗ serverRuntimeConfig рдпрд╛ publicRuntimeConfig рдпрд╛ process.env ?

@ScreamZ @jescalan рдореИрдВ рдЕрдм @Timer (рд╡рд╣ рд╕рднреА рдХреНрд░реЗрдбрд┐рдЯ рдХреЗ рд╣рдХрджрд╛рд░ рд╣реИрдВ) рдХреЗ рд╕рд╛рде рдЕрдм рдЖрдЬ рдкрд░ рд╢реВрдиреНрдп-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди next export рд╕рдорд░реНрдерди рдкрд░ рдЙрддрд░рд╛ рд╣реИред рддреБрдо рдХрд░ рд╕рдХрддреЗ рд╣реЛ:

"build": "next build && next export"

рдФрд░ рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЬрд╛рддрд╛ рд╣реИ

рд╣рд╛рдБ, рдореИрдВ рд╡рд╣ рд▓рдбрд╝рдХрд╛ рдерд╛ рдЬрд┐рд╕рдиреЗ рд╕рдорд░реНрдерди рдкрд░ рдкреВрдЫрд╛ рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдЗрд╕реЗ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ЁЯШЕ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА?

@ScreamZ рдирд╣реАрдВ, рдЖрдк рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдЕрдиреБрд╕рд╛рд░ рдХреЗрд╡рд▓ next build && next export рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

@timneutkens рдЕрдЧрд░ рдореИрдВ рдХреА рдЬрдЧрд╣ getInitialProps рдХреЗ рд╕рд╛рде getServerProps , рдореИрдВ рдЕрднреА рднреА рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ target: 'serverless' рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Server Pre Rendering ? рдзрдиреНрдпрд╡рд╛рджред

рд╣рдо рдЗрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ?

рд╣рдо рдЗрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрди рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП unstable_ рдЙрдкрд╕рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП unstable_getStaticProps

@timneutkens

@ScreamZ @jescalan рдореИрдВ рдЕрдм @Timer (рд╡рд╣ рд╕рднреА рдХреНрд░реЗрдбрд┐рдЯ рдХреЗ рд╣рдХрджрд╛рд░ рд╣реИрдВ) рдХреЗ рд╕рд╛рде рдЕрдм рдЖрдЬ рдкрд░ рд╢реВрдиреНрдп-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди next export рд╕рдорд░реНрдерди рдкрд░ рдЙрддрд░рд╛ рд╣реИред рддреБрдо рдХрд░ рд╕рдХрддреЗ рд╣реЛ:

"build": "next build && next export"

рдФрд░ рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЬрд╛рддрд╛ рд╣реИ

рдореЗрд░реА рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреБрдЫ рдФрд░ рдЪреАрдЬреЗрдВ рдХрд░ рд░рд╣реА рд╣реИ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЖрдХрд░реНрд╖рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

"build": "graphql codegen && next build && npm run export",

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ! рдпрд╣ рд╡рд╣реА рдерд╛ рдЬреЛ рдореИрдВ рдвреВрдВрдв рд░рд╣рд╛ рдерд╛ (рдЕрд▓рд╡рд┐рджрд╛ рдЧреИрдЯреНрд╕рдмреАрдЬреЗрдПрд╕, рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ рдврд╛рдВрдЪрд╛ рдЕрдм рдЖрдкрдХреЗ рдЬреИрд╕рд╛ рдордЬрдмреВрдд рд╣реИ!)

рдРрд╕реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рдореИрдВрдиреЗ 9.1.6 рднреА рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдФрд░ рдореИрдВрдиреЗ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рджреЗрдЦрд╛ рдХрд┐
Screenshot 2019-12-21 at 19 25 43

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдзрд╛рдЧрд╛ рдПрдХ рдЖрд░рдПрдлрд╕реА рдерд╛, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦреБрд▓рд╛ рд╣реИ, рд╣реИ рдирд╛?
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдХрд╛рд░ 9.1.6 рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВред

рдзрд┐рдХреНрдХрд╛рд░ рд╣реИ, рдореИрдВ рдЕрдм рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реВрдБ! рдореИрдВ

рдЕрдВрддрд┐рдо рдкреНрд░рд╢реНрди:

  • рдЕрдЧрд░ рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ getInitialProps рдХрд╛ рдмрд╣рд┐рд╖реНрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдпрд╛ рдпрд╣ рдЕрднреА рднреА рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ? рдПрдХ рдЙрджрд╛рд╣рд░рдг?
  • next export рдХреЛ рдХреЗрд╡рд▓ getStaticProps рдФрд░ next build рд╡рд╛рд▓реЗ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рднреА рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдЙрд╕ рдмреЗрд╣рддрд░реАрди рдЯреВрд▓ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж ЁЯЩПЁЯП╗

рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ getInitialProps рдХреЛ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдпрд╛ рдпрд╣ рдЕрднреА рднреА рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ? рдПрдХ рдЙрджрд╛рд╣рд░рдг?

рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрд░рдПрдлрд╕реА рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ:

рдпрд╣ RFC рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ API рдкрд░рд┐рд╡рд░реНрдзрди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ RFC рдХреЛрдИ рдмрд╣рд┐рд╖реНрдХрд░рдг рдирд╣реАрдВ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдзрд╛рдЧрд╛ рдПрдХ рдЖрд░рдПрдлрд╕реА рдерд╛, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦреБрд▓рд╛ рд╣реИ, рд╣реИ рдирд╛?

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

рдЕрдЧрд▓реЗ рдирд┐рд░реНрдпрд╛рдд рдХреЛ getStaticProps рдФрд░ рдХреЗрд╡рд▓ рдЕрдЧрд▓реЗ рдирд┐рд░реНрдорд╛рдг рд╡рд╛рд▓реЗ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

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

рд╣рдо рдЗрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрди рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП unstable_ рдЙрдкрд╕рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП unstable_getStaticProps

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

рддреЛ рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдкреЗрдЬ рдбреЗрдЯрд╛ рдпреБрдХреНрдд JSON рдлрд╝рд╛рдЗрд▓ рд╣рдореЗрд╢рд╛ рджреВрд╕рд░реЗ рдкреЗрдЬ рд╕реЗ рдПрд╕рдПрд╕рдЬреА рдкреЗрдЬ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред

рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧ JSON рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░реАрд▓реЛрдбрд┐рдВрдЧ рдЕрдиреБрдХреВрд▓рди рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ?
рд╢рд╛рдпрдж рдЗрд╕реЗ рдкреНрд░реАрд▓реЛрдб рдХрд░рдирд╛ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреГрд╖реНрда рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛ (рдпрд╛рдиреА: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдПрд╕рдПрд╕рдЬреА рд▓рд┐рдВрдХ рд╣реЛрд╡рд░ рдХрд░ рд░рд╣рд╛ рд╣реЛ) рдпрд╛ рдкреНрд░реАрд▓реЛрдбрд┐рдВрдЧ рдЬреИрд╕реЗ рдЖрдк рд▓рд┐рдВрдХ рдШрдЯрдХ рд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдЕрдиреНрдп рдЬреЗрдПрд╕ рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкреНрд░реАрд▓реЛрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рд╡реИрд╕реЗ рдЙрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкреНрдпрд╛рд░ рдХрд░рдирд╛!

рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧ JSON рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░реАрд▓реЛрдбрд┐рдВрдЧ рдЕрдиреБрдХреВрд▓рди рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ?

рд╣рд╛рдВред

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдореИрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЗрди funcs рдХреЗ рдкреЗрдбрд╝-рд╣рд┐рд▓рд╛рдиреЗ рдпреЛрдЧреНрдп рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд▓рд┐рдП рд╣реВрдВред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? рдЗрд╕рдХреЗ рдЕрд╡рд░реЛрдзрдХ рдХреНрдпрд╛ рд╣реИрдВ?

@mikestopcontinues рдЗрд╕ RFC рдХрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдорд╛рд░реА рдЯреАрдо рдФрд░ рдХреБрдЫ рдЪреБрдирд┐рдВрджрд╛ рднрд╛рдЧреАрджрд╛рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрддреНрдпрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк unstable_ рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ! рдореИрдВ

рдХреГрдкрдпрд╛ рдЙрддреНрдкрд╛рджрди рдХрд╛рд░реНрдпрднрд╛рд░ рдХреЛ рдирдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рди рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрднреА рднреА рдПрдкреАрдЖрдИ рдХреЛ рдмреНрд░реЗрдХрд┐рдВрдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЗрд╕реЗ 8 рд╕реЗ 20K рдкреГрд╖реНрдареЛрдВ рддрдХ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯреЛрдВ рдХреА рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рдХреБрдЫ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдХреБрдЫ рдЧрддрд┐рд╢реАрд▓ рдЕрдиреБрд░реЛрдз рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде)ред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдЕрднреА рдкрд░ 10K рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реАрдорд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░), рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдореБрдЭреЗ рд╢рд░реНрдо рдЖрддреА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ getStaticPaths рд╡рд┐рдзрд┐ рдХреЗ рдмрд┐рдирд╛, рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирдГ рд▓реЛрдб рдкрд░ getStaticProps рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдЬреЛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рдХреЙрд▓ json рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдЧрд▓рд╛ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЗрдВрдХреНрд░реАрдореЗрдВрдЯрд▓ рдмрд┐рд▓реНрдб рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ? рддреЛ рдХреЗрд╡рд▓ рдирдИ/рдмрджрд▓реА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк unstable_ рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ!

рдореИрдВ unstable_getServerProps рд╡рд┐рдзрд┐ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдордп рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕реЗ zeit/next.js рд░реЗрдкреЛ рдореЗрдВ рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рдвреВрдВрдв рдкрд╛ рд░рд╣рд╛ рд╣реВрдВред рдХреНрдпрд╛ рдЗрд╕реЗ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ?

рдХреНрдпрд╛ рдЗрдВрдХреНрд░реАрдореЗрдВрдЯрд▓ рдмрд┐рд▓реНрдб рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ? рддреЛ рдХреЗрд╡рд▓ рдирдИ/рдмрджрд▓реА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдХрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ (рди рд╣реА рдЗрд╕ RFC рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ)ред

рдирд┐рд╢реНрдЪрд┐рдВрдд рд░рд╣реЗрдВ, рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рддреИрдпрд╛рд░ рд╣реИ рдФрд░ рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣рдо рдЗрд╕рдХреА рдЦреЛрдЬ рдХрд░реЗрдВрдЧреЗред
рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ getStaticProps рдкреНрд░рддрд┐ рдкреГрд╖реНрда рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкреВрд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдирд╣реАрдВ!

рдореИрдВ рдЕрд╕реНрдерд┐рд░_рдЧреЗрдЯрд╕реЗрд╡рд░рдкреНрд░реЙрдкреНрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдордп рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ [...]

getServerProps рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЗрдВ рдЕрднреА рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ!

getServerProps рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЗрдВ рдЕрднреА рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ!

рд╕рд░ рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рд╡рд╣ рднреВрдорд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ _bunch_ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рдПрдХрд▓ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ! рдореИрдВ

рдХреГрдкрдпрд╛ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ, рдореИрдВ 100% рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ getServerProps / getStaticProps рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред

рдЗрд╕ рд╕реВрддреНрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд: рдирд╣реАрдВ

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ, рддреЛ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рдЯрд░реНрдорд┐рдирд▓ рдиреЗ рдЗрд╕рдХрд╛ рд╕рдВрдХреЗрдд рдХреНрдпреЛрдВ рджрд┐рдпрд╛ рдЬрдм рдореИрдВрдиреЗ next build рдЪрд▓рд╛рдпрд╛, рдЕрдЧрд░ рд╡реЗ рдЕрднреА рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ? рд╕рдВрджреЗрд╢ рджреЗрдЦрдХрд░ рдореБрдЭреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдп рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдереАрдВ, рдФрд░ рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧрд╛ рдХрд┐ рд╡реЗ рдирд╣реАрдВ рдереЗред рдмрд╕ рддрд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдпрд╛ рдЕрдЧрд░ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЧрд▓рдд рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдВред

╬╗  (Server)  server-side renders at runtime (uses getInitialProps or getServerProps)
тЧЛ  (Static)  automatically rendered as static HTML (uses no initial props)
тЧП  (SSG)     automatically generated as static HTML + JSON (uses getStaticProps)

(рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг 9.1.6 рдкрд░)

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

@stevenjchang рд╡реЗ pages/**/*.js рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:

export function unstable_getStaticPaths() {} // return [{params: {...}}, ...]
export function unstable_getStaticProps({params: {...}) {} // return {props: {...}}

рдФрд░ рдореБрдЭреЗ рдпрд╣ рднреА рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡реЗ рдЕрджреНрднреБрдд рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдЕрднреА рднреА рджреЗрд╡ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдереЛрдбрд╝реЗ рдореЛрдЯреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдЕрднреА рднреА рджреЗрд╡ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдереЛрдбрд╝реЗ рдореЛрдЯреЗ рд╣реИрдВред
@mikestopcontinues

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдХрд┐рд╕реА рдФрд░ рдиреЗ рд╣рдореЗрдВ рджреЗрд╡ рд╕рд░реНрд╡рд░ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рджреА рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ!

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

"рд╣рд░ рд▓реЛрдб рдкрд░" рд╕реЗ рдЖрдкрдХрд╛ рдорддрд▓рдм рдкреЗрдЬ рд▓реЛрдб рд╕реЗ рд╣реИ? рдпрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг? рдпрд╛...?

@mmmef рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдПрдХ рд╣реА рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ json рдХрд╛ рдлрд┐рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рджреЛ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдмреАрдЪ рдЖрдЧреЗ-рдкреАрдЫреЗ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рддреЗ рд╣реИрдВред

@mikestopcontinues рдпрд╣ рдЗрдЪреНрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдмрд╕реЗ рдЕрджреНрдпрддрд┐рдд рдбреЗрдЯрд╛ рдЕрдХреНрд╕рд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдирдП рдореБрджреНрджреЗ рдореЗрдВ рдХреБрдЫ рдмреЗрд╣рддрд░ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдВрдЧреЗ!

@timneutkens рдпрд╣ RFC рдмрд╣реБрдд рдЖрд╢рд╛рдЬрдирдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдкреНрд░рд╢реНрди/рдЪрд┐рдВрддрд╛рдПрдВ рд╣реИрдВ, рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЖрдЗрдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдорд▓рд╛ рд▓реЗрдВ рдЬреЛ SSR рдФрд░ SSG рджреЛрдиреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рд╕рдВрджрд░реНрдн

рд╣рдо рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ (рдЙрд░реНрдл "рдРрдк") рдкрд░ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЙрди рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рдПрдХ рдмреАрдбреАрдбреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн рд╣реИред
рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИрдВ, рдХреБрдЫ рдирд┐рдЬреА рд╣реИрдВ (рдпрд╛рдиреА: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдИрдореЗрд▓/рдкрд╛рд╕рд╡рд░реНрдб)ред

рдРрдк рджреЛ рдЪрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

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

рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ, рд╣рдо SSR рдФрд░ SSG рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

  • рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдРрдк SSR рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ GraphQL API (рдкреЗрдЬ рдмрдирд╛рддреЗ рд╕рдордп) рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
  • рдкреНрд░реЛрдбрдХреНрд╢рди рдРрдк SSG рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдХреЛрдИ рдирдпрд╛ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ GraphQL API рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╕реЗ рд╕реНрдЯреИрдЯрд┐рдХреНрд╕ рдкреЗрдЬ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП рд╡реЗ рд╕реНрдерд┐рд░ рд╣реИрдВ рдФрд░ рдЕрдм рдФрд░ рдирд╣реАрдВ рдмрджрд▓реЗрдВрдЧреЗ, GraphQL API рд╕реЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рд░рдирдЯрд╛рдЗрдо рдкрд░ (рдкреЗрдЬ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдХрдо рд╕реЗ рдХрдо рдирд╣реАрдВ))

рдпрд╣ рдкрд░рд┐рджреГрд╢реНрдп рдкрд░реНрдпрд╛рдкреНрдд рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдПрд╕рдПрд╕рдЬреА рдЙрдкрдпреЛрдЧ рдХреЗ рдкреНрд░рдореБрдЦ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ (рдЖрдИрдПрдордПрдЪрдУ) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреНрд░реЛрдбрдХреНрд╢рди рдРрдк рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдРрдк рдХреЗ рд╕реНрдиреИрдкрд╢реЙрдЯ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред

рдХреБрдЫ рдкреНрд░рд╢реНрди:

  1. рдХреНрдпрд╛ рдпрд╣ рдЗрд╕ рдЖрд░рдПрдлрд╕реА рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рд╣реИ ? рдХрд┐рд╕реА рджрд┐рдП рдЧрдП "рд╕реНрдЯреЗрдЬ" (рдЙрддреНрдкрд╛рджрди/рдордВрдЪрди) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╣реА рдРрдк рдХрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛
  2. рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рдПрдкреАрдЖрдИ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

    • рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рдореЗрдВ, рд╡реЗ рдПрд╕рдПрд╕рдЖрд░, рдпрд╛ рд╕реАрдПрд╕рдЖрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рддрд╛ рд╣реИ (рдФрд░ рд╕реАрдПрд╕рдЖрд░ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛)

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

  3. рдХреНрдпрд╛ рдЖрдкрдХреЛ рдорд┐рд╢реНрд░рд┐рдд SSR/SSG рдХреЗ рд╕рд╛рде рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХреЛрдИ рд╕рд░реЛрдХрд╛рд░ рд╣реЛрдЧрд╛? (рд╕реБрд░рдХреНрд╖рд╛, рдкреНрд░рджрд░реНрд╢рди, рд░рдЦрд░рдЦрд╛рд╡, рдЖрджрд┐)

рдЖрдк рдЗрд╕реЗ рдХрдм рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ? рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдкреНрд░рдореБрдЦ рдЕрджреНрдпрддрди (v10), рдпрд╛ рдкрд┐рдЫрдбрд╝рд╛-рд╕рдВрдЧрдд рдЕрджреНрдпрддрди рд╣реЛрдЧрд╛?

рдЕрд░реЗ,

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрд┐рд╕реА рдХрд╕реНрдЯрдо рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдЙрджрд╛рд╣рд░рдг:

// server.js

const express = require('express');
const next = require('next');

const port = parseInt(process.env.PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();

app.prepare().then(() => {
  const server = express();

  server.get('/blog/:id', (req, res) => {
    console.log('My params needed be passed to page:', req.params);
    return app.render(req, res, '/blogDetail', { id: req.params.id });
  });

  server.listen(port, err => {
    if (err) throw err;
    console.log(`> Ready on http://localhost:${port}`);
  });
});

// blogDetail.js
export async function unstable_getStaticProps(props) {
  console.log('What is passed', props);

  return {};
}

const BlogPostPage = ({ post }) => {
  return <div>Hey</div>;
}

export default BlogPostPage;
# Terminal output

My params needed be passed to page: { id: 'test' }
What is passed { params: undefined }

рдХреНрдпреЛрдВ рдирд╣реАрдВ getStaticProps рдореЗрдВ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИ? рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдкреГрд╖реНрда рд╣реИ рдЬрд┐рд╕реЗ рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдмрд┐рдирд╛ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрд╕рдПрд╕рдЖрд░ рдХрд░рдирд╛ рд╣реИред useRouter рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдХрдИ рдкреБрди: рд░реЗрдВрдбрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХреНрд╡реЗрд░реА рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рд╣реИред рдпрд╣ рдПрдХ рдРрд╕рд╛ рдкреГрд╖реНрда рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд░реВрдкрд╛рдВрддрд░рдг рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдПрдХ рдЧреИрд░-рд╢реБрд░реБрдЖрддрдХрд░реНрддрд╛ рд╣реИред

@pjaws RFC рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ getStaticProps рд╕реНрдерд┐рд░ рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рд╣реИред рд╕реНрдЯреЗрдЯрд┐рдХ рдПрдЪрдЯреАрдПрдордПрд▓ рдПрдХ рдХреНрд╡реЗрд░реАрд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдлрд┐рд░ рдпрд╣ рдбрд╛рдпрдирд╛рдорд┐рдХ URL рдкреИрд░рд╛рдореАрдЯрд░ рдХреНрдпреЛрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдпрд╣ рдХреИрд╕реЗ рдЕрд▓рдЧ рд╣реИ?

рдордВрдЧрд▓рд╡рд╛рд░, 14 рдЬрдирд╡рд░реА, 2020 рдХреЛ рдкреВрд░реНрд╡рд╛рд╣реНрди 1:30 рдмрдЬреЗ рдЯрд┐рдо рдиреНрдпреВрдЯрдХреЗрдиреНрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@pjaws https://github.com/pjaws RFC рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ
getStaticProps рд╕реНрдерд┐рд░ рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рд╣реИред рд╕реНрдЯреЗрдЯрд┐рдХ HTML рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ a
рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/zeit/next.js/issues/9524?email_source=notifications&email_token=AMVRRIQCKDJNF4MPWSLYNV3Q5WA2NA5CNFSM4JRPBEL2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63issueLNMWW74239T
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AMVRRIRJXLYC4MC4U7DH7NDQ5WA2NANCNFSM4JRPBELQ
.

рдХреНрдпреЛрдВрдХрд┐ getStaticPaths рдЖрдкрдХреЛ рдЙрди рдкреГрд╖реНрдареЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

рдпреЗ рдкрд░рд┐рд╡рд░реНрддрди рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдмрд╣реБрдд рд╣реА рдЖрд╢рд╛рдЬрдирдХ, рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо рд▓рдЧрддреЗ рд╣реИрдВ! рдореИрдВ

рдореИрдВ рдкреГрд╖реНрдареЛрдВ рдкрд░ рд╕рд╛рдЭрд╛ рдХреА рдЧрдИ рдбреЗрдЯрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП getInitialProps рдореЗрдВ _app.js рд╣реЛрдиреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛)ред рдХреНрдпрд╛ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ getStaticProps рдХрд╛ рдЙрд╕реА рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ? рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рдореИрдВ рдкреГрд╖реНрдареЛрдВ рдкрд░ рд╕рд╛рдЭрд╛ рдХреА рдЧрдИ рдбреЗрдЯрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _app.js рдореЗрдВ getInitialProps рд╣реЛрдиреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛)ред рдХреНрдпрд╛ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ getStaticProps рдХрд╛ рдЙрд╕реА рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ? рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рд╕рд╣реА рд╣реИ, рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдпрд╣ рдХреЗрд╡рд▓ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ред рдмрд╛рдж рдореЗрдВ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрдерд┐рд░ HTML рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╕рдордп _app рдХреЗ getInitialProps рдХреЛ рдЕрднреА рднреА рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рддрд╛рдХрд┐ рдЖрдк getStaticProps рдкрд░ рдмрдврд╝рддреЗ рдЬрд╛ рд╕рдХреЗрдВред

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

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

рдпрд╣ Netlify рдЬреИрд╕реА рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ - рдЬрд┐рд╕рдореЗрдВ DatoCMS рдпрд╛ Graphcms рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдЙрдкрд▓рдмреНрдз рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдБрдЪрд╛ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИред рддреЛ рдЕрдЧрд░ рдореИрдВ рддреИрдирд╛рддреА рдХреЗ рд░реВрдк рдореЗрдВ Netlify рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдм рдХреБрдЫ Netlify рдбреЛрдореЗрди рд╕реЗ рдкрд░реЛрд╕рд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕реЗ рдЕрдкрдирд╛ рдЬрд╛рджреВ рдХрд╛рдо рдХрд░рдиреЗ рджреЗрдВред

@sandys рдЕрдЧрд░ рдореИрдВ https://github.com/zeit/next.js/issues/9054#issuecomment -570427085 рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рддреЛ рдЖрдкрдХреЛ рд╕рдВрдкрддреНрддрд┐ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреА рд╣реЛрдЧреА, рдЙрдиреНрд╣реЗрдВ .next/static рддрд╣рдд рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдПрдХ рд▓рд┐рдВрдХ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЕрдкрдиреЗ рдЖрдк рдХреЛ getStaticProps ред

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

@Janpot рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╡рд╣рд╛рдВ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рд╛рдорд╛рди рдХреЛ рд░реЛрд▓-рдпреЛрд░-рдУрди рд╣реЛрдирд╛ рд╣реИред

рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдмрд┐рд▓реНрдЯ-рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдЕрдиреБрд░реЛрдз рдЬреЛрдбрд╝реЗрдВред рд╢рд╛рдпрдж # 9054 рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ SSG рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдЕрддреНрдпрдВрдд рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдореИрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛, рд▓реЗрдХрд┐рди SSG рдХреЗ рд▓рд┐рдП рдПрд╕реЗрдЯ рд╣реИрд╢рд┐рдВрдЧ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧреАред

@ рд╣реЛрдореЛрдХреА , рдЙрд╕ рдХрд╛рдо рдХреЛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ, рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕ рдмреАрдЪ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдХреА рд╣реИ?

@ рд╣реЛрдореЛрдХреА , рдЙрд╕ рдХрд╛рдо рдХреЛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ, рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕ рдмреАрдЪ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдХреА рд╣реИ?

рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдпреЛрдЬрдирд╛ рднреА рдирд╣реАрдВ рд╣реИ: #10071

рдореИрдВ

@sandys рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдЬрдм рдЖрдк https://github.com/zeit/next.js/issues/9081 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП /images рд╕реЗ рд╕реАрдПрдордПрд╕ рдореЗрдВ рдПрдХ рдкреБрдирд░реНрд▓реЗрдЦрди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ZEIT рдЕрдм рд╕рд╣реА рд╣реЗрдбрд░ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдкрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢ рдХрд░ рджреЗрдЧрд╛, рдЕрддрд┐рд░рд┐рдХреНрдд рдбрд╛рдЙрдирд▓реЛрдбрд┐рдВрдЧ (рдмрд┐рд▓реНрдб рдкрд░ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдУрд╡рд░рд╣реЗрдб) рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

@timneutkens рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рддреЛ рд╣рдо netlify рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - рдХреНрдпрд╛ рдЖрдк рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╣рдо CMS url рдХреЛ рдРрд╕реЗ рд╣реА рд░рдЦреЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдКрдкрд░ CDN рдХреА рдПрдХ рдкрд░рдд рд╕рд╛рдордиреЗ рд░рдЦреЗрдВ?
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ netlify (рдХреНрд▓рд╛рдЙрдбрдлреНрд░рдВрдЯ рдЬрд┐рд╕реЗ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ) рдЗрди рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдмрд╛рдз рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рддреИрдирд╛рддреА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреВрд░реА рд╕рдорд╕реНрдпрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЖрдзрд╛рд░ рдпреВрдЖрд░рдПрд▓ рд╕реЗ рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдбреАрдПрди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ (рдЬреЛ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрд╕ 3 рд╕реЗ рдкрд░реЛрд╕рд╛ рдЬрд╛рдПрдЧрд╛)ред

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди Zeit Now рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореБрдЭ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ

рдпрджрд┐ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рддреИрдирд╛рддреА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреВрд░реА рд╕рдорд╕реНрдпрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЖрдзрд╛рд░ рдпреВрдЖрд░рдПрд▓ рд╕реЗ рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдбреАрдПрди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ (рдЬреЛ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрд╕ 3 рд╕реЗ рдкрд░реЛрд╕рд╛ рдЬрд╛рдПрдЧрд╛)ред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдФрд░ 10x рдзреАрдорд╛ рдмрдирд╛рддрд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди Zeit Now рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореБрдЭ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ

рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╣рд░ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЙрдбрдлреНрд░рдВрдЯ рд╕рд╣рд┐рддред

@timneutkens рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрдЬреНрдЮреЗрдпрд╡рд╛рджреА рд╣реИрдВред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ (рдЬреНрдЮрд╛рдд рдЖрдзрд╛рд░ url рд╕реЗ рдкрд░реЛрд╕реА рдЬрд╛ рд░рд╣реА рд╕рднреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рд╕рд╣рд┐рдд), рдЗрд╕реЗ рдмрд┐рд▓реНрдб рдореЗрдВ рдмреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЕрддреНрдпрдзрд┐рдХ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдмрд╛рдд рдХреА рд╡рдХрд╛рд▓рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЪрд╛рд▓реВ рдХрд░реЗрдВред рд╕реАрдПрдордПрд╕ рд╕реЗ рдбреАрдкрд▓рд┐рдВрдХ рдХрд░рдиреЗ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЦреБрд╢ рд╣реЛрдВрдЧреЗред рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдЙрдЪреНрдЪ рдЯреНрд░реИрдлрд┐рдХ рд╕рд╛рдЗрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдЬреИрд╕реА рд╕рд╛рдЗрдЯреЛрдВ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ред рд╣рдореЗрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕реАрдПрдордПрд╕ рдХрд┐рд╕ рдпреВрдЖрд░рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Datocms рд╕реЗ рдХреА рд╕реЗрд╡рд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ www.datocms-assets.com/ ред рд╣рдо #9081 рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?

рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдХреЗ рдкреНрд░рддрд┐ рдЕрдЬреНрдЮреЗрдпрд╡рд╛рджреА рд╣реИрдВред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ

рдпрд╣ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рд▓реЗрдХрд┐рди рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ (рдЬреНрдЮрд╛рдд рдЖрдзрд╛рд░ url рд╕реЗ рдкрд░реЛрд╕реА рдЬрд╛ рд░рд╣реА рд╕рднреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рд╕рд╣рд┐рдд), рдЗрд╕реЗ рдмрд┐рд▓реНрдб рдореЗрдВ рдмреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЕрддреНрдпрдзрд┐рдХ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИ, рдЖрдк рдПрдХ рдкреБрдирд░реНрд▓реЗрдЦрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ /images/* рдХреЛ cms url рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП www.datocms-asset.com/* рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗред рдФрд░ рдлрд┐рд░ /images рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд▓рд┐рдВрдХ рдХрд░реЗрдВред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдСрдл-рдЯреЙрдкрд┐рдХ рд╣реЛрдирд╛ рд╢реБрд░реВ рд╣реЛ рд░рд╣рд╛ рд╣реИред

@sandys рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк # 9081 рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг/рдЫрд╡рд┐рдпреЛрдВ рд╕реЗ рд╕реАрдПрдордПрд╕ рдореЗрдВ рдПрдХ рдкреБрдирд░реНрд▓реЗрдЦ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ZEIT рдЕрдм рд╕рд╣реА рд╣реЗрдбрд░ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдкрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢ рдХрд░ рджреЗрдЧрд╛, рдЕрддрд┐рд░рд┐рдХреНрдд рдбрд╛рдЙрдирд▓реЛрдбрд┐рдВрдЧ (рдмрд┐рд▓реНрдб рдкрд░ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдУрд╡рд░рд╣реЗрдб) рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

@timneutkens рдмрд╕ рдореЗрд░реЗ рд▓рд┐рдП рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЖрджрд░реНрд╢ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдк рдЫрд╡рд┐ рдХреЛ рд╣реИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдпреВрдЖрд░рдПрд▓ рдХреЗ рддрд╣рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕рд╛рдордЧреНрд░реА рдирд┐рд░реНрдорд╛рддрд╛ рдЬрдм рдЪрд╛рд╣реЗрдВ рд╕реАрдПрдордПрд╕ рдореЗрдВ рдЙрд╕реА рдирд╛рдо рдХреЗ рддрд╣рдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЬрд┐рд╕ рд╕реЗрдЯрдЕрдк рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдореЗрдВ рд╕реАрдПрдордПрд╕ рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдирд╛ рд╣реЛрдЧрд╛:

  1. рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдЕрдиреБрдХреВрд▓рди
  2. рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╣реИрд╢ рдХрд░рдирд╛ рдФрд░ рдЗрд╕ рд╣реИрд╢ рдХреЗ рддрд╣рдд рдЙрдирдХреА рд╕реЗрд╡рд╛ рдХрд░рдирд╛
  3. рдЫрд╡рд┐ url рд╕реЗ рд╣реИрд╢ рдХрд┐рдП рдЧрдП рдЫрд╡рд┐ url рдХреЗ рд▓рд┐рдП рдПрдХ рдирдХреНрд╢рд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬрд┐рд╕реЗ CMS рдкрд░ рдЕрдкрдиреЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рдордХрдХреНрд╖ рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ url рдХреЛ рд░реАрдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП getStaticProps рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдЬреЛ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЕрд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕реЗрдЯрдЕрдк рд╣реИред

@Janpot CMS рдкреНрд░рджрд╛рддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЫрд╡рд┐рдпреЛрдВ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп url рджреЗрдХрд░ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред

рдпрд╣ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рдлрд┐рд░, рдореИрдВ рдпрд╣рд╛рдБ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реВрдБред рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХрдИ рдЕрдиреБрд░реЛрдз рд╣реИрдВред рдореИрдВ рдЖрдкрд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

https://spectrum.chat/next-js/general/how-would-you-handle-importing-remote-images-on-nextjs-static-export~30b2ba84-bc27-4da7-9ec8-21e4d5d287a3

рдЧреИрдЯреНрд╕рдмреА рд╕рд╛рдЗрдб рдкрд░ рднреА - https://github.com/gatsbyjs/gatsby/issues/14076

https://spectrum.chat/gatsby-js/general/adding-remote-images-during-node-creation~e704e6fb-24b2-46c6-b1fc-93189d2e28a4

https://github.com/njosefbeck/gatsby-source-stripe/#downloading -files

@sandys рдпрд╣ SSG RFC рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЗрд╕рд▓рд┐рдП рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

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

рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдЕрдкрдиреЗ рдирд┐рд░реНрдгрдп рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░реЗрдВред

рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ next export рд╡рд░реНрддрдорд╛рди рдореЗрдВ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдИ рдмрд╛рдд рдХреНрдпреЛрдВ рд╣реИ рдФрд░ рдЗрд╕ RFC рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

рдпрд╣ getServerProps рдФрд░ рдСрди-рдбрд┐рдорд╛рдВрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

@Janpot CMS рдкреНрд░рджрд╛рддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЫрд╡рд┐рдпреЛрдВ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп url рджреЗрдХрд░ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред

рд╣рд╛рдБ, рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдФрд░ рдХреИрд╢реНрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ 2 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

  1. рдПрдХ рдХрд╕реНрдЯрдо рд╡реЗрдмрдкреИрдХ рд╕реЗрдЯрдЕрдк рдмрдирд╛рдПрдВ
  2. рдмрд╛рд╣рд░реА рд╕реАрдПрдордПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

рдФрд░ рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭреВрдВ, рддреЛ file-loader рдкрд╣рд▓реЗ рд╕реЗ рд╣реА CSS рдХреЗ рд▓рд┐рдП рд╢рд╛рдорд┐рд▓ рд╣реИред рдХреНрдпрд╛ рдпрд╣ JS рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ?

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

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ ZEIT Now рдореЗрдВ рддреИрдирд╛рдд рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ рдирдП рд╕реНрдерд┐рд░ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЧрддрд┐рд╢реАрд▓ URL рд╡рд╛рд▓рд╛ рдкреГрд╖реНрда рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЙрди рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ unstable_getStaticPaths рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдлрд╝рдВрдХреНрд╢рди unstable_getStaticProps 404 рд▓реМрдЯрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреГрд╖реНрда рд╣реИ /blog/[slug].js , рдЬрд┐рд╕рдХрд╛ getStaticPaths рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ:

[{ params: { slug: 'hello' } }]

рдФрд░ рдореЗрд░реЗ getStaticProps рдореЗрдВ рд╕реНрд▓рдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░реНрдХ рд╣реИрдВред рдЬрдм рдореИрдВ /blog/hello рдкрд░ рдЬрд╛рддрд╛ рд╣реВрдВ, рддреЛ рдкреГрд╖реНрда рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ /blog/doesnt-exist рдЬреИрд╕реЗ рдХрд┐рд╕реА рдЕрдорд╛рдиреНрдп рдкреГрд╖реНрда рдкрд░ рдЬрд╛рддрд╛ рд╣реВрдВ, рддреЛ getStaticProps рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп 500 рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ a 404. рдпрд╛ рдпрджрд┐ рдореИрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рддреЛ рдкреГрд╖реНрда getStaticPaths рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, 404 рдХреЗ рдмрдЬрд╛рдп рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рддрд░реНрдХ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реИ?

рдпрд╣ рдПрдХ рдорд╣рд╛рди рд╕реБрдзрд╛рд░ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдмрд╕ рдХреБрдЫ рдкреНрд░реА-рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдереЗред
рдореИрдВрдиреЗ рдЕрдкрдиреА рдПрдХ рд╕рд╛рдЗрдЯ рдХреЛ рдЕрдЧрд▓реЗ 9.2 рдкрд░ unstable_getStaticPaths рдФрд░ unstable_getStaticProps рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдФрд░ рдЗрд╕рдиреЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ред

exportPathMap рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рд╣реИ: exportPathMap рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрде рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

{
 "/path/to/page": {page: "/index", query: { pageId: 123 } }
}

рдФрд░ рд╕реНрдерд┐рд░ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрдЧрд╛

/path
   /to
     /page
       index.html

рдЬрдм рдЖрдк рдЯреЗрдореНрдкрд▓реЗрдЯ [slug].jsx unstable_getStaticPaths рд╕реЗ рд╕рдорддреБрд▓реНрдп рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ,

[{ slug: '/path/to/page' }]

рдЕрдЧрд▓рд╛ 9.2 рдиреЗрд╕реНрдЯреЗрдб рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдмрдЬрд╛рдп '%2Fpath%2Fto%2Fpage' рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

/%2Fpath%2Fto%2F
   index.html

рд╣рдо рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдкреГрд╖реНрдареЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг (рдореМрдЬреВрджрд╛ ExportPathMap рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛) рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╣рдо рдПрдХ рдПрдХрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдкреНрд░рдХрд╛рд╢рд┐рдд рдкрде рдХреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдиреЗрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@dpfavand рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдк рдПрдХ рдХреИрдЪ-рдСрд▓ рд░реВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ: https://nextjs.org/blog/next-9-2#catch -all-dynamic-routes

рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЬрдм рдЖрдк рд╕реНрд▓реИрд╢ рд╕рд╣рд┐рдд рдкрде рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди [slug].js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд╣реА рд╣реИ, рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк [...slug].js ред

рдЗрд╕рдХреЗ рдХрдм рдЙрддрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ? рдХреНрдпрд╛ рдпрд╣ 9.2 рдХреЗ рдкреИрдЪ рдореЗрдВ рд╣реЛрдЧрд╛ рдпрд╛ рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рдЫреЛрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдЧрд╛?

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

рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ, рдпрд╣ рдорд╛рдореВрд▓реА рд╣реЛрдЧреАред

рд╣рд╛рдБ, рдореИрдВ рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдБ рд▓реЗрдХрд┐рди 9.1.7 рдмреНрд▓реЙрдЧ рдиреЗ рдЫрд╛рдк рдЫреЛрдбрд╝реА
рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрдВрдЧрд▓реА рдореЗрдВ рдерд╛ред

рд╢реБрдХреНрд░, резрен рдЬрдирд╡рд░реА, реирежреиреж рдХреЛ рд╢рд╛рдо рел:режрел рдмрдЬреЗ рдЯрд┐рдо рдиреНрдпреВрдЯрдХреЗрдиреНрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

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

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/zeit/next.js/issues/9524?email_source=notifications&email_token=ADKINGF724256WCEFHBFIH3Q6ITRXA5CNFSM4JRPBEL2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJ57N5133
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ADKINGBVCG6MFMOG5U2FGMDQ6ITRXANCNFSM4JRPBELQ
.

>

рд▓реИрд╕рд┐рдЯрд░ рдЧреНрд░реЗрдЧ
[email protected] [email protected]
рд╕реЗрд▓ (832) 495-9903

рдХреНрдпрд╛ getStaticProps рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рддрд┐ рдкреГрд╖реНрда рдХреЗ рдмрдЬрд╛рдп рдкреВрд░реЗ рдРрдк рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЪрд▓рддрд╛ рд╣реИ?

рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрджрд░реНрдн ( PricingPlansContext ) рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдкреГрд╖реНрдареЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдбреЗрдЯрд╛ (рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рдг рдпреЛрдЬрдирд╛рдПрдВ) рдореЗрд░реЗ рдмрд╛рд╣рд░реА рд╕рд░реНрд╡рд░ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░, рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рдП ( next export )ред рдХрднреА рднреА рд░рдирдЯрд╛рдЗрдо рдкрд░ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рд╕реЗ getStaticProps рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдКрдкрд░ рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдЯрд┐рдкреНрдкрдгреА рдорд┐рд▓реА: https://github.com/zeit/next.js/issues/9524#issuecomment -574179540ред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП babel plugin-preval` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рд▓реЛрдЧреЛрдВ рдХреЛ a . рд▓рд┐рдЦрддреЗ рд╣реБрдП рднреА рджреЗрдЦрд╛ рд╣реИ
json рдлрд╝рд╛рдЗрд▓ ExportPathMa () рдХреЗ рднреАрддрд░ next.config.js рдХреЗ рд╕рд╛рде, рдЬрд┐рд╕реЗ рд╡реЗ рддрдм рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ
рдЙрдирдХреЗ рдХреЛрдб рдХреЗ рднреАрддрд░ред

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

@dpfavand рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдк рдПрдХ рдХреИрдЪ-рдСрд▓ рд░реВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ: https://nextjs.org/blog/next-9-2#catch -all-dynamic-routes

рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЬрдм рдЖрдк рд╕реНрд▓реИрд╢ рд╕рд╣рд┐рдд рдкрде рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди [slug].js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд╣реА рд╣реИ, рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдк [...slug].js ред

@timneutkens рдлреЙрд▓реЛ-рдЕрдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рд╕рдлрд▓рддрд╛ рдХреЗ рдмрд┐рдирд╛ рджреЛ рддрд░реАрдХреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реНрд▓рдЧ рдорд╛рди рдХреЛ getStaticPaths рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ getStaticProps рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╕реНрд▓рдЧ рдорд╛рди рдХреЛ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╕рдордп, рдмрд┐рд▓реНрдб рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдорд╛рди рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреЗрд╕ 1, рдлрд╝рд╛рдЗрд▓ рдХреЛ pages/[...slug].jsx рдорд╛рдирддреЗ рд╣реБрдП, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд▓рдЧ рдХрд░реЗрдВ:

export async function unstable_getStaticPaths() {
    return [{ params: { slug: 'en/about' } }];
}

export async function unstable_getStaticProps({ params }) {
    console.log('params', params);
    return { slug: params.slug };
}

рдЙрдкрд░реЛрдХреНрдд рдорд╛рдорд▓реЗ рдореЗрдВ, params рдореЗрдВ getStaticProps рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рд╣реИ - рдХреЛрдИ slug рдХреБрдВрдЬреА рдирд╣реАрдВред

рдХреЗрд╕ 2, pages/[...slug].jsx , рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд▓рдЧ,

export async function unstable_getStaticPaths() {
    const allPaths = Object.keys(pathMap).map(slug => ({ params: { slug } }));
    return [{ params: { slug: ['en', 'about'] } }];
}
export async function unstable_getStaticProps({ params }) {
    console.log('params', params);
    return { slug: params.slug };
}

рдорд╛рдорд▓реЗ 2 рдореЗрдВ, рдмрд┐рд▓реНрдб рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ

> Build error occurred
{ Error: A required parameter (slug) was not provided as a string.
    at _validParamKeys.forEach.validParamKey (/project/node_modules/next/dist/build/utils.js:21:569)
    at Array.forEach (<anonymous>)
    at toPrerender.forEach.entry (/project/node_modules/next/dist/build/utils.js:21:495)
    at Array.forEach (<anonymous>)
    at Object.isPageStatic (/project/node_modules/next/dist/build/utils.js:17:122)
    at process._tickCallback (internal/process/next_tick.js:68:7) type: 'Error' }

рдореБрдЭреЗ рдКрдкрд░ рджрд┐рдП рдЧрдП getStaticPaths рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдкрде рдкреИрд░рд╛рдореАрдЯрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдПрд╕рдПрд╕рдЬреА рдкрдереЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

/store/widgets/circles-n-squares?sort=price&minWeight=2&color=black

рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдИ-рдХреЙрдорд░реНрд╕ рд╕рд╛рдЗрдЯ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рдПрдХ рдпреВрдЖрд░рдПрд▓ рдХреЗ pathname рдореЗрдВ рдЙрддреНрдкрд╛рдж рдЦреЛрдЬ рдХреЗ рд╣рд░ рдПрдХ рдкрд╣рд▓реВ рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред

рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдпрд╣рд╛рдВ рдПрдХ рд╕рдВрджреЗрд╢ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИ - рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, getStaticProps getServerProps рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрдм рдХреЛрдИ рд╕рд╛рдЗрдЯ ZEIT Now рдкрд░ рддреИрдирд╛рдд рдХреА рдЬрд╛рддреА рд╣реИ (рдпрд╛рдиреА getStaticPaths рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ) - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ?

@dpfavand рдореИрдВ рднреА рд╕рдЯреАрдХ рдЪреАрдЬрд╝ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ! рд╕реАрдПрдордПрд╕ рдореЗрдВ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрддрд┐рд╢реАрд▓ рдкреЗрдЬ рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЪрдкрд▓рддрд╛ рд╕реАрдПрдордПрд╕ рдФрд░ рдиреЗрдХреНрд╕реНрдЯрдЬреЗ рдХреЗ рд▓рд┐рдП рдПрдХ

@timneutkens рдлреЙрд▓реЛ-рдЕрдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рд╕рдлрд▓рддрд╛ рдХреЗ рдмрд┐рдирд╛ рджреЛ рддрд░реАрдХреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реНрд▓рдЧ рдорд╛рди рдХреЛ getStaticPaths рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ getStaticProps рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдХреЗрд╕ 1, рдлрд╝рд╛рдЗрд▓ рдХреЛ pages/[...slug].jsx рдорд╛рдирддреЗ рд╣реБрдП, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд▓рдЧ рдХрд░реЗрдВ:

export async function unstable_getStaticPaths() {
  return [{ params: { slug: 'en/about' } }];
}

export async function unstable_getStaticProps({ params }) {
  console.log('params', params);
  return { slug: params.slug };
}

рдЙрдкрд░реЛрдХреНрдд рдорд╛рдорд▓реЗ рдореЗрдВ, params рдореЗрдВ getStaticProps рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рд╣реИ - рдХреЛрдИ slug рдХреБрдВрдЬреА рдирд╣реАрдВред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдЫреЛрдЯреА рд╕реА рджреБрдирд┐рдпрд╛! Fastr_conf рдкрд░ рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рджред

рд╣рд╛рдп @timneutkens ,

рдореИрдВ next.js рдХреЛ рдПрдХ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯ рдЬрдирд░реЗрдЯрд░ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдмрд╣реБрдд рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реВрдВред

рдореИрдВ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреИрд╕реЗ getStaticProps рдФрд░ getStaticPaths рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдПрдХ рдмрд╛рд░ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╡рд┐рднрд┐рдиреНрди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

const entries = await cmsSdkCient.getEntries();

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

  1. рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдФрд░ ssr: true рд╕рд╛рде рдкреГрд╖реНрдареЛрдВ рдХрд╛ рдирдХреНрд╢рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдирд┐рд░реНрдпрд╛рдд рд╕рдордп рдкрд░ getInitialProps рджреНрд╡рд╛рд░рд╛ рдЙрдкрднреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  2. рд╡рд╣реА рдбреЗрдЯрд╛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЗрд╕ рдмрд╛рд░ ssr: false , init-props.json рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде, рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЗ рдкрде рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдлрд┐рд░, рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ getInitialProps рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдорд┐рд▓рд╛рди рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рдХреЗ init-props.json рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


next.config.js exportPathMap рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░

module.exports = {
  exportTrailingSlash: true,
  exportPathMap: (defaultPathMap, { outDir }) => {
    // load data from CMS
    const objects = await cmsSdkCient.getEntries();

    // create map between page paths and page data
    return objects.reduce((accum, object) => {

      // if the object does not have a slug, it is not a page
      if (!object.slug) return accum;

      const pagePath = '/' + object.slug;
      const ssrQueryData = Object.assign({ ssr: true }, object);
      const clientQueryData = Object.assign({ ssr: false }, object);

      // generate the map for export phase with {ssr: true}
      accum[pagePath] = {
        // using additional fields from the page object,
        // the pageFromPagePath() computes which page file should
        // be used to render the page object
        page: pageFromPagePath(object),
        query: ssrQueryData
      };

      // write json files that will be loaded by client
      if (outDir) {
        const jsonFilePath = path.join(outDir, _.trim(pagePath, '/'), 'init-props.json');
        fse.outputFileSync(jsonFilePath, JSON.stringify(clientQueryData));
      }

      return accum;
    }, {});
  }
}


рдкреЗрдЬ/my_page.js getInitialProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

Index.getInitialProps = async (context) => {
  const ssr = _.get(context, 'query.ssr', false);
  if (ssr) {
    // we are on server, return the data
    return _.get(context, 'query', {});
  } else {
    // we are on client side, request the data through /init-props.json endpoint
    const url = context.asPath + '/init-props.json';
    return fetch(url).then(response => {
      return response.json();
    });
  }
};

рдореИрдВ getStaticProps рдФрд░ getStaticPaths рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдмрдбрд╝рд╛ рд▓рд╛рдн рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ JSON рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдореЗрд░реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдХреЛ рдХрдо рдХрд░ рджреЗрдЧрд╛ред

// pages/my_page.js
export async function getStaticProps(context) {
  const objects = await cmsSdkCient.getEntries();
  const props = _.find(object, { type: 'my_page' })
  return { props };
}

// pages/blog/[slug].js
export async function getStaticProps(context) {
  const objects = await cmsSdkCient.getEntries();
  const props = _.find(object, { type: 'post', slug: context.params.slug })
  return { props };
}

export async function getStaticPaths() {
  const objects = await cmsSdkCient.getEntries();
  return objects
    .filter(object => object.type === 'post')
    .map(object => ({ params: { slug: object.slug } }))
}

рдореБрдЭреЗ рдХреНрдпрд╛ рдкрд░реЗрд╢рд╛рдиреА рд╣реИ, рдпрд╣ рд╕рд╡рд╛рд▓ рд╣реИ рдХрд┐ рдореИрдВ рд╣рд░ рдмрд╛рд░ getStaticProps рдпрд╛ getStaticPaths рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдмрд╛рд░ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдХреИрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓, рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ, рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрд╕рдПрд╕рдЬреА рдФрд░ рджреВрд░рд╕реНрде рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╣реИрдВ, рдпрд╣ рдкреВрдЫрдиреЗ рд▓рд╛рдпрдХ рд╣реИред рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ next.js рджреЗрд╡ рдореЛрдб рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рдХреЛрдИ рдХреИрд╕реЗ next.js рдХреЛ рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рджреВрд░рд╕реНрде рдбреЗрдЯрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рд╕рд╛рдЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред

@smnh рдЪреВрдВрдХрд┐ рдпрд╣ "рд╕рд┐рд░реНрдл рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ" рд╣реИ, рдЖрдк рдПрдХ рдмрд╛рд░ рдЕрдкрдиреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рдХреИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреГрд╖реНрда рдХреА getStatic* рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдиреЗрдЯрд╡рд░реНрдХ рдлрд┐рд░ рд╕реЗ рд╣рд┐рдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЬрд╣рд╛рдБ рддрдХ рдЖрдкрдХреЗ рджреВрд╕рд░реЗ рдкреНрд░рд╢реНрди рдХрд╛ рдкреНрд░рд╢реНрди рд╣реИ, рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред next dev рдЪрд▓рд╛рдПрдВ рдФрд░ рдЖрдк рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред

рдореБрдЭреЗ рдКрдкрд░ рджрд┐рдП рдЧрдП getStaticPaths рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХреЗрд╡рд▓ рдкрде рдкреИрд░рд╛рдореАрдЯрд░ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдПрд╕рдПрд╕рдЬреА рдкрдереЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

/store/widgets/circles-n-squares?sort=price&minWeight=2&color=black

рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдИ-рдХреЙрдорд░реНрд╕ рд╕рд╛рдЗрдЯ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рдПрдХ рдпреВрдЖрд░рдПрд▓ рдХреЗ pathname рдореЗрдВ рдЙрддреНрдкрд╛рдж рдЦреЛрдЬ рдХреЗ рд╣рд░ рдПрдХ рдкрд╣рд▓реВ рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред

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

@dpfavand рдореИрдВ рднреА рд╕рдЯреАрдХ рдЪреАрдЬрд╝ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ! рд╕реАрдПрдордПрд╕ рдореЗрдВ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрддрд┐рд╢реАрд▓ рдкреЗрдЬ рд░реВрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЪрдкрд▓рддрд╛ рд╕реАрдПрдордПрд╕ рдФрд░ рдиреЗрдХреНрд╕реНрдЯрдЬреЗ рдХреЗ рд▓рд┐рдП рдПрдХ

@timneutkens рдлреЙрд▓реЛ-рдЕрдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рд╕рдлрд▓рддрд╛ рдХреЗ рдмрд┐рдирд╛ рджреЛ рддрд░реАрдХреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реНрд▓рдЧ рдорд╛рди рдХреЛ getStaticPaths рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ getStaticProps рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдХреЗрд╕ 1, рдлрд╝рд╛рдЗрд▓ рдХреЛ pages/[...slug].jsx рдорд╛рдирддреЗ рд╣реБрдП, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд▓рдЧ рдХрд░реЗрдВ:

export async function unstable_getStaticPaths() {
    return [{ params: { slug: 'en/about' } }];
}

export async function unstable_getStaticProps({ params }) {
    console.log('params', params);
    return { slug: params.slug };
}

рдЙрдкрд░реЛрдХреНрдд рдорд╛рдорд▓реЗ рдореЗрдВ, params рдореЗрдВ getStaticProps рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рд╣реИ - рдХреЛрдИ slug рдХреБрдВрдЬреА рдирд╣реАрдВред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдЫреЛрдЯреА рд╕реА рджреБрдирд┐рдпрд╛! Fastr_conf рдкрд░ рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рджред

рдЕрд░реЗ! Nextjs рдЯреАрдо рдиреЗ рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рд╡рд░реНрддрдорд╛рди рдХреИрдирд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдореБрджреНрджреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд┐рдХрдЯ рдЦреБрд▓рд╛ рд╣реИ: https://github.com/zeit/next.js/issues/10190

@smnh рдореИрдВ рдЬреЛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬреЛ рд╕рд╛рдЭрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ

рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдкрд░ Netlify рдмрд┐рд▓реНрдб рд╣реБрдХ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ CMS рдореЗрдВ рд╡реЗрдмрд╣реБрдХ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВред GetStaticProps рддрдм рдХреЗрд╡рд▓ рдкреГрд╖реНрда рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж @zeusdeux
рдкреБрдирдГ:

рдЬрд╣рд╛рдБ рддрдХ рдЖрдкрдХреЗ рджреВрд╕рд░реЗ рдкреНрд░рд╢реНрди рдХрд╛ рдкреНрд░рд╢реНрди рд╣реИ, рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛ рджреЗрд╡ рдЪрд▓рд╛рдПрдВ рдФрд░ рдЖрдк рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рд╣реИрдВред

рдЕрдЧрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреИрд╢ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рд╕реАрдПрдордПрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдмрджрд▓рддрд╛ рд╣реВрдВ, рддреЛ рдХреИрд╢ рдХреИрд╕реЗ рдЕрдорд╛рдиреНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ dev рджреНрд╡рд╛рд░рд╛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди next.js рдХреЛ рд░реЛрдХреЗ рдмрд┐рдирд╛ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдП рдмрд┐рдирд╛ :)

рдЕрдЧрд░ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреИрд╢ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рд╕реАрдПрдордПрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдмрджрд▓рддрд╛ рд╣реВрдВ, рддреЛ рдХреИрд╢ рдХреИрд╕реЗ рдЕрдорд╛рдиреНрдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ dev рджреНрд╡рд╛рд░рд╛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди next.js рдХреЛ рд░реЛрдХреЗ рдмрд┐рдирд╛ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдП рдмрд┐рдирд╛ :)

getStaticPaths рдХреЗрд╡рд▓ рдПрдХ рдЙрддреНрдкрд╛рджрди рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдХреЗрд╡рд▓ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдХреЙрд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реЗрдЪрд┐рдВрдЧ рд╡рд┐рдзрд┐ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрд░реЗ, рдореИрдВрдиреЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рдХрд┐ рдХреЛрдИ рднреА рдЙрд╕реА рдореБрджреНрджреЗ рдкрд░ рдЪрд▓рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛ред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рдорд╛рд░реНрдЧреЛрдВ рдкрд░ рдПрдХ рд╣реА рдкреГрд╖реНрда рд╣реИ unstable_getStaticProps :

1. /providers/[category]/[city] 
2. /providers/[category] 

рд╕реНрд░реЛрдд рдХреЛрдб рджреЛрдиреЛрдВ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рддреЛ рдкрд╣рд▓реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕реНрд░реЛрдд рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдХреЗрд╡рд▓ export { default } from './[city]'; рдЬреИрд╕реЗ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ рдХрд┐ getStaticProps рд╕реЗ рдбреЗрдЯрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред рдЕрдЧрд░ рдореИрдВ рджреЛрдиреЛрдВ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдХреЛрдб рдХреЛ рд╣рд╛рд░реНрдбрдХреЙрдкреА рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@homoky рдЖрдкрдХреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

export { default, unstable_getStaticProps } from './[city]';

рдореИрдВ рдПрд╕рдПрд╕рдЬреА рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рднрд╛рдЧреНрдп рдХреЗ рдмрд┐рдирд╛ред

рдПрд╕рдПрд╕рдЬреА рдореЗрдВ v9.2.1 рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдХреЛрдб рдиреАрдЪреЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

function Page({ stars }) {
  return <div>Next stars: {stars}</div>
}

Page.unstable_getStaticProps = async ctx => {
  return { props: { stars: 5 } }
}

export default Page

next build рд╕реЗ рдореЗрд░рд╛ рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рджрд┐рдЦрд╛рддрд╛ рд╣реИ:

Page                                                           Size     First Load
тФМ тЧЛ /                                                          354 B       72.1 kB
...
╬╗  (Server)  server-side renders at runtime (uses getInitialProps or getServerProps)
тЧЛ  (Static)  automatically rendered as static HTML (uses no initial props)
тЧП  (SSG)     automatically generated as static HTML + JSON (uses getStaticProps)

@joostmeijles unstable_getStaticProps рдХреЛ рдкреГрд╖реНрда рдШрдЯрдХ рд╕реЗ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

export const unstable_getStaticProps = async () => {
  return {
    props: { stars: 5 }
  }
}

@joostmeijles unstable_getStaticProps рдХреЛ рдкреГрд╖реНрда рдШрдЯрдХ рд╕реЗ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

export const unstable_getStaticProps = async () => {
  return {
    props: { stars: 5 }
  }
}

рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдЗрд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдХреЛрдИ рдЗрд╕рдХрд╛ рдПрдХ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдХрд╛рдордХрд╛рдЬреА рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдХреИрдЪ-рдСрд▓ рд░реВрдЯ рдХреЗ рд╕рд╛рде рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреЗрдЬ (рд╕реАрдПрдордПрд╕ рд╕реЗ) рдмрдирд╛рдирд╛ рдФрд░ рдПрд╕рдПрд╕рдЬреА рдЪреЗрдХ рдЖрдЙрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ https://github.com/agility/agilitycms-next-starter- рдПрд╕ рдПрд╕ рдЬреА

рдореИрдВ рдПрдХ-рджреЛ рдмрд╛рд░ рд╕реНрдЯрдореНрдкреНрдб рд╣реЛ рдЧрдпрд╛ рдФрд░ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

zeit.co/now рдкрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХрд░рддреЗ рд╕рдордп рдореИрдВ getStaticProps рд╕рд╛рде рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рдЕрдЧрд▓реЗ API рдорд╛рд░реНрдЧреЛрдВ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдБрдЪ рд╕рдХрддрд╛ рд╣реВрдБ? рдЖрдЗрд╕реЛрдореЙрд░реНрдлрд┐рдХ-рдлрд╝реЗрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкреВрд░реНрдг URL рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ; рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдпрд╣ http://localhost : 3000 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдм рддреИрдирд╛рддреА рдХреЗ рд╕рд╛рде рдирд╣реАрдВ (рдпрд╛ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЧрд▓рдд рдХрд┐рдпрд╛ тАНтЩВя╕П)ред рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рд╣реВрдВ, рддреЛ рдПрдкреАрдЖрдИ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ?

рдЖрдк рд╕реАрдзреЗ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдорд╛рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ http рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдмрд╣реБрдд рдХрдо рдУрд╡рд░рд╣реЗрдб рд╣реИред

рдЖрдк рд╕реАрдзреЗ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдорд╛рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ http рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдмрд╣реБрдд рдХрдо рдУрд╡рд░рд╣реЗрдб рд╣реИред

рдХреЛрдИ рднреА рд╕рдВрд╕рд╛рдзрди рдЬреЛ рдореИрдВ рдЙрд╕ рд╡рд┐рд╖рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реВрдБ? рдореИрдВ zeit.co/now рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рдмреАрдЪ рдореЗрдВ рд╣реВрдВ :)

рдХрд╛рдлреА рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛, рдЖрдпрд╛рдд рдХрд░реЗрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ:

import MyFunction from '../lib/somewhere'


export async function /* unstable_ */getStaticProps() {
  const result = await MyFunction()
}

рдПрдХ рдФрд░ рд╕рд╡рд╛рд▓: рдХреНрдпрд╛ getStaticProps / getStaticPaths рдФрд░ getServerProps рд╕рд╛рде-рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдореИрдВрдиреЗ рдПрд╕рдПрд╕рдЬреА рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкреЗрдЬ рдкреНрд░реАрд░реЗрдВрдбрд░ рдХрд┐рдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╕реАрдбреАрдПрди рдХреИрд╢ рдореЗрдВ рдХреЛрдИ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреЗрдЬ рдСрди-рдбрд┐рдорд╛рдВрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рдПрд╕рдЖрд░ рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛?

getStaticProps SSR рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢реЗ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛,

getStaticProps SSR рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢реЗ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛,

@lfades , рдЕрдЧрд░ рдореИрдВ рдЖрдкрдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдкрд░ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдХрдИ рд╣рдЬрд╛рд░ рдкреГрд╖реНрдареЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкреНрд░реА-рд░реЗрдВрдбрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ... рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ /products/[productId].js рдЧрддрд┐рд╢реАрд▓ рдкрде рдкреГрд╖реНрда рд╣реИред рдЕрдЧрд░ рдореИрдВ getStaticProps , рдФрд░ getStaticPaths рд╕реЗ рд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╕реАрдбреАрдПрди рдХреИрд╢ рдореЗрдВ /products/123 рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдерд╛' t рдореЗрдВ getStaticPaths ), рдпрд╣ SSR рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛, getStaticProps рдЪрд▓рд╛рдПрдЧрд╛, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрд╢ рдХрд░реЗрдЧрд╛?

рдЕрдиреБрд╡рд░реНрддреА рдкреНрд░рд╢реНрди: рдпрджрд┐ рдореИрдВ getStaticPaths рдЖрдкреВрд░реНрддрд┐ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рддреЛ рдХреНрдпрд╛ рдпрд╣ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛?

@flintinatux рд╣рд╛рдБ рдФрд░ рд╣рд╛рдБ

getStaticProps SSR рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛

рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ 404s рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ getStaticProps res рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ - рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдкрд░ рдпрд╛ рддреЛ рдпрд╣ 200, рдпрд╛ 500 рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ?

@ davidbailey00 рд╕реНрдерд┐рд░ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдмрдирд╛рддреЗ рд╕рдордп 404 рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 404 рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдмреЗрд╢рдХ рдЕрдЧрд░ рдореИрдВ рдПрдХ рдкреВрд░реНрдг рд╕реНрдерд┐рд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рд╕реНрдЯреЗрдЯрд╕ рдХреЛрдб рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд┐рд░реНрдл рдПрдХ рдлрд╛рдЗрд▓ рд╣реИред рдореИрдВ getStaticProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ZEIT Now рдореЗрдВ рд╣рд╛рдЗрдмреНрд░рд┐рдб рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ - рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ getStaticPaths рд╕рдореНрдорд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ 404 рдкреГрд╖реНрдареЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЧрддрд┐рд╢реАрд▓ рдкрде рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рдмрд▓рдкреВрд░реНрд╡рдХ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдпрд╣ рд╕рд┐рд░реНрдл рдЕрдм рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╡реИрд╕реЗ рд╣реА next start ред

рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдБ рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛: рдпрд╣ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╣реИ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреБрдЫ рднреА рдЕрднреА рднреА рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди getServerProps рдпрд╛ getInitialProps рд╕рд╛рде 404 рдкреГрд╖реНрдареЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ - рдпрджрд┐ getStaticProps рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╕рдордп getStaticPaths рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдХрд┐рд╕реА рднреА рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ рд╣реИ рдЬреЛ рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ рдЕрдЪреНрдЫрд╛ рдПрд╕рдИрдУред

рд╣рдо рд╢рд╛рдпрдж рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рдФрд░ рддрд░реАрдХреЗ рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯреЗрдВ (рдЬреИрд╕реЗ рд╕реАрдЖрд░рдП) /* рд╕реЗ index.html рдЬрд╣рд╛рдВ 404 рдЕрднреА рднреА 200 рд╣реИред

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ, рдореЗрд░рд╛ рдПрдХ рд╕реАрдзрд╛ рд╕рд╡рд╛рд▓ рд╣реИ, рдореИрдВ рдХреБрдЫ рдкреЗрдЬреЛрдВ рдХреЛ SSG рдореЗрдВ рдирдП [unstable_]getStaticProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡реЗрдмрд╕рд╛рдЗрдЯ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВред amp рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдпрд╣ рдЕрдм рддрдХ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдпрджрд┐ рдХрд┐рд╕реА рдкреГрд╖реНрда рдореЗрдВ [unstable_]getStaticProps , рддреЛ amp рдЕрдХреНрд╖рдо рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдЕрдЧрд▓реЗ v9.2.1 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдЗрд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

import React from "react";
import { useAmp } from "next/amp";

export const config = { amp: `hybrid` };

const AmpExample = ({ date }) => {
  const isAmp = useAmp();
  return (
    <>
      <p>
        Welcome to the {isAmp ? `AMP` : `normal`} version of the Index page!!
      </p>
      <p>date: {date}</p>
    </>
  );
};
/**
 * If I get the dynamic data from getStaticProps,
 * page is SSG render but AMP is disabled when accessing
 * with `/ampExample?amp=1`
 */
export async function unstable_getStaticProps() {
  return {
    props: {
      date: new Date().toISOString(),
    },
  };
}

/**
 * If I get the dynamic data from getInitialProps,
 * page is SSR render but AMP is disabled when accessing
 * with `/ampExample?amp=1`
 */
// AmpExample.getInitialProps = () => {
//   return { date: new Date().toISOString() }
// }
export default AmpExample;

рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкреЗрдЬ SSG рдФрд░ amp рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдХреЛрдИ рдорджрдж?

рдирдорд╕реНрддреЗ, App рдШрдЯрдХ ( _app.tsx ) рдХреЗ рд▓рд┐рдП getStaticProps рдХрд╛ рд╕рдорд░реНрдерди рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрд╛рдиреА рдирд┐рд░реНрдорд╛рдг рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рд╕рднреА рдкреГрд╖реНрда рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдЬреИрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП?

рдирдорд╕реНрддреЗ, App рдШрдЯрдХ ( _app.tsx ) рдХреЗ рд▓рд┐рдП getStaticProps рдХрд╛ рд╕рдорд░реНрдерди рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрд╛рдиреА рдирд┐рд░реНрдорд╛рдг рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рд╕рднреА рдкреГрд╖реНрда рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдЬреИрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП?

@ pkral78 рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рд╡рд┐рдХрд╛рд╕ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реВрдВред

рдореИрдВрдиреЗ "рд▓реЗрдЖрдЙрдЯ рдПрдЬрд╝ рдП рд╣рд╛рдпрд░ рдСрд░реНрдбрд░ рдХрдВрдкреЛрдиреЗрдВрдЯ (HOC)" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдПрдХ рд▓реЗрдЖрдЙрдЯ рдмрдирд╛рдпрд╛ (рдЕрдм рд▓рд░реНрдирд┐рдВрдЧ рдбреЙрдХреНрд╕ рдореЗрдВ рдирд╣реАрдВ ЁЯд╖тАНтЩВя╕П)ред

рд╡реИрд╕реЗ рднреА, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рддрд░рд╣ рдПрдХ рд▓реЗрдЖрдЙрдЯ рдмрдирд╛рдпрд╛ рд╣реИ (рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг):

import React from "react";
import Head from "next/head";

const withSSGLayout = Page => {
  const WithSSGLayout = props => {
    return (
      <>
        <Head>
          <title>My Web Page</title>
          <link rel="icon" href="/favicon.ico" />
          <meta name="viewport" content="width=device-width, initial-scale=1" />
          <link
            href="https://fonts.googleapis.com/css?family=Roboto:400,700&display=swap"
            rel="stylesheet"
          />
        </Head>
        <Page {...props} />
      </>
    );
  };

  WithSSGLayout.unstable_getStaticProps = async () => {
    const pageStaticProps = Page.unstable_getStaticProps
      ? await Page.unstable_getStaticProps()
      : {};

    // Here you can make parent level queries too
    return {
      props: {
        ...pageStaticProps.props,
        parentProp: `dynamic prop-${new Date().toISOString()}`,
      },
    };
  };
  return WithSSGLayout;
};

export default withSSGLayout;

рдФрд░ рдлрд┐рд░ рдЙрд╕ рдкреГрд╖реНрда рдореЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЖрдк рдПрдЪрдУрд╕реА рдХреЛ рд╕рд░рд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдЖрдкрдХреЛ [unstable_]getStaticProps рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛), рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХрд╛ "рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛" рдорд┐рд▓рд╛ рдФрд░ рдкреНрд░рддрд┐ рдкреГрд╖реНрда рдПрд╕рдПрд╕рдЬреА рдкреНрд░рд╢реНрдиред

import React from "react";
import withSSGLayout from "../hocs/withSSGLayout";

export const config = { amp: `true` };

const Index = props => {
  const { date, parentProp } = props;
  return (
    <div>
      <h1>Example</h1>
      <h3>Local Prop?: {date}</h3>
      <h3>Parent Prop?: {parentProp}</h3>
    </div>
  );
};

// In theory you could do direct database queries
Index.unstable_getStaticProps = async () => {
  // Here you can make page level queries
  return {
    props: {
      date: new Date().toISOString(),
    },
  };
};
const IndexHOC = withSSGLayout(Index);

export const { unstable_getStaticProps } = IndexHOC;
export default IndexHOC;

рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рд╕рдордЭрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреЗрд░реЗрдВрдЯ рдореЗрдВ рд▓рд┐рдВрдХ рдФрд░ рдкреЗрдЬ рд╡рд╛рд▓реЗ рдореЗрдВ рдкреНрд░рддрд┐ рдкреЗрдЬ рдХрдВрдЯреЗрдВрдЯ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛ред

@robertovg рдЖрдкрдХреЛ рдореЙрдбреНрдпреВрд▓ рд╕реНрддрд░ рдкрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдкреЗрдбрд╝ рд╕реЗ рд╣рд┐рд▓ рдЧрдпрд╛ рд╣реИред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдкрдиреЗ рдЗрд╕реЗ рдореЙрдбрд▓ рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдкрд░ рдЕрдзрд┐рдХ рдХреЛрдб рднреЗрдЬреЗ рдЬрд╛рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

@timneutkens рдХреНрдпрд╛ рдЖрдк рд╢рд╛рдпрдж рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рдмрд╕ "рд▓реЗрдЖрдЙрдЯ рд▓реЗрд╡рд▓ рдПрд╕рдПрд╕рдЬреА рдХреНрд╡реЗрд░реА" рдФрд░ "рдкреЗрдЬ рд▓реЗрд╡рд▓ рдПрд╕рдПрд╕рдЬреА рдХреНрд╡реЗрд░реА" рджреЛрдиреЛрдВ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕ рдПрдЪрдУрд╕реА рд▓реЗрдЖрдЙрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ред

рдореЗрд░реЗ рд▓рд┐рдП рдореБрдЦреНрдп рдмрд╛рдзрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ "рдирд┐рд░реНрдпрд╛рдд [рдЕрд╕реНрдерд┐рд░_] getStaticProps" рдерд╛ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдПрд╕рдПрд╕рдЬреА рдкреГрд╖реНрда рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреА рднреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ amp + SSG рд╕рдВрдЧрдд рд╣реЛрдЧрд╛, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдкреВрдЫрд╛ рдерд╛ред

рдзрдиреНрдпрд╡рд╛рдж ЁЯЩП

@robertovg рдкрд╣рд▓реЗ, рдбреЗрдЯрд╛ рд╕реЗ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рд╕рд╛рдЭрд╛ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рд░рд▓ рд╣реЛрдЧрд╛:

import Layout from '../components/layout'

const Page = () => (
  <Layout>
    <h1>Hello World!</h1>
  </Layout>
)

export default Page

рдФрд░ рдлрд┐рд░ getStaticProps рд▓рд┐рдП рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдЭрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рдкреВрд░рд╛ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

import fetchSharedData from '../lib/fetch-shared-data'
import Layout from '../components/layout'

export const unstable_getStaticProps = async () => {
  const sharedData = await fetchSharedData()
  const pageProps = {...}

  return {  props: { ...sharedData, ...pageProps } }
}

const Page = () => (
  <Layout>
    <h1>Hello World!</h1>
  </Layout>
)

export default Page

@robertovg рдкрд╣рд▓реЗ, рдбреЗрдЯрд╛ рд╕реЗ рд▓реЗрдЖрдЙрдЯ рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рд╕рд╛рдЭрд╛ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рд░рд▓ рд╣реЛрдЧрд╛:

import Layout from '../components/layout'

const Page = () => (
  <Layout>
    <h1>Hello World!</h1>
  </Layout>
)

export default Page

рдФрд░ рдлрд┐рд░ getStaticProps рд▓рд┐рдП рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдЭрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рдкреВрд░рд╛ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

import fetchSharedData from '../lib/fetch-shared-data'
import Layout from '../components/layout'

export const unstable_getStaticProps = async () => {
  const sharedData = await fetchSharedData()
  const pageProps = {...}

  return {  props: { ...sharedData, ...pageProps } }
}

const Page = () => (
  <Layout>
    <h1>Hello World!</h1>
  </Layout>
)

export default Page

рдореИрдВ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ рдФрд░ рд╕рдордЭрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореИрдВ рдЬрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЙрдард╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рд╡рд╣ рдпрд╣ рдереА рдХрд┐ рд╕рд╛рдЭрд╛ рдбреЗрдЯрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдХреИрд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдПред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ <Header /> рдЬреЛ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП sharedData рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡реЗ рдПрдХ рд╣реЗрдбрд▓реЗрд╕ рд╕реАрдПрдордПрд╕ рд╕реЗ рдЖ рд░рд╣реЗ рд╣реИрдВред рдЖрдкрдХреЛ <Header /> рдХреЛ <Layout /> рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░реЙрдкреНрд╕ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдЖрдкрдХреЛ рдЙрди рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдореЗрдВ <Header /> рдЗрдВрдЬреЗрдХреНрд╢рди рджреЛрд╣рд░рд╛рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рдирдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдПрдЪрдУрд╕реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдЖрдк рдПрдЪрдУрд╕реА рдореЗрдВ рдПрдХ рдмрд╛рд░ <Header /> рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдХреЛрдб рджреЛрд╣рд░рд╛рд╡ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП @ pkral78 рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рдерд╛ред

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдХреЛрдб рджреЛрд╣рд░рд╛рд╡ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП @ pkral78 рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рдерд╛ред

рдпрд╣ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдерд╛ред _app рдкреЗрдЬ рдХрд╛ рдЕрдкрдирд╛ getStaticProps рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдкреЗрдЬ рд░реЗрдВрдбрд░ рдХреЗ рджреМрд░рд╛рди рдПрдХ рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕рд╣реЗрдЬреЗ рдЧрдП props рдХреЛ рдЕрдЧрд▓реЗ рд░реЗрдВрдбрд░ рдХрд┐рдП рдЧрдП рдкреЗрдЬ рдкрд░ рдкрд╛рд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЙрдЪрд┐рдд рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬ рдПрдХ рдЗрдЪреНрдЫрд┐рдд рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ:

// /pages/[...slug].jsx
import ReactDOMServer from "react-dom/server";

export async function unstable_getStaticProps({ params: { slug } }) {
  const filePath = "../content/" + slug.join("/") + ".mdx";
  const { default: Component } = await import(filePath);
  const content = ReactDOMServer.renderToStaticMarkup(<Component />);
  return {
    props: { title: slug.join(" "), content }
  };
}

export default function Page({ title, content }) {
  return (
    <div>
      <h1>{title}</h1>
      <div dangerouslySetInnerHTML={{ __html: content }} />
    </div>
  );
}

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЗрдЪреНрдЫрд┐рдд рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдереЛрдбрд╝рд╛ рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧрддрд╛ рд╣реИ:

[ warn ]  ./pages/[...slug].jsx
Critical dependency: the request of a dependency is an expression

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

рдУрд╣, рдареАрдХ рд╣реИ, рдЬрдм рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

const { default: Component } = await import(`../content/${slug.join("/")}.mdx`);

https://codesandbox.io/s/happy-oskar-40bug

рдпрд╣ рдЖрдкрдХреЗ рдЖрдпрд╛рдд рдлрд╝рд╛рдЗрд▓ рдкрде рдХреЗ рдЧрддрд┐рд╢реАрд▓ рд╣реЛрдиреЗ рдХреА рд╢рд┐рдХрд╛рдпрдд рдХрд░ рд░рд╣рд╛ рд╣реИ

рдереВ, рейреж рдЬрдирд╡рд░реА реирежреиреж рдХреЛ режреж:реиреп рдмрдЬреЗ, рдЬрди рдкреЛрдЯрдореНрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдмрд╛рдд
https://codesandbox.io/s/nifty-cache-jspqr рдПрдХ рдЗрдЪреНрдЫрд┐рдд рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди
рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рд▓рдЧ рд░рд╣рд╛ рд╣реИ:

// /рдкреГрд╖реНрда/[...рд╕реНрд▓рдЧ].jsximport ReactDOMServer "react-dom/server" рд╕реЗ;
рдирд┐рд░реНрдпрд╛рдд async рд╕рдорд╛рд░реЛрд╣ рдЕрд╕реНрдерд┐рд░_getStaticProps({ params: {рд╕реНрд▓рдЧ}}) {
// рдпрд╣ рднреА рдХрд┐рддрдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ?
const filePath = "../content/" + slug.join("/") + ".mdx";
рдХреЙрдиреНрд╕реНрдЯ {рдбрд┐рдлрд╝реЙрд▓реНрдЯ: рдШрдЯрдХ} = рдЖрдпрд╛рдд рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ (рдлрд╝рд╛рдЗрд▓рдкрд╛рде);
рдХреЙрдиреНрд╕реНрдЯ рдХрдВрдЯреЗрдВрдЯ = ReactDOMServer.renderToStaticMarkup (рдШрдЯрдХ);
рд╡рд╛рдкрд╕реА {
рд╕рд╣рд╛рд░рд╛: {рд╢реАрд░реНрд╖рдХ: slug.join(" "), рд╕рд╛рдордЧреНрд░реА}
};
}
рдирд┐рд░реНрдпрд╛рдд рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдкреГрд╖реНрда ({рд╢реАрд░реНрд╖рдХ, рд╕рд╛рдордЧреНрд░реА}) {
рд╡рд╛рдкрд╕реА (


{рд╢реАрд░реНрд╖рдХ}




);
}

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЗрдЪреНрдЫрд┐рдд рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд▓рдЧрддрд╛ рд╣реИ a
рдереЛрдбрд╝рд╛ рд╕рдВрджрд┐рдЧреНрдз:

[рдЪреЗрддрд╛рд╡рдиреА] ./рдкреГрд╖реНрда/[...рд╕реНрд▓рдЧ].jsx
рдЧрдВрднреАрд░ рдирд┐рд░реНрднрд░рддрд╛: рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/zeit/next.js/issues/9524?email_source=notifications&email_token=AAADKRKOL34WKTG7J5QFRJ3RAIGPBA5CNFSM4JRPBEL2YY3PNVWWWK3TUL52HS4DFVREXG43VMVBW63DNMVK-5ZYLOY
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAADKRIWNA2DSMWFRGD453DRAIGPBANCNFSM4JRPBELQ
.

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдХреЛрдб рджреЛрд╣рд░рд╛рд╡ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП @ pkral78 рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рдерд╛ред

рдпрд╣ рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдерд╛ред _app рдкреГрд╖реНрда рдХрд╛ рдЕрдкрдирд╛ getStaticProps рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдкреГрд╖реНрда рд░реЗрдВрдбрд░ рдХреЗ рджреМрд░рд╛рди рдПрдХ рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕рд╣реЗрдЬреЗ рдЧрдП props рдХреЛ рдЕрдЧрд▓реЗ рд░реЗрдВрдбрд░ рдХрд┐рдП рдЧрдП рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЙрдЪрд┐рдд рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред

@ pkral78 , рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрд╕рдПрд╕рдЬреА рд╕рд╛рдЗрдЯреЛрдВ рдореЗрдВ рдореИрдВ рдиреЗрдХреНрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рдПрдХ "рд╕рд╛рдорд╛рдиреНрдп рдЯреБрдХрдбрд╝рд╛" (рд╢реАрд░реНрд╖рд▓реЗрдЦ, рдкрд╛рдж рд▓реЗрдЦ, рд╕рд╛рдЗрдб рдмрд╛рд░реНрд╕ ...) рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдФрд░ рдХреНрдпреЛрдВ рди рдХреЗрд╡рд▓ рдЙрд╕ рд╕рд╛рдорд╛рдиреНрдп рдЯреБрдХрдбрд╝реЗ рдХреЗ рд▓рд┐рдП _app рдореЗрдВ рдХреНрд╡реЗрд░реА рдмрдирд╛рдИ, рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдкрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрд┐рдирд╛ рдмрд╛рд▓ рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдПрдВред

рдореЗрд░реА рдПрдХрдорд╛рддреНрд░ рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЗрд╕реЗ _app.js рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкреГрд╖реНрда рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ "рдХреЙрдорди рдкреАрд╕" рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд┐ рдореИрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд░ рд░рд╣рд╛ рдерд╛, рдореИрдВ рдЗрд╕реЗ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рд░рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдореЗрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреЗрдЬ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдИ рд▓реЗрдЖрдЙрдЯ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, "рдЗрд╕реАрд▓рд┐рдП рдореИрдВрдиреЗ withSSGLayout рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдореЗрд░рд╛ рдПрдЪрдУрд╕реА рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рди рдХреЗрд╡рд▓ рдПрд╕рдПрд╕рдЬреА рдкреЗрдЬ рдмрд▓реНрдХрд┐ рдПрд╕рдПрд╕рдЖрд░ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдмреЗрд╕ рд╡рд╛рд▓реЗ, рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдПрд╕рдПрд╕рдЬреАрд▓рд╛рдЙрдЯ рдмрдирд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рдерд╛ред рдореИрдВ рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ рдЕрдЧрд░ рд▓реЗрдЖрдЙрдЯ рдорд╛рддрд╛-рдкрд┐рддрд╛ getStaticProps рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рднреА рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд╡реИрд╕реЗ рднреА, рдиреЗрдХреНрд╕реНрдЯ рдореЗрдВ SSG рд╣реЛрдиреЗ рд╕реЗ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХреА рд╡реЗрдм рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдЯреВрд▓ рдмрди рдЬрд╛рдПрдЧрд╛

@Janpot https://github.com/zeit/next.js/issues/9524#issuecomment -580012327 рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ

import() рдореЗрдВ рдХрднреА рднреА рдЧрддрд┐рд╢реАрд▓ рдкрдереЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ

@timneutkens рдЬрд╝рд░реВрд░, рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдХреНрдпрд╛ getStaticProps рдХреЗрд╡рд▓ рдмрд╛рд╣рд░реА рдПрдкреАрдЖрдИ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ?

@ рдЬреЗрдирдкреЛрдЯ рдЖрдк рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдХреНрд╕рд░ рдЖрдк рдХреБрдЫ рдмрд╛рд╣рд░реА рдПрдкреАрдЖрдИ рд╕реЗ рдкреВрдЫрддрд╛рдЫ рдХрд░ рд▓реЗрдВрдЧреЗред

@timneutkens рдареАрдХ рд╣реИ, @mdx-js/runtime рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @next/mdx рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдпред

import ReactDOMServer from "react-dom/server";
import { promises as fs } from "fs";
import MDX from "@mdx-js/runtime";

export async function unstable_getStaticProps({ params: { slug } }) {
  const mdxContent = await fs.readFile(`./content/${slug.join('/')}.mdx`, {
    encoding: "utf-8"
  });
  const content = ReactDOMServer.renderToStaticMarkup(<MDX>{mdxContent}</MDX>);
  return {
    props: { title: slug.join(" "), content }
  };
}

export default function Page({ title, content }) {
  return (
    <div>
      <h1>{title}</h1>
      <div dangerouslySetInnerHTML={{ __html: content }} />
    </div>
  );
}

@ рдЬрдирдкреЛрдЯ рд╣рд╛рдБ! рдЖрдк рд╕рд╛рджреЗ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣реА рд╣рдо nextjs.org/docs рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред

https://github.com/zeit/next.js/issues/9524#issuecomment -580207073 рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдпрд╣ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ SSR рдХреЗ рд╕рд╛рде Next рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рдЕрдиреБрд░реЛрдз рд╣реИ рдЬреЛ рд▓реЗрдЖрдЙрдЯ рд╕реНрддрд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдРрдк рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдШрдЯрдХреЛрдВ (рдирд╡рдмрд╛рд░, рдкрд╛рдж рд▓реЗрдЦ, рдФрд░ рдЧрддрд┐рд╢реАрд▓ рдмрдЪреНрдЪреЛрдВ) рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдлрд┐рд░, рдЧрддрд┐рд╢реАрд▓ рдмрдЪреНрдЪреЗ рдЖрдорддреМрд░ рдкрд░ рдкреГрд╖реНрда-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЧреНрд░рд╛рдлрд╝рдХреЙрд▓ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИ, рдореИрдВ рдЙрди рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдХреЛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдкрд░ рдХреЛрдб рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЕрд░реЗ!
рдореИрдВ рдпрд╣рд╛рдБ рдмрд┐рд▓рдХреБрд▓ рдирдпрд╛ рд╣реВрдБред рдмрд╕ рдРрдк рдХреЛ рдиреЗрдХреНрд╕реНрдЯрдЬреЗрдПрд╕ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред

рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рд╕реЗ рдмрд╣реБрдд рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛрдЧрд╛ - рдХрдИ рднрд╛рд╖рд╛ рд╕рдВрд╕реНрдХрд░рдгред рдЬрд┐рд╕ рд╡реЗрдм рдРрдк рдкрд░ рдореИрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЙрд╕рдореЗрдВ 16 рднрд╛рд╖рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдПрдХ рджрд┐рди рдореЗрдВ 100.000+ рдкреГрд╖реНрда рджреГрд╢реНрдп рд╣реИрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд▓реИрдВрдбрд┐рдВрдЧ рдкреГрд╖реНрда рд╢рд╛рдирджрд╛рд░ рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рд░реВрдЯрд┐рдВрдЧ рд╣реИред

рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдореИрдВ рдЕрдиреБрд░реЛрдз рд╣реЗрдбрд░ рдпрд╛ рдХреБрдХреАрдЬрд╝ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЙрдЪрд┐рдд рднрд╛рд╖рд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рд╣рд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкрде рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреИрд╕реЗ /en, /de, /fr рдФрд░ "/" рдореЗрдХ рдиреЗрдХреНрд╕реНрдЯрдЬреЗрдПрд╕ рд╕рд┐рд░реНрдл рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ?

ReactDOMServer.renderToStaticMarkup рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ unstable_getStaticProps рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдФрд░ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЗрд╕рдиреЗ рдореЗрд░реЗ (рдореЛрдмрд╛рдЗрд▓) рдкреЗрдЬрд╕реНрдкреАрдб рд╕реНрдХреЛрд░ рдХреЛ 96 рд╕реЗ рдмрдврд╝рд╛рдХрд░ 100 рдХрд░ рджрд┐рдпрд╛ рд╣реИред .

рдореИрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд┐рдирд╛ рдкреЗрдЬ рдкрд░ рдЬрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдареАрдХ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдПрд╕рдПрд╕рдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдкреЗрдЬ рд▓реЛрдб рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░рд┐рдПрдХреНрдЯ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдореЗрд░реА рд╕рдордЭ рдХреА рдХрдореА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдФрд░ рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╛рди рд╣реЛрдЧрд╛, рдФрд░ рдореИрдВ рдШрдЯрдХреЛрдВ рдХреЛ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡-рдкреНрд░рддрд┐рдкрд╛рджрди рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ (рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдПрд╕рдПрд╕рдЬреА рдпрд╣реА рдХрд░ рд░рд╣рд╛ рдерд╛)ред

рдХреНрдпрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ, рдПрдХ рдмрдЧ рд╣реИ, рдпрд╛ рдХреБрдЫ рдФрд░ рдЬреЛ рдореИрдВ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБ?

рдкреВрд░реНрд╡-рдкреНрд░рддрд┐рдмрджреНрдз: https://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2F5e310826bcf5030008a91209--josephduffynextjs.netlify.com%2Fposts%2Fgathered-1-0-1&tab=mobile
рдкреНрд░рддрд┐рдмрджреНрдз: https://github.com/JosephDuffy/josephduffy.co.uk/pull/54/commits/d23898b874e5088ebcfabf577ee396b476ed97e4
рдкреЛрд╕реНрдЯ-рдХрдорд┐рдЯ: https://developers.google.com/speed/pagespeed/insights/?url=https%3A%2F%2F5e3371beda1b8f0009368ef9--josephduffynextjs.netlify.com%2Fposts%2Fgathered-1-0-1&tab=mobile

@ рдЬреЛрд╕реЗрдл рдбрдлреА

рддреЛ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрд╕рдПрд╕рдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдкреЗрдЬ рд▓реЛрдб рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИред

рдпрд╣ рдбреЛрдо рдХреЛ рд╣рд╛рдЗрдбреНрд░реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ:

  1. рдЖрдкрдХрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ SSR html рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ DOM рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ
  2. рд░рд┐рдПрдХреНрдЯ рдкреВрд░реЗ рд╡рд░реНрдЪреБрдЕрд▓ рдбреЛрдо рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ
  3. рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЗрди рдбреЛрдо рдХреЛ рдкрд╛рд░ рдХрд░рддреА рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд┐рдВрдХ рдХрд░рддреА рд╣реИ (рд╣рд╛рдЗрдбреНрд░реЗрд╢рди)

рдпрджрд┐ рдЖрдкрдХреА рд╕рд╛рдордЧреНрд░реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдерд┐рд░ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдХреЛрдИ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдпрд╛ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЪрд░рдг 2 рдФрд░ 3 рдПрдХ рддрд░рд╣ рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИрдВред рдЕрдкрдиреА рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдШрдЯрдХ рдкреЗрдбрд╝ рдХреЛ 1 рдШрдЯрдХ рдХреЗ рд╕рд╛рде 1 рдШрдЯрдХ рддрдХ рдХрдо рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдФрд░ рд╣рд╛рдЗрдбреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИред (+ dangerouslySetInnerHTM рдЬрд▓рдпреЛрдЬрди рдХреЗ рджреМрд░рд╛рди рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)

<div dangerouslySetInnerHTML={{ __html: props.htmlContent }} />

рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд╕рд╛рде рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдФрд░ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

рдПрдХ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдкреГрд╖реНрда рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдпрд╛рдд рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдП рдпрджрд┐ getStaticProps рд╕реНрдерд┐рд░ html рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЕрд░реНрдерд╛рдд

export async function unstable_getStaticProps() {
  // ...
  return {
    props: { dangerouslySetInnerHTML: { __html: '<div>static content</div>' } }
  };
}

рдЪреВрдВрдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдХреЛ рдХреБрдЫ рднреА рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, next.js рдЕрдкрдиреЗ рд░рдирдЯрд╛рдЗрдо рдХреЛ рдкреЗрдЬ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ HTML рдХреЛ рдЗрдирд▓рд╛рдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ getStaticProps рд▓реМрдЯрд╛ рд╣реИред рдФрд░ рдпрд╣ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ dangerouslySetInnerHTML рдХрд╛ рдЙрдкрдпреЛрдЧ next.js рд░реВрдЯ рдиреЛрдб рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдо рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдЖрдВрд╢рд┐рдХ рдЬрд▓рдпреЛрдЬрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдВ рд░рд┐рдПрдХреНрдЯ рдХреА рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдпрд╣ рднреНрд░рдо рдХрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧреАред

рдореИрдВ рдПрдХ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯ рдХреЛ Next.js рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдХреЗ рд╕рднреА .html рд░реВрдкреЛрдВ рдХреЛ .html рдореЗрдВ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ getStaticProps рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕реНрд▓рдЧ рдФрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ рдпрджрд┐ getStaticProps рдХреЛ рдкреВрд░реНрдг рд╕рдВрджрд░реНрдн рдорд┐рд▓реЗ рддрд╛рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рд╢рд░реНрдд рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХреВрдВред

@nodabladam рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд╕реНрдЯрдо рд░реВрдЯ рдЖрд░рдПрдлрд╕реА: # 9081 рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИрдВред

рд╡рд╣ RFC рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛:

// next.config.js
module.exports = {
  redirects() {
    return [
      // Redirect from the old HTML version of a blog post
      {
        source: "/blog/:post.html",
        destination: "/blog/:post",
        permanent: true
      }
    ];
  }
};

рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ experimental рдХреБрдВрдЬреА рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ:

// next.config.js
module.exports = {
  experimental: {
    redirects() {
      // ...
    }
  }
};

рдореИрдВрдиреЗ рдЕрдкрдиреА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ (рд▓рдЧрднрдЧ 8K рдкреГрд╖реНрда) рдкрд░ getStaticProps рдФрд░ getStaticPathNames рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЧрдгрдирд╛ рдкреНрд░рддрд┐ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА 10K рд╕реАрдорд╛ рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИред 8K рдкреГрд╖реНрдареЛрдВ рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ 16K рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓реЗрдВ рдорд┐рд▓рддреА рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЛ рдПрдХ json рдлрд╝рд╛рдЗрд▓ рднреА рдорд┐рд▓рддреА рд╣реИред

рдХреНрдпрд╛ рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ? рдпрд╛ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕ рд╕реАрдорд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

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

рддреЛ рдореИрдВ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ getStaticProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд░ рдХреЗрд╡рд▓ рд╕реНрдЯреЗрдЯрд┐рдХрдкреИрде рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдореЗрд░рд╛ рдЙрддреНрдкрд╛рдж рдкреГрд╖реНрда рдХреБрд▓ рдкреГрд╖реНрдареЛрдВ рдХрд╛ 70% рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдореЗрдВ рдХреЛрдИ getStaticPaths рдирд╣реАрдВ рдбрд╛рд▓рд╛)ред рдореИрдВ рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд░рд╣рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдкрд╣рд▓рд╛ рд▓реЛрдб рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реИ рдФрд░ 404 рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

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

рддреЛ рдореИрдВ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ getStaticProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд░ рдХреЗрд╡рд▓ рд╕реНрдЯреЗрдЯрд┐рдХрдкреИрде рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдореЗрд░рд╛ рдЙрддреНрдкрд╛рдж рдкреГрд╖реНрда рдХреБрд▓ рдкреГрд╖реНрдареЛрдВ рдХрд╛ 70% рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдореЗрдВ рдХреЛрдИ getStaticPaths рдирд╣реАрдВ рдбрд╛рд▓рд╛)ред рдореИрдВ рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд░рд╣рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдкрд╣рд▓рд╛ рд▓реЛрдб рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реИ рдФрд░ 404 рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡реЗ рдЬрд▓реНрдж рд╣реА рд╕реАрдорд╛ рдмрдврд╝рд╛ рджреЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ 20K рдирд╣реАрдВ рд╣реЛрдЧрд╛ .. рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдореИрдВ getStaticPaths рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд▓реЛрдб рд╕рдордп рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ .. рдореБрдЭреЗ Zeit Now рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рдкрдбрд╝ рд╕рдХрддреА рд╣реИ

Next.js рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░реЗрдЧрд╛ рдЬреЛ getServerProps рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред [...] Next.js рдЗрд╕ рдПрдХреНрд╕рдкреЛрдЬрд╝реНрдб рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЛ JSON рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдПрдЧрд╛ рдЬреЛ рдкреЗрдЬ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░реЙрдкреНрд╕ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред

Next.js рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рд░реНрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдФрд░ рдкреГрд╖реНрда рдШрдЯрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ (рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреБрдЫ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдПрдХ рдЕрддреНрдпрдВрдд рддреЗрдЬрд╝ рд╕рд╛рдЗрдЯ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рд╡реЗ рдХрд┐рд╕реА SSR рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдорд╛рд░реНрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдереЛрдбрд╝реА рджреЗрд░ рдкрд╣рд▓реЗ рдЕрдЪрд╛рдирдХ рд╕рд╛рдЗрдЯ "рд╣реИрдВрдЧ" рд╣реЛ рдЬрд╛рдПрдЧреАред

рдХреНрдпрд╛ рдШрдЯрдХ _first_ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рд▓реЛрдбрд┐рдВрдЧ рд╕рдВрдХреЗрддрдХ, рдПрдирд┐рдореЗрдЯреЗрдб рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдЗрддреНрдпрд╛рджрд┐ рдХреЗ рд╕рд╛рде рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ? (рдЙрдиреНрд╣реЗрдВ рд╡рд░реНрддрдорд╛рди рдкреГрд╖реНрда рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдпред) рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдирдИ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдореИрдВрдиреЗ рдЗрд╕реЗ рд░реЗрдВрдбрд░ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ getInitialProps рдФрд░ рд╣реБрдХ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЧрдиреНрджрд╛ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдпреВрдПрдХреНрд╕ рдкреИрдЯрд░реНрди (рддрддреНрдХрд╛рд▓ рдкреГрд╖реНрда рд╕реНрд╡рд┐рдЪ) рдХрдИ (рдЕрдзрд┐рдХрд╛рдВрд╢?) рджреНрд╡рд╛рд░рд╛ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХрд╛ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЗрдВред

рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрддреНрд╕рд╛рд╣рд┐рдд! рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

@nicoqh , рдкреЗрдЬ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреА рдЪрд┐рдВрддрд╛рдПрдБ SSG рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣реИрдВрдЧ рд╡рд░реНрддрдорд╛рди getInitialProps ред рдореИрдВ nprogress рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдо рд╕реЗ рдХрдо рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдкреНрд░рдЧрддрд┐ рдкрдЯреНрдЯреА рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ, рдЬрдмрдХрд┐ рдЕрдЧрд▓рд╛ рдкреГрд╖реНрда рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХрд╛рдиреВрдиреА рдкреГрд╖реНрда рд╕рдВрдХреНрд░рдордг рд╣реЛрдиреЗ рдХрд╛ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рднреА рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдЬреЛ рд╡рд░реНрдгрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХреЗ рдХрд░реАрдм рдзреНрд╡рдирд┐ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдЬреЛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИ:
https://github.com/zeit/next.js/tree/canary/examples/with-next-page-transitions

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ json рдлрд╝рд╛рдЗрд▓ /_next/data/BUILD_ID/<file>.json рдЬреЛ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╣реИ рд╡рд╣ рдПрд╕реЗрдЯрдкреНрд░рд┐рдлрд╝рд┐рдХреНрд╕ рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдпрд╣ рдореЗрд░реЗ рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХреЛ 404 рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдРрд╕рд╛ рд╕реЗрдЯрдЕрдк рд╣реИ рдЬреЛ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ _next рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдЬреЛ рд╕реАрдбреАрдПрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреА рд╣реИред рдпреЗ рдЬреЛрдВрд╕ рдлрд╛рдЗрд▓реЗрдВ рдЕрдВрддрддрдГ рдПрд╕реЗрдЯрдкреНрд░рд┐рдлрд╝рд┐рдХреНрд╕ (рд╕реАрдбреАрдПрди) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╣реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП?

рдореЗрд░реА рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдЙрд╕ рд╕реАрдорд╛ рдХреЛ рдЙрдард╛рдирд╛ рдЪрд╛рд╣ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдХрдм рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рддреЛ рдореИрдВ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ getStaticProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд░ рдХреЗрд╡рд▓ рд╕реНрдЯреЗрдЯрд┐рдХрдкреИрде рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдореЗрд░рд╛ рдЙрддреНрдкрд╛рдж рдкреГрд╖реНрда рдХреБрд▓ рдкреГрд╖реНрдареЛрдВ рдХрд╛ 70% рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдореЗрдВ рдХреЛрдИ getStaticPaths рдирд╣реАрдВ рдбрд╛рд▓рд╛)ред рдореИрдВ рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд░рд╣рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдкрд╣рд▓рд╛ рд▓реЛрдб рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реИ рдФрд░ 404 рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡реЗ рдЬрд▓реНрдж рд╣реА рд╕реАрдорд╛ рдмрдврд╝рд╛ рджреЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ 20K рдирд╣реАрдВ рд╣реЛрдЧрд╛ .. рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдореИрдВ getStaticPaths рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд▓реЛрдб рд╕рдордп рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ .. рдореБрдЭреЗ Zeit Now рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рдкрдбрд╝ рд╕рдХрддреА рд╣реИ

@erhankaradeniz рдФрд░ @ziltosh рд╣рдореЗрдВ рдЗрд╕реЗ рдмрд╣реБрдд рдЬрд▓реНрдж рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рдЙрд╕ ASAP рдХреЗ рд╕рд╛рде рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдореБрдЭреЗ рд╕реАрдзреЗ рдпрд╛ [email protected] рдкрд░ рдкрд┐рдВрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рдЖрдкрдХреЛ рд╕реБрд▓рдЭрд╛ рд▓реЗрдВрдЧреЗред

рдореЗрд░реА рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдЙрд╕ рд╕реАрдорд╛ рдХреЛ рдЙрдард╛рдирд╛ рдЪрд╛рд╣ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдХрдм рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рддреЛ рдореИрдВ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ getStaticProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдкрд░ рдХреЗрд╡рд▓ рд╕реНрдЯреЗрдЯрд┐рдХрдкреИрде рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдореЗрд░рд╛ рдЙрддреНрдкрд╛рдж рдкреГрд╖реНрда рдХреБрд▓ рдкреГрд╖реНрдареЛрдВ рдХрд╛ 70% рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдореЗрдВ рдХреЛрдИ getStaticPaths рдирд╣реАрдВ рдбрд╛рд▓рд╛)ред рдореИрдВ рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд░рд╣рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдкрд╣рд▓рд╛ рд▓реЛрдб рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реИ рдФрд░ 404 рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡реЗ рдЬрд▓реНрдж рд╣реА рд╕реАрдорд╛ рдмрдврд╝рд╛ рджреЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ 20K рдирд╣реАрдВ рд╣реЛрдЧрд╛ .. рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдореИрдВ getStaticPaths рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд▓реЛрдб рд╕рдордп рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ .. рдореБрдЭреЗ Zeit Now рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рдкрдбрд╝ рд╕рдХрддреА рд╣реИ

@erhankaradeniz рдФрд░ @Ziltosh рд╣рдореЗрдВ рдЗрд╕реЗ рдмрд╣реБрдд рдЬрд▓реНрдж рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рдЙрд╕ ASAP рдХреЗ рд╕рд╛рде рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдореБрдЭреЗ рд╕реАрдзреЗ рдпрд╛ [email protected] рдкрд░ рдкрд┐рдВрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рдЖрдкрдХреЛ рд╕реБрд▓рдЭрд╛ рд▓реЗрдВрдЧреЗред

рдзрдиреНрдпрд╡рд╛рдж @kvangundy
рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЯреНрд╡рд┐рдЯрд░ рдкрд░ рдЖрдкрд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛ рд╣реИ ;-)

@erhankaradeniz рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп [email protected] рдкрд░ рдИрдореЗрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрд╕ рддрд░рд╣ рдпрд╣ рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЦрддреНрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

@flintinatux , рдЯрд┐рдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреЗрдЬ рдШрдЯрдХ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрди-рдкреЗрдЬ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдЖрджрд┐ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж!

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд╖рдп рд╕реЗ рджреВрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рдФрд░ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ :)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ getInitialProps рдХреЛ getStaticProps рдФрд░ getServerProps рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмрд╣реБрдд рд╕рд╛рдл рд╣реИ! рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд╢реНрди рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ:
рд╣рдо 2 рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрд┐рд▓реНрдб рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: рдПрдХ рд╣рдорд╛рд░реА рдЙрддреНрдкрд╛рдж рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг, рдФрд░ рдПрдХ рд╕рдВрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП SSR рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдгред

рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдореИрдВ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ getStaticProps рдмрдирд╛рдо getServerProps рдХреЛ рдмрд┐рд▓реНрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (https://github.com/zeit/next.js/issues/9524#issuecomment- рдХреЗ рд╕рдорд╛рди- 558617056), рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдпрд╛ рдирд╣реАрдВред рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдЕрдЧрд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрддрд┐рд╢реАрд▓/рд╕реНрдереИрддрд┐рдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛?

рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдз:

  • рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ рд╕реНрдерд┐рддрд┐: https://github.com/zeit/next.js/issues/9524#issuecomment -581494508

    • рдЕрднреА рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (#10424)ред

  • рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди: https://github.com/zeit/next.js/issues/9524#issuecomment -582607806

    • рдХрд╛рдо рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдкреАрдЖрд░ рдмрд╛рдж рдореЗрдВ рдЦреЛрд▓рд╛ рдЬрд╛рдПрдЧрд╛ред

RFC рдХреЛ рдмрд╛рдж рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдлрд┐рд░ рднреА рд╣рдорд╛рд░реЗ рдРрдкреНрд╕ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рд╣реЛрдЧреАред

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

рдореИрдВрдиреЗ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда _рдкреГрд╖реНрда/[рд╕реНрд▓рдЧ] .js_ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИред _getStaticPaths_ рдЙрди рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _getStaticProps_ рд╣реИред _getStaticPaths_ рдореЗрдВ рджрд┐рдП рдЧрдП рд╕рднреА рдкреЗрдЬ рдмрд┐рд▓реНрдб рдкрд░ _.next/server/static_ рдХреЗ рдЕрдВрджрд░ HTML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдорд╣рд╛рди!

рдЕрдм рдореИрдВ npm run start рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЗрди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЬреИрд╕рд╛ рдЙрдиреНрд╣реЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдЕрдиреБрдкрд▓рдмреНрдз url (рдЬреИрд╕реЗ _/foo_) рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╕реЗ _.next/server/static_ рдХреЗ рдЕрдВрджрд░ рдирдИ рд╕реНрдерд┐рд░ HTML рдФрд░ JSON рдлрд╝рд╛рдЗрд▓реЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рд╕рд░реНрд╡рд░ рдХреЛ рдЕрдиреНрдп рд╕рднреА рдпреВрдЖрд░рдПрд▓ рдХреЛ _pages/_error.js_ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ?

https://github.com/zeit/next.js/issues/9524#issuecomment -582777067

рд╣рдо рдЙрд╕реЗ рднреА рдХрд╡рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЕрдм рдореИрдВ npm рд░рди рд╕реНрдЯрд╛рд░реНрдЯ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЗрди рдкреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреИрд╕рд╛ рдЙрдиреНрд╣реЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдПрдХ рд▓рд╛рдкрддрд╛ url (рдЬреИрд╕реЗ /foo) рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╕реЗ .next/server/static рдХреЗ рдЕрдВрджрд░ рдирдИ рд╕реНрдерд┐рд░ HTML рдФрд░ JSON рдлрд╝рд╛рдЗрд▓реЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред рдпрд╣ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рд╕рд░реНрд╡рд░ рдХреЛ рдЕрдиреНрдп рд╕рднреА рдпреВрдЖрд░рдПрд▓ рдХреЛ рдкреЗрдЬ/_error.js рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ?

рдпрд╣ рдЕрднреА рднреА рдЙрдбрд╝рд╛рди рдореЗрдВ рд╣реИ рдФрд░ рдЕрднреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реИред

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

@timneutkens рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдЕрд╕реНрдерд┐рд░рддрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреЛрдИ рдЖрдЗрдбрд┐рдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдореИрдиреЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдП? рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛ рдФрд░ рджреЗрдЦрд╛ рдХрд┐ _unstable_getStaticProps_ рдХреЗ рдЕрдВрджрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрдиреЗ рд╕реЗ рддреНрд░реБрдЯрд┐ рдкреГрд╖реНрда рдкреНрд░рд╕реНрддреБрдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ рддрд░реАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ _pages/_error.js_ рдХреЗ рд▓рд┐рдП рд╣реИред рдореИрдВ рдЗрд╕реЗ рекрежрек рднреЗрдЬрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЕрдм рдпрд╣ релрежреж рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдиреНрдп рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдкрд╣рд▓реЗ рднреА рдХрдИ рдмрд╛рд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "_error рдкрд░ рдЬрд╛рдирд╛" рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдЕрднреА рдЖрдкрдХреЗ рдкреГрд╖реНрда рдХреЛ 404 рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ рддреЛ if(!data.something) { return <My404Component /> } , рдФрд░ рдлрд┐рд░ My404Component рдХреЛ noindex рдореЗрдЯрд╛ рдЯреИрдЧ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рдЪрдореБрдЪ? рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ 404 рдХреЗ рд▓рд┐рдП _pages/_error.js_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗрддрд╛ рд╣реИред

рджреЗрдЦреЗрдВ: https://nextjs.org/docs/advanced-features/custom-error-page

@ jiv-e рдЬреЛ рдХрд┐ рекрежрек рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ:

  • рдкреГрд╖реНрда рдирд╣реАрдВ рдорд┐рд▓рд╛
  • рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдИ

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ "404" рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ рдореИрдВрдиреЗ рдХрд╣рд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП https://nextjs.org/docs/advanced-features/custom-error-page#reuse -the-built-in-error- рдкреГрд╖реНрда

рд╕рдордЭ рдЧрдпрд╛! рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдЕрдиреБрд╡рд╛рдж/рднрд╛рд╖рд╛ рдХреБрдВрдЬреА рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП getStaticProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рдВрднрд╡рддрдГ 1-2 рдмрд╛рд░ рдорд╣реАрдиреЗ рдпрд╛ рдкреНрд░рддрд┐ рд╡рд░реНрд╖ рднреА рдмрджрд▓реЗрдВрдЧреЗред рдбреАрдУрдПрдо рдХреЗ рднреАрддрд░ рдЬреЗрдПрд╕рдУрдПрди/рдкреНрд░реЛрдк рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдкреЗрдбрд╝ рдХреЗ рдиреАрдЪреЗ рдЙрд╕ рдШрдЯрдХ рдХреЛ рдХреБрдВрдЬреА рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдЬрд╣рд╛рдВ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ - рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ?

useTranslation () рд╣реБрдХ (рдпрд╛ HOC) рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде?

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ AppTree NextGetStaticProps Context ( getStaticProps({ AppTree }) ) рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдЧрд╛ред рдЕрдиреНрдпрдерд╛ ssg рдкрд░ apollos getDataFromTree рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдЪрд▓рд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╣рдо AppTree рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреЛ getStaticProps рдореЗрдВ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦрд░рд╛рдм рд╣реИ (рдХрдВрдкрдирд┐рдпреЛрдВ рд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛)ред рдЬрдм рдЖрдк рдХрд┐рд╕реА рдкреГрд╖реНрда рдкрд░ getStaticProps рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЕрднреА рднреА рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдЕрдкрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП _app рдХреЗ getInitialProps рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрднреА рднреА рдЕрдкреЛрд▓реЛ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ amp: 'hybrid' рдФрд░ SSG рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реЛред
рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдХрд░ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛рдиреА:

  • (рдПрд╕рдПрд╕рдЬреА) index.html
  • (рдПрдПрдордкреА) index.amp.html

рдпрд╣ рдкреНрд░реЙрдХреНрд╕реА рдХреЛ ?amp=1 рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ amp рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ amp: 'hybrid' рдФрд░ SSG рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реЛред
рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдХрд░ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛рдиреА:

  • (рдПрд╕рдПрд╕рдЬреА) index.html
  • (рдПрдПрдордкреА) index.amp.html

рдпрд╣ рдкреНрд░реЙрдХреНрд╕реА рдХреЛ ?amp=1 рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ amp рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдмрд┐рд▓реНрдХреБрд▓ @Dacturne , рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реВ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ SSG рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рд╕рдордп рдкрд╣рд▓реЗ рдЯрд┐рдкреНрдкрдгреА рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдореИрдВ

@jansedlon рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрддреЗ рд╣реБрдП рдПрдХ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдмрдирд╛рдпрд╛ рд╣реИ:

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

https://paqmind.com/hi/blog/ssr-is-not-the-future

(рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ)

@ ivan-kleshnin рдореИрдВрдиреЗ рдПрдХ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░ рдбрд╛рд▓реА рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рд░реЛрдорд╛рдВрдЪрдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИ! рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдореБрдЭреЗ рд╕реИрдХрдбрд╝реЛрдВ рдШрдВрдЯреЗ рдмрдЪрд╛рдП рд╣реЛрдВрдЧреЗ! рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдЖрдЬ рдмрд╛рдж рдореЗрдВ рдФрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рджреЗрдЦреВрдВрдЧрд╛ред

https://github.com/zeit/next.js/issues/9524#issuecomment -582799948

@jansedlon рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╣рдо рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреБрдЫ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ @ ivan-kleshnin рдХреЗ рдмреНрд▓реЙрдЧрдкреЛрд╕реНрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдмрд╣реБрдд рдЬрд▓реНрдж рдЗрд╕ рдкрд░ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╛рдЭрд╛ рдХрд░ рдкрд╛рдПрдВрдЧреЗред

@timneutkens рдЕрдм рддрдХ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдкреНрдпрд╛рд░ рд╣реИ ЁЯЩП рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреВрд░реНрдг рд╕реНрдерд┐рд░ + рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдореЗрдВ рд╕реБрдзрд╛рд░ / рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ?

рд╣рдо Tinacms.org рдХреЗ Gatsby рд╕реЗ Next.js рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдореЗрдВ рдирдП getStaticProps / getStaticPaths API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЕрдм рддрдХ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд░рд╣рд╛ рд╣реИ!

RSS рдлрд╝реАрдб рдмрдирд╛рдиреЗ рдореЗрдВ рдПрдХ рдмрд╛рдзрд╛ рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рдЖрдИ рд╣реИред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдо рдЗрд╕реЗ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬрд┐рд╕ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИ рд╡рд╣ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдо рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдкреВрдЫрддрд╛рдЫ рдХрд░рдХреЗ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдПрдордПрд▓ рд▓рд┐рдЦрдХрд░ рдЗрд╕реЗ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд╕рдВрднрд╛рд▓ рд░рд╣реЗ рд╣реИрдВред

рдХреНрдпрд╛ рдЧреИрд░-рдПрдЪрдЯреАрдПрдордПрд▓ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдкреАрдврд╝реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЪрд░реНрдЪрд╛ рд╣реБрдИ рд╣реИ?

FYI рдХрд░реЗрдВ рд╣рдордиреЗ рдЕрднреА zeit рдкрд░ getStaticProps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ --prod рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рдХрд┐рдпрд╛ рдФрд░ рдирдИ рд░рд┐рд▓реАрдЬрд╝ рдкрд░ json рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рд╕рд╛рдлрд╝ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рд╣рдорд╛рд░реЗ рдЙрддреНрдкрд╛рджрди рд░рд┐рд▓реАрдЬ рдХреЛ рд╡рд╛рдкрд╕ рдЙрдкрдирд╛рдо рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдХрд╛рдо рдХрд░ рдЧрдпрд╛ рдФрд░ рдХреИрд╢ рд╕рд╛рдлрд╝ рд╣реЛ рдЧрдпрд╛ред

рд╣рдо Tinacms.org рдХреЗ Gatsby рд╕реЗ Next.js рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдореЗрдВ рдирдП getStaticProps / getStaticPaths API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЕрдм рддрдХ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд░рд╣рд╛ рд╣реИ!

RSS рдлрд╝реАрдб рдмрдирд╛рдиреЗ рдореЗрдВ рдПрдХ рдмрд╛рдзрд╛ рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рдЖрдИ рд╣реИред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдо рдЗрд╕реЗ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬрд┐рд╕ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИ рд╡рд╣ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдо рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдкреВрдЫрддрд╛рдЫ рдХрд░рдХреЗ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдПрдордПрд▓ рд▓рд┐рдЦрдХрд░ рдЗрд╕реЗ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд╕рдВрднрд╛рд▓ рд░рд╣реЗ рд╣реИрдВред

рдХреНрдпрд╛ рдЧреИрд░-рдПрдЪрдЯреАрдПрдордПрд▓ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдкреАрдврд╝реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЪрд░реНрдЪрд╛ рд╣реБрдИ рд╣реИ?

рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдФрд░ рдореБрдЭреЗ рдЕрднреА рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИред рдпрд╣рд╛рдБ рдореЗрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ:

"scripts": {
    "dev": " next",
    "build": "yarn sitemap && next build",
    "start": "next start",
    "sitemap": "ts-node --project ./cli/tsconfig.spec.json ./cli/generateSitemap.ts"
  },

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ next build рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ yarn sitemap рдХрд┐ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯрдореИрдк рдЬрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ json рдореЗрдВ рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ getStaticProps рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдЖрдк рдЗрд╕реЗ рдХрдИ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

RFC рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛, getStaticPaths рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджрд┐рдпрд╛ (рдЖрдкрдХреЛ рдЕрдм paths рдХреБрдВрдЬреА рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ getStaticProps рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ props рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдЕрднреА рддрдХ Next.js рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рд╣реИред

fallback рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рднреА рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ (рдкреГрд╖реНрдареЛрдВ рдХреА рдСрди-рдбрд┐рдорд╛рдВрдб рдкреГрд╖реНрдарднреВрдорд┐ рдирд┐рд░реНрдорд╛рдг рдЬреЛ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдкрд░ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗ)ред

RFC рдореЗрдВ рдПрдХ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛, Loading рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЬреЛрдбрд╝рд╛ред

рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЬрд╛рдирдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд▓реЛрдбрд┐рдВрдЧ рд╕реНрдерд┐рддрд┐ рдХреЛ рд░рд┐рдПрдХреНрдЯ рд╣реБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ

рдорд╣рд╛рди рд╕рд╛рдорд╛рди! рдореИрдВ рдмрд╕ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рдХреНрдпрд╛ рдПрдХ JSON рдлрд╝рд╛рдЗрд▓ (рдЬреИрд╕реЗ рдХреЛрдб-рд╡рд┐рднрд╛рдЬрди рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдкреГрд╖реНрдареЛрдВ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛?

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

рдореИрдВ рдПрдХ рддреЗрдЬ TTFB рдХреА рдЗрдЪреНрдЫрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЬреЛ рдореЗрд░реЗ рдРрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рд╕реБрд╡рд┐рдзрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ Loading рд╕реНрдерд┐рддрд┐ рдХреЛ fallback: false рд▓рд┐рдП getStaticPaths рд╕рдорд╛рди рдПрдХ рдСрдкреНрдЯ-рдЗрди рдпрд╛ рдСрдкреНрдЯ-рдЖрдЙрдЯ рд╕реБрд╡рд┐рдзрд╛ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛? рд╢рд╛рдпрдж рдкреГрд╖реНрда рдкрд░ export const enableLoadingState = false , рдпрд╛ next.config.js рдореЗрдВ рд╕рд╛рдЗрдЯ-рд╡реНрдпрд╛рдкреАред

https://github.com/zeit/next.js/issues/9524#issuecomment -583962425

рдлрд┐рд░ рд╕реЗ рдПрдХ рдЕрдиреБрд╕реНрдорд╛рд░рдХ рдХрд┐ рдЖрдк рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдЕрдкрдиреА (рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ) рдПрд╕рдПрд╕рдЬреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЛ рдЕрднреА (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рддреИрдирд╛рдд рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдЗрдЯ рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдиреЗрдЯрд╡рд░реНрдХ рдЯреИрдм рдореЗрдВ 404 рддреНрд░реБрдЯрд┐рдпрд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВред рд╕рднреА 404 рддреНрд░реБрдЯрд┐рдпрд╛рдВ _next/static/pages/[slug].js рдЗрд╢рд╛рд░рд╛ рдХрд░рддреА рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдЬрдмрдХрд┐ рдпрд╣ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╣реИ? рдпрд╛ рдореБрдЭреЗ рдХреБрдЫ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрджрд▓рдиреА рдЪрд╛рд╣рд┐рдП?

@joostmeijles рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА href рдФрд░ as рд╕реЗ next/link ред рдбрд╛рдпрдирд╛рдорд┐рдХ рдкреЗрдЬ рдХреЗ рд▓рд┐рдП href рдХреЛ рдкреЗрдЬ href='/[slug]' рдФрд░ as рдХреЛ рдпреВрдЖрд░рдПрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП as='/slug-1'

рдореБрдЭреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рдХрдВрд╕реЛрд▓ рдореЗрдВ 3 рд▓реЙрдЧ рдорд┐рд▓ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ?

// Page is showing three logs despite static path only having 2 entries and output generating only two files as intended
export default function Page(props){
    console.log("Page - should only show twice", props); 
    return <><h1>Page</h1></>
}

export async function unstable_getStaticProps(props) {
    console.log("unstable_getStaticProps - should only show twice", props);
    return {
      props
    };

}

export async function unstable_getStaticPaths() {
    console.log("show once")
    return {
        paths: [
        { params: { year: "1901" } },
        { params: { year: "1902" } },
        ]
    }
}

рдирд╣реАрдВ, рдпрд╣ RFC рдореЗрдВ fallback рдЕрдиреБрд╕рд╛рд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред

рдирд╣реАрдВ, рдпрд╣ RFC рдореЗрдВ fallback рдЕрдиреБрд╕рд╛рд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред

export async function unstable_getStaticPaths() {
    console.log("show once")
    return {
        fallback: false,
        paths: [
        // This renders /blog/hello-world to HTML at build time
        { params: { year: "1901" } },
        { params: { year: "1902" } },
        ]
    }
}

рдореИрдВрдиреЗ рдСрдкреНрдЯ рдЖрдЙрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред

рддреНрд░реБрдЯрд┐: / [рд╡рд░реНрд╖] (рдлрд╝реЙрд▓рдмреИрдХ) рдореЗрдВ рдЕрд╕реНрдерд┐рд░_рдЧреЗрдЯрд╕реНрдЯреИрдЯрд┐рдХрдкрд╛рде рд╕реЗ рд▓реМрдЯрд╛рдИ рдЧрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдиреБрдордд рдПрдХрдорд╛рддреНрд░ рдлрд╝реАрд▓реНрдб paths

рдлрд┐рд░ рд╕реЗ рдПрдХ рдЕрдиреБрд╕реНрдорд╛рд░рдХ рдХрд┐ рдЖрдк рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╕рдм рдХреБрдЫ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ getStaticProps рдХреЗрд╡рд▓ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреА?
рдРрдк/рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?

рдореИрдВрдиреЗ рдЗрд╕реЗ 'рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ' рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЕрдм рддрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рдЦреБрд╢ рд╣реВрдВ .. рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдмрд╛рдж рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ 'рддреЗрдЬ' рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдПрд╕рдПрд╕рдЬреА рдЙрддреНрдкрдиреНрди рдкреГрд╖реНрда рдирд╣реАрдВ рдмрджрд▓реЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ? (рд╢рд╛рдпрдж рдореЗрд░реА рдУрд░ рд╕реЗ рдЗрдЪреНрдЫрд╛рдзрд╛рд░реА рд╕реЛрдЪ)

@timneutkens рдХреНрдпрд╛ рдПрд╕рдПрд╕рдЬреА рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП

@timneutkens рдХреНрдпрд╛ рдПрд╕рдПрд╕рдЬреА рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП

рд╣рд╛рдБ рдпрд╣ рдПрдХ рдмрдврд╝рд┐рдпрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЛ SSR рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВред (рд▓реЗрдХрд┐рди рд╕рд╛рдЗрдЯрдореИрдк.рдПрдХреНрд╕рдПрдордПрд▓ рдлрд╝рд╛рдЗрд▓ рд▓реЛрдб рд╣реЛрдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрддреА рд╣реИ)

https://github.com/zeit/next.js/issues/9524#issuecomment -585293270

рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдХреЗрд╡рд▓ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рдХрд╛рд░реНрдп рд╣реЛрдВрдЧреЗ рдЬреЛ getStaticProps рдХреЗ рд▓реИрдВрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЙрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

https://github.com/zeit/next.js/issues/9524#issuecomment -586957539

рд╣рд╛рдБ, рд▓реЗрдХрд┐рди рдЗрд╕ RFC рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВред рдЗрд╕ рднреВрдорд┐ рдХреЗ рдмрд╛рдж рдПрдХ рдЕрдиреБрд╡рд░реНрддреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реЛрдЧреАред

@timneutkens рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрд╕рдПрд╕рдЬреА рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрд╕рд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╣рд░ рдмрд╛рд░ рдПрдХ рдпреВрдЖрд░рдЖрдИ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдзрдХреНрдХрд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЕрдЧрд▓рд╛ рдПрдХ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░, рдЬрдм рдпрд╣ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдмрд╕ рдкреНрд░рддреНрдпреЗрдХ рдПрдХреНрд╕рдПрдордПрд▓ рдЯреИрдЧ рдореЗрдВ рд╕рд░рдгреА рдХреЛ рдореИрдк рдХрд░реЗрдВ, рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ рдФрд░ рдЗрд╕реЗ рдмреАрдЪ рдореЗрдВ рдбрд╛рд▓реЗрдВ рдПрдХ <sitemapindex> рдЯреИрдЧ рдХрд╛ред getStaticProps рдореЗрдВ excludeFromSitemap рдирд╛рдордХ рд░рд┐рдЯрд░реНрди рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдФрд░ рдХреБрдВрдЬреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЛ sitemap.xml рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди рдСрдкреНрдЯ рдЖрдЙрдЯ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рдеред

рдпрджрд┐ рдРрд╕рд╛ рд╣реЛрддрд╛, рддреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛ рдЗрд╕ рдкрд░ рдЕрдЪреНрдЫрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╣реЛрддрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда рд╕рд╛рдЗрдЯрдореИрдк рдореЗрдВ рдЬрд╛рдПрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдпрджрд┐ рдкреГрд╖реНрда [foo] рдХрд╛ getStaticPaths рдлрд╝рдВрдХреНрд╢рди foo рд╕рд╛рде рдкрде рд▓реМрдЯрд╛рддрд╛ рд╣реИ 'abc' рдФрд░ 'xyz' рд▓реЗрдХрд┐рди рд╕рд╛рдЗрдЯрдореИрдк рдореЗрдВ рдХреЗрд╡рд▓ 'abc' рдлрд╝рд╛рдЗрд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдбреЗрд╡рд▓рдкрд░ excludeFromSitemap рд╕реЗ true рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ ==='xyz' рдореЗрдВ getStaticProps ред

рд╕рд╛рде рд╣реА, SSR рдФрд░ рд╕реНрдерд┐рд░ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП, рдкреГрд╖реНрда рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ (рдпрд╛рдиреА export const excludeFromSitemap = true; ) рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ getServerProps , getStaticPaths рдФрд░ getStaticProps рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

SSG рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдпрджрд┐ рдирд┐рд░реНрдпрд╛рддрд┐рдд excludeFromSitemap рд╕реНрдерд┐рд░рд╛рдВрдХ (рдкреГрд╖реНрда рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рд╣реИ рдФрд░ рд╡рд╣ рдХреБрдВрдЬреА getStaticProps рдлрд╝рдВрдХреНрд╢рди (рдкрде рд╡рд┐рд╢рд┐рд╖реНрдЯ) рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рднреА рд╣реИ, рддреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЙрд╕ рдкреГрд╖реНрда рдХреЗ рд╕рднреА рдкрдереЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рди рдФрд░ рдкрде рд╡рд┐рд╢рд┐рд╖реНрдЯ excludeFromSitemap , рдЬрдм getStaticProps рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛ, рддреЛ рдкреГрд╖реНрда рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рддрд╛рдХрд┐ рдПрдХ рдкреГрд╖реНрда export cosnt excludeFromSitemap = true рдФрд░ рдлрд┐рд░ рдЙрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрде рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рд╛рдЗрдЯрдореИрдк рд╕реЗ рд╕рднреА рдкрдереЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП getStaticProps рдореВрд▓реНрдп false рд╕реЗ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдореЗрдВ excludeFromSitemap рдХреБрдВрдЬреА рдЬреЛрдбрд╝реЗрдВ)ред

рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛ (рдореИрдВрдиреЗ рд╕рддреНрдп рддрд╛рд▓рд┐рдХрд╛ рдХреА рдЧрдгрдирд╛ рдХреА рдФрд░ рдХрд░реНрдгрдШ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдиреНрдпреВрдирддрдо рдмреВрд▓рд┐рдпрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХреА):

//...somewhere else
const validExcludeFromSitemapTypes = ['boolean','undefined'];

//...for each path
const isSSG = !!getStaticPropsReturnedObj && typeof getStaticPropsReturnedObj === "object";
if(
    validExcludeFromSitemapTypes.indexOf(typeof pageExports.excludeFromSitemap)<0 ||
    (isSSG && validExcludeFromSitemapTypes.indexOf(typeof getStaticPropsReturnedObj.excludeFromSitemap)<0)
) {
    throw new Error("'excludeFromSitemap' can either be ommited (undefined) or be a boolean");
}
const defaultExcludedValue = !!pageExports.excludeFromSitemap;
const hasSpecificExcluded = isSSG && typeof getStaticPropsReturnedObj.excludeFromSitemap !== "undefined";
const specificExcludedValue =  isSSG ? !!getStaticPropsReturnedObj.excludeFromSitemap : false;

if(!specificExcludedValue && (!defaultExcludedValue || hasSpecificExcluded))
    sitemapURIs.push(correctlyEncodedURI);

рд╕рд░рдгреА рдХреЛ рд╕рд╛рдЗрдЯрдореИрдк рдореЗрдВ рдмрджрд▓рдирд╛ рдРрд╕рд╛ рдХрд░рдирд╛ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ (рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╕рд░рдгреА рдореЗрдВ рдпреВрдЖрд░рдЖрдИ рдкрд╣рд▓реЗ рд╕реЗ рдПрдиреНрдХреЛрдбреЗрдб рд╣реИрдВ рдФрд░ !excludeFromSitemap рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ):

function createSitemap(sitemapURIs: string[]): string {
    return `<sitemapindex>${sitemapURIs.map(u=>`<sitemap><loc>u/loc></sitemap>`).join('')}</sitemapindex>`;
}

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмреИрдареЗрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдорд┐рд╢рди рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ 100 рдПрд╕рдИрдУ рд╕реНрдХреЛрд░ рджреЗрдирд╛ рд╣реИ рдФрд░ sitemap.xml рд╣реЛрдиреЗ рд╕реЗ рдмрд╣реБрдд рдорджрдж рдорд┐рд▓реЗрдЧреА! ( robots.txt рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ else рдЬреЛрдбрд╝рдХрд░ рднреА рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╛рдЗрдЯрдореИрдк рд╕рд░рдгреА рдореЗрдВ рдкрде рдЬреЛрдбрд╝рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрд╕ рдкрде рдХреЛ рдЕрд╕реНрд╡реАрдХреГрдд рдкреГрд╖реНрдареЛрдВ рдХреА рдПрдХ рдФрд░ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХреЗ)

рд╡рд░реНрддрдорд╛рди рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, unstable_getStaticPaths рдХреЗ рд╕рд╛рде unstable_getStaticProps рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдк /api/ рдореЗрдВ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдЪреВрдВрдХрд┐ рд╕рд░реНрд╡рд░ рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдФрд░ рд╕реНрдерд┐рд░ рдкреНрд░реЙрдкреНрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдкрде рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрдкреВрд░реНрддрд┐ рдирд╣реАрдВ рдХрд░рдиреА рд╣реИ (рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рдПрд╕рдПрд╕рдЖрд░ рдХреЛ рдХреИрд╢ рдХреЗ рд╕рд╛рде рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрднреА рднреА рдЕрдЪреНрдЫрд╛ рд╣реИ!) рдпрд╛ рдПрд╕рдПрд╕рдЬреА рдХреЗ рдмрдЬрд╛рдп рдПрд╕рдПрд╕рдЖрд░ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред

рд╢рд╛рдпрдж рдпрд╣ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЛрдЧрд╛? рдореИрдВ рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реВрдВ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛, рдореИрдВрдиреЗ рдХрд╣реАрдВ рдФрд░ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрдврд╝рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрд╕рдПрд╕рдЖрд░ рдФрд░ /api рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде http рдЕрдиреБрд░реЛрдз рдХреЛ рд╢реЙрд░реНрдЯрдХрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдпрд╣рд╛рдВ рднреА рдХрд╛рдо рдЖрдПрдЧрд╛ред

рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд┐рд▓реНрдб рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рдХреЛрдб рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛, рдЬреЛ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ/рдбреАрдмреА рдХреЙрд▓ рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЛрдЧрд╛ред

@reckter рд╣рд╛рдБ, рдореИрдВрдиреЗ рдЕрднреА рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдЕрдкрдиреЗ рдбреАрдмреА рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрд▓рдЧ рдкреГрд╖реНрда рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдЬрдмрдХрд┐ рд╡реЗ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдереЗред рдмрд╣реБрдд рдЕрдЬреАрдм рд▓рдЧрд╛...

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ

рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдк next.config рдпрд╛ рдХреБрдЫ рдФрд░ рд╕реЗ рд╕реЗрдЯрдЕрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...

@reckter рдПрд╕рдПрд╕рдЬреА/рдПрд╕рдПрд╕рдЖрд░ рд╕реЗ рдПрдкреАрдЖрдИ рдорд╛рд░реНрдЧреЛрдВ рдкрд░ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╢реЙрд░реНрдЯрдХрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛! рдЙрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдкрд░ рдЦреБрдж рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред

рд╡реИрд╕реЗ рднреА, рдПрд╕рдПрд╕рдЬреА рдХреЗ рджреМрд░рд╛рди рдПрдкреАрдЖрдИ рдорд╛рд░реНрдЧреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХрд╛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╕реНрдерд┐рд░ рдкреГрд╖реНрдареЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдерд╛рдиреАрдп рд╕рд░реНрд╡рд░ рдХреЗрд╡рд▓ /api рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реЛ! рддреЛ рдирд┐рд░реНрдорд╛рдг рдХрджрдо рд╣реЛрдВрдЧреЗ:

  1. рдПрдХ рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ (рд╢рд╛рдпрдж "рдПрдкреАрдЖрдИ рд╕рдВрдХрд▓рди рд╕рд░реНрд╡рд░" рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЗрд╡рд▓ /api рдорд╛рд░реНрдЧреЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ
  2. рднрд╛рдЧреЛ unstable_getStaticPaths
  3. unstable_getStaticProps рдЪрд▓рд╛рдПрдБ
  4. рд╕реНрдерд┐рд░ рдкреГрд╖реНрдареЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ

@reckter рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдкрдХреЛ рдПрдкреАрдЖрдИ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдЗрд╕реЗ рд╕реАрдзреЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ http рдХрд╛рд░рдгреЛрдВ рдкрд░ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрд╣реБрдд рд╕реЗ рдУрд╡рд░рд╣реЗрдб рд╕реЗ рднреА рдмрдЪрддрд╛ рд╣реИред

рдореВрд▓ рд░реВрдк рд╕реЗ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдПрдкреАрдЖрдИ рдорд╛рд░реНрдЧ рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

import myDb from 'mydatabaseprovider'
const db = myDb()

export default async (req, res) => {
  cont myData = await db.query('posts')
  res.json(myData)
}

рдЖрдк рдЗрд╕реЗ рдЗрд╕рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗ:

import myDb from 'mydatabaseprovider'
const db = myDb()

export async function getData() {
  const myData = await db.query('posts')
  return myData
}

export default (req, res) => {
  const myData = await getData()
  res.json(myData)
}

рдФрд░ рдлрд┐рд░ рдЕрдкрдиреЗ рдкреЗрдЬ рдореЗрдВ:

import {getData} from './api/myfunction'

export async function getStaticProps() {
  const myData = await getData()
  return {
    props: {
     myData
   }
  }
}

рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрд░рдИрдПрд╕рдЯреА рдХреЗ рд▓рд┐рдП рднреАред

рдПрдкреАрдЖрдИ рдХреЙрд▓! = рдбреАрдмреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ (рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ)
рдПрдкреАрдЖрдИ рдкрд░рдд рдореЗрдВ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛, рдбреЗрдЯрд╛ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛, рдЖрджрд┐ред

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ pages/api рдХреЙрд▓ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реИрдВ... рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреАрдЖрдИ рдХрд╛ рдмрд╛рдИрдкрд╛рд╕ рдЖрд╕рд╛рди рдпрд╛ рд╕рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдФрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб/рдЬрдЯрд┐рд▓рддрд╛ рдЖрдИрдПрдордУ рдХреЗ рд▓рд┐рдП рд╢реБрд▓реНрдХ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП unstable_getStaticPaths рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкреГрд╖реНрда рдкреБрдирдГ рд▓реЛрдб рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Redux рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдЦреЛ рдЬрд╛рддреА рд╣реИред рдХреНрдпрд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛рдПрдЧрд╛?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓рд┐рдВрдХ рдпрд╛ рд░рд╛рдЙрдЯрд░ рдореЗрдВ as рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

<Link
  href='/item/[key]'
  as={`/item/${itemName}`}
>
router.push(
  '/item/[key]',
  `/item/${itemName}`
);

@meesvandongen рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕реЗ рдРрд╕рд╛ рд╣реА рдерд╛ред рдпрджрд┐ рдЖрдкрдХрд╛ <Link> рдЕрдорд╛рдиреНрдп рд╣реИ, рддреЛ рдпрд╣ рдЖрдкрдХреЛ рдмреИрдХрдПрдВрдб рднрд╛рдЧ рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдореВрд▓ рд░реВрдк рд╕реЗ <a> рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред [key] рдЬреИрд╕реЗ рдЧрддрд┐рд╢реАрд▓ рдЕрдВрд╢реЛрдВ рдХреЛ рд╕рдВрдЧрдд рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@reaktivo pages/[lang]/blog/[id].js -> getStaticPaths рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА url рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

https://github.com/zeit/next.js/issues/9524#issuecomment -562625858
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕реЗ index.js рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП getStaticPaths рдФрд░ getStaticProps рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрджрд┐ рдХреБрдЫ mdx рдкреГрд╖реНрда рд╣реИрдВ, рддреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ

рд╕реНрдерд┐рд░ getStaticPaths getStaticProps рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдпрд╛ рдЙрдирдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред https://github.com/zeit/next.js/issues/9524#issuecomment -558617056
рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдкреГрд╖реНрда рдХреЛ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдЙрдЪреНрдЪ-рдЖрджреЗрд╢ рдШрдЯрдХ (HOC) рджреНрд╡рд╛рд░рд╛ рд▓рдкреЗрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣ рдХреЛрдб рдЕрдзрд┐рдХ рд░рдЦрд░рдЦрд╛рд╡ рдпреЛрдЧреНрдп рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред


рдЯреНрд░реА-рд╣рд┐рд▓рд┐рдВрдЧ рдмрдирд╛рдо рдбрд╛рдпрдиреЗрдорд┐рдХред рдХреНрдпрд╛ рд╕рд┐рд░рджрд░реНрдж рд╡реНрдпрд╛рдкрд╛рд░-рдмрдВрдж рд╣реИредЁЯШВ

9.2.3-canary.13 рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ getStaticPaths рдореЗрдВ fallback: false рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛:

  return {
    fallback: false,
    paths: slugs.map(slug => ({params: {slug: slug}}))
  }

рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:

Error: Extra keys returned from unstable_getStaticPaths in /blog/[slug] (fallback) Expected: { paths: [] }

9.2.3-canary.13 рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ getStaticPaths рдореЗрдВ fallback: false рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛:

  return {
    fallback: false,
    paths: slugs.map(slug => ({params: {slug: slug}}))
  }

рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:

Error: Extra keys returned from unstable_getStaticPaths in /blog/[slug] (fallback) Expected: { paths: [] }

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

рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдиреЗрдХреНрд╕реНрдЯрдЬ рдкрд░ рдЕрдкрдирд╛ рд╕рдВрд╕реНрдХрд░рдг рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

return data.map(item => {
    return {
      params: {
        slug: item.slug,
      },
    }
  })

@jorngeorg рдпрд╣ рдПрдХ рдЦреБрд▓рд╛ рдкреАрдЖрд░ рд╣реИ: https://github.com/zeit/next.js/pull/10701

рд╢рд╛рдирджрд╛рд░ рдпреЛрдЧрджрд╛рди! рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдереИрддрд┐рдХ рдкреНрд░рддрд┐рдкрд╛рджрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдбреЙрдХреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧреЛрдВ рдкрд░, "рдлрд╝реЙрд▓рдмреИрдХ" рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреЙрд▓ рдХреЗ getStaticProps рдЙрддреНрдкрдиреНрди рд╣реЛ рдЬрд╛рдПрдЧрд╛ - рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЛ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдкреНрд░реЛрдк рдЦрд╛рд▓реА рд╣реИред

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЖрдк рдлрд╝реЙрд▓рдмреИрдХ рдмрдирд╛рддреЗ рд╕рдордп рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрджрд░реНрдн рдХреЗ getStaticProps рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рдмрд╛рдд рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ рдХрд┐ next export рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП /p/[id].js рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрджрд░реНрдн рдХреЗ getInitialProps рдЪрд▓рд╛рдХрд░ /p/[id].html рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

  • getStaticProps - next build рд╕рдордп рдкрд░ рд╕реНрдерд┐рд░ рдкреАрдврд╝реА (рдПрд╕рдПрд╕рдЬреА) рдореЗрдВ рдСрдкреНрдЯ-рдЗрди рдХрд░реЗрдВред
  • getServerProps - рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ (SSR) рдореЗрдВ рдСрдкреНрдЯ-рдЗрди рдХрд░реЗрдВ рдЬреЛ рдСрди-рдбрд┐рдорд╛рдВрдб рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИред

резрежренреиреи

getServerProps рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ getServerSideProps рдХрд░реЗрдВред

рдореИрдВ рдбреЙрдХреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЧрддрд┐рд╢реАрд▓ рдорд╛рд░реНрдЧреЛрдВ рдкрд░, "рдлрд╝реЙрд▓рдмреИрдХ" рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреЙрд▓ рдХреЗ getStaticProps рдЙрддреНрдкрдиреНрди рд╣реЛ рдЬрд╛рдПрдЧрд╛ - рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЛ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдкреНрд░реЛрдк рдЦрд╛рд▓реА рд╣реИред

рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ! рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдмрд┐рд▓реНрдб/рддреИрдирд╛рддреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рднреА рдереАрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реИред

рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП RFC рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛

@timneutkens

  • рдЙрд╕реА рдкрде рдХреЗ рдмрд╛рдж рдХреЗ рдЕрдиреБрд░реЛрдз рдЙрддреНрдкрдиреНрди рдкреГрд╖реНрда рдХреА рд╕реЗрд╡рд╛ рдХрд░реЗрдВрдЧреЗ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ Next.js рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдкреЗрдЬ рдХреЛ рдХреИрд╢ рдХрд░реЗрдЧрд╛? рдХреНрдпрд╛ рдпрд╣ рдЗрди-рдореЗрдореЛрд░реА рдХреИрд╢ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдХреИрд╢ рд╕реАрдорд╛ рд╕реЗ рдмрдВрдзрд╛ рд╣реИ рдпрд╛ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдореЗрдореЛрд░реА рд▓реАрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдЬрдм рдЖрдк next start рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдХреИрд╢рд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди lru-cache рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реАрдорд╛ 50MB рд╣реИ, рд╣рдо рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/zeit/next.js/ рдмреНрд▓реЙрдм/рдХреИрдирд░реА/рдкреИрдХреЗрдЬ/рдиреЗрдХреНрд╕реНрдЯ/рдиреЗрдХреНрд╕реНрдЯ-рд╕рд░реНрд╡рд░/рд╕рд░реНрд╡рд░/spr-cache.ts#L90

рдЬрдм рдЖрдк ZEIT Now рдкрд░ рд╣реЛрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕реАрдбреАрдПрди/рдкреНрд░реЙрдХреНрд╕реА рдкрд░ рдкреАрдврд╝реА рдФрд░ рдХреИрд╢рд┐рдВрдЧ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдпрд╛ рдпрджрд┐ рдЖрдк lru рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

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

  • getStaticProps - next build рд╕рдордп рдкрд░ рд╕реНрдерд┐рд░ рдкреАрдврд╝реА (рдПрд╕рдПрд╕рдЬреА) рдореЗрдВ рдСрдкреНрдЯ-рдЗрди рдХрд░реЗрдВред
  • getServerProps - рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ (SSR) рдореЗрдВ рдСрдкреНрдЯ-рдЗрди рдХрд░реЗрдВ рдЬреЛ рдСрди-рдбрд┐рдорд╛рдВрдб рд░реЗрдВрдбрд░ рдХрд░рддрд╛ рд╣реИред

резрежренреиреи

getServerProps рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ getServerSideProps рдХрд░реЗрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд╛рдо рдмрджрд▓реЗрдВ рдХреНрдпреЛрдВ? IMHO getServerProps рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдЯреАрдХ рдФрд░ рдЫреЛрдЯрд╛ рд╣реИ, рд╕рд╛рдЗрдб рдЬреЛрдбрд╝рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдмреЗрдорд╛рдиреА рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ GetStaticPaths рд╡рд┐рдзрд┐ рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдореЗрд░реЗ рдЧрддрд┐рд╢реАрд▓ рдкреГрд╖реНрда рдЕрдм рд╕реНрдерд┐рд░ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЕрдм рд▓реИрдореНрдмреНрдбрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

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

@erhankaradeniz getStaticPaths рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрдкрдХрд╛ рдкреГрд╖реНрда рд▓реИрдореНрдмрдбрд╛рд╕ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рдВрднрд╡рддрдГ рдЙрдкрдпреЛрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рдХреЛрдб рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рд╕рдХреЗрдВ?

@Timer рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рд╡рд╛рдкрд╕ [email protected] рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рдкреИрд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬрдм рддрдХ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рддрд╛ рдХрд┐ рдпрд╣ рдкрдереЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореИрдВрдиреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдкрдиреЗ рдкрде рддреИрдпрд╛рд░ рдХрд┐рдП рд╣реИрдВ:

return cityData.map(city => {
    return {
      params: {
        country: city.countrySlug,
        city: city.slug,
      },
    }
  })

рдФрд░ рдПрдХ рдЕрдиреНрдп рдкреГрд╖реНрда рдореЗрдВ рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ:

return cityData.map(city => {
    return {
      params: {
        country: city.countrySlug,
        city: city.slug,
      },
    }
  })

рдкрдереЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдирдИ рдХреИрдирд░реА рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдмрджрд▓рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдореИрдВ рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ getStaticPath рднреАрддрд░ рднреА рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ

рдореБрдЭреЗ рдиреЗрд╕реНрдЯреЗрдб рдкрде рдкреНрд░реАрд░реЗрдВрдбрд░рд┐рдВрдЧ рдФрд░ рдПрд╕рдПрд╕рдЬреА рд╕реЗ рдкрд░реЗрд╢рд╛рдиреА рд╣реИ:

// pages/[lang]/[...slugs].js

export async function getStaticPaths() {
  let knex = await import("knex/client").then(m => m.default)
  let pages = await knex("page").select(["lang", "url"])
  return {
    fallback: true,
    paths: pages.map(page => {
      return {
        params: {
          lang: page.lang,
          slugs: page.url == "/" ? [] : page.url.slice(1).split("/"),
        }
      }
    }),
  }
}

рдлрд▓рд╕реНрд╡рд░реВрдк рд╣реЛрддрд╛ рд╣реИ

Error occurred prerendering page "/en/". Read more: https://err.sh/next.js/prerender-error:
Error: The provided export path '/en/' doesn't match the '/[lang]/[...slugs]' page.

рд╣реЛрдо рдкреЗрдЬ рдХреЗ рд▓рд┐рдПред рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ NextJS рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ

{lang: "en", slugs: []}

рдкреНрд░рддрд┐

/[lang]/[...slugs]

рдЕрдЧрд░ рдореИрдВ {lang: "en", slugs: ["/"]} рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдмрдирд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЧрд▓рдд рдпреВрдЖрд░рдПрд▓ рдХреЗ рд╕рд╛рде:

тФЬ тЧП /[lang]/[...slugs]      875 B        204 kB
тФЬ   тФЬ /en/credits
тФЬ   тФЬ /en/%2F

рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, getServerSideProps рд╕рдорд╛рди рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдзрд╛рдЧрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рд╣реИ рдирд╛?

pages/[lang]/[...slugs].js рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ /en/abcdef рди рдХрд┐ /en , рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ pages/[lang]/index.js ред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдЦреБрд▓рд╛ рд╣реИ: https://github.com/zeit/next.js/issues/10488

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рддреЛ рдпреЗ рдХрдорд╛рд▓ рд╣реИред рдореИрдВ Next.js рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдореИрдВ рдЕрдВрддрддрдГ Gatsby.js рд╕реЗ рджреВрд░ рдЬрд╛ рд╕рдХреВрдВ рдФрд░ рдПрдХ рд╣рд╛рдЗрдмреНрд░рд┐рдб рдРрдк (рд╕реНрдерд┐рд░ + рдЧрддрд┐рд╢реАрд▓) рд╣реЛред

ЁЯЪА рдореИрдВрдиреЗ рдХреИрдирд░реА рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдЖрдзрд╛ рдмреЗрдХреНрдб рдЬрдЯрд┐рд▓ рдРрдк рд╕рдВрд╕реНрдХрд░рдг рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛ред рдореИрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЯреНрд░реА-рд╣рд┐рд▓рд┐рдВрдЧ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рд╣реИред

ЁЯдФ getStaticPaths рдмрд╣реБрдд рдЕрдзрд┐рдХ setStaticPaths рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо SSG рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдкрде рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдиреЗ рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд┐рдпрд╛ред

ЁЯзР рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реЗрдЯрдЕрдк рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░реЗрдЧрд╛ рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд╕рдордЭрд╛рдиреЗ рджреЛ:

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ setBuildCategory рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдЗрд╕реЗ blog рдпрд╛ pages рдпрд╛ рдЬреЛ рднреА рдХреЛрдИ 2020-content рдЪрд╛рд╣рддрд╛ рд╣реИред рддрдм SSG рдирд┐рд░реНрдорд╛рддрд╛ рдЙрд╕ рдкреГрд╖реНрда рдХреА рд╢реНрд░реЗрдгреА рдХреА рддрд▓рд╛рд╢ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдХреЗрд╡рд▓ рдЙрд╕ рд╢реНрд░реЗрдгреА рдХреЛ рдХреИрд╢ + рдирдП рд░реЗрдВрдбрд░ рдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХреБрдЫ рд╣рдореЗрдВ SSG рдХреЛ рддреЗрдЬрд╝ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрди рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реЗ рдирд┐рд░реНрдорд╛рдг рд╕рдордп рд╕реЗ рдмрдЪ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдЧрд░ рдпрд╣ рдХреБрдЫ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ; рдПрдХ рдХреЙрд▓ рдкрд░ рдХреВрджрдиреЗ рдФрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИред

рдХрд╕реНрдЯрдо рд╕рд░реНрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде getServerSideProps рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВ?

if (pathname === '/a') {
  app.render(req, res, '/b', query)
}

рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, /a рд╕реЗ рдкреЗрдЬ pages/b.js рд░реЗрдВрдбрд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди /a рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рди a.json рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ JSON рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП /_next/data/{BUILD_ID}/{PAGE}.json рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╢рд░реНрддреЗрдВ рд░рдЦрдиреА рдЪрд╛рд╣рд┐рдП?

GetStaticPaths рдореЗрдВ fallback: true рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ req рдСрдмреНрдЬреЗрдХреНрдЯ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реВрдВ? рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдорд╛рд░реНрдЧ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдХреБрдЫ рдХреБрдХреАрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

@tylermcrobert рдЬрдм рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рд╣реИ рддреЛ рдЖрдк рдХреБрдХреАрдЬрд╝ рдХреЛ рд╣рдерд┐рдпрд╛рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ ?!
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдЧрдВрддреБрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмреИрдХрдПрдВрдб рд╡рд╛рд▓реЗ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ "рд╕реНрдерд┐рд░" рдФрд░ "рдЧрддрд┐рд╢реАрд▓" рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдЖрдк рд╕реНрдерд┐рд░ рдФрд░ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ... рдпрд╣ рдХреЗрд╡рд▓ рд▓реЗрдЦ рдХрд╛ рднрд╛рдЧ рд╣реИ рдЬреЛ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдмрдЬрд╛рдп API рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдЧрд╛ред

рдХрд╕реНрдЯрдо рд╕рд░реНрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде getServerSideProps рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВ?

if (pathname === '/a') {
  app.render(req, res, '/b', query)
}

рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, /a рд╕реЗ рдкреЗрдЬ pages/b.js рд░реЗрдВрдбрд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди /a рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реАрдбрд╛рдпрд░реЗрдХреНрд╢рди a.json рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рд╣рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ JSON рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП /_next/data/{BUILD_ID}/{PAGE}.json рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╢рд░реНрддреЗрдВ рд░рдЦрдиреА рдЪрд╛рд╣рд┐рдП?

Next.js рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд╕реНрдЯрдо рд╕рд░реНрд╡рд░ рдореЗрдВ рд░реАрдореИрдкрд┐рдВрдЧ рдХреА рдЕрдм рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: https://nextjs.org/docs/routing/dynamic-routes

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг <Link> рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдПрдХ рдкреВрд░реНрдг рдкреГрд╖реНрда рд╕рдВрдХреНрд░рдордг рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛) рдЗрд╕рд▓рд┐рдП getServerSideProps рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@tylermcrobert рдЬрдм рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рд╣реИ рддреЛ рдЖрдк рдХреБрдХреАрдЬрд╝ рдХреЛ рд╣рдерд┐рдпрд╛рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ ?!
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдЧрдВрддреБрдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмреИрдХрдПрдВрдб рд╡рд╛рд▓реЗ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ "рд╕реНрдерд┐рд░" рдФрд░ "рдЧрддрд┐рд╢реАрд▓" рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдЖрдк рд╕реНрдерд┐рд░ рдФрд░ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ... рдпрд╣ рдХреЗрд╡рд▓ рд▓реЗрдЦ рдХрд╛ рднрд╛рдЧ рд╣реИ рдЬреЛ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдмрдЬрд╛рдп API рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдЧрд╛ред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдлрд╝реЙрд▓рдмреИрдХ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЧрд▓рдд рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдБред рдЖрдк рдЬреЛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдЬрдм рдХреЛрдИ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рд░реНрдЧ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреНрдпрд╛ fallback: true рдирд╣реАрдВ рд╣реИ? рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдлрд╝реЙрд▓рдмреИрдХ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдирд╣реАрдВ?

@tylermcrobert рд╣рд╛рдБ fallback: true рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЕрдиреБрд░реЛрдз рд╣реИ рд▓реЗрдХрд┐рди рдПрдкреАрдЖрдИ рдХреЛ "рд╕рдмрд╕реЗ рдХрдо рдЖрдо рднрд╛рдЬрдХ" рджреНрд╡рд╛рд░рд╛ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред рдореИрдВ рдПрдХ рдРрд╕реА рдХрд╛рд░реНрдп рдкреНрд░рдгрд╛рд▓реА рдХреА рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдЬрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдкрд░рд┐рд╕рд░ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реЛ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкрд░рд┐рд╕рд░ рдХреЗ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдпрд╣ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдкрджрд╛ рд╣реЛрдЧреАред

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

@ ivan-kleshnin рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдореЗрд░реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рдХрд╛рд░рдг рдореИрдВ рдкреВрдЫрддрд╛ рд╣реВрдВред

рдореИрдВ рдПрдХ рд╣реЗрдбрд▓реЗрд╕ рд╕реАрдПрдордПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЬрд┐рди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЙрдиреНрд╣реЗрдВ рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛)ред рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдлрд╝реЙрд▓рдмреИрдХ рд╡рд┐рдХрд▓реНрдк рдЖрдПрдЧрд╛ред

рдЙрд╕ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдПрдкреАрдЖрдИ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рд░реЗрдлрд░реА рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХреБрдХреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ useStaticProps рд╕реНрдХреНрд░реИрдк рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореИрдВ рд╕реНрдерд┐рд░ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд╛рдн рдХреЛ рдЦреЛрдиреЗ рд╕реЗ рдирдлрд░рдд рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рдЧреИрдЯреНрд╕рдмреА рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдкрд░ рдЗрд╕ рдЖрд░рдПрдлрд╕реА рдХрд╛ рдЖрдХрд░реНрд╖рдг рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрдВ рд╕реНрдерд┐рд░ рд╕рд╛рдЗрдЯ рдкреАрдврд╝реА рдХреЗ рд╕рд╛рде "рд╣рд╛рдЗрдмреНрд░рд┐рдб рдирд┐рдпрдВрддреНрд░рдг" рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╣реЗрдбрд▓реЗрд╕ рд╕реАрдПрдордПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рджрд░реНрдж рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

рдореИрдВ рдПрдХ рд╣реЗрдбрд▓реЗрд╕ рд╕реАрдПрдордПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЬрд┐рди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЙрдиреНрд╣реЗрдВ рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛)ред рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдлрд╝реЙрд▓рдмреИрдХ рд╡рд┐рдХрд▓реНрдк рдЖрдПрдЧрд╛ред

рдмрдиреЗ рд░рд╣реЗрдВ, рдФрд░ рдЬрд▓реНрдж рд╣реА

рддреЛ рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рд╣рдо рдлрд╝реЙрд▓рдмреИрдХ рд╕рддреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ (рдХреЛрдИ рд╕реНрдерд┐рд░ рдкреГрд╖реНрда рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдирдпрд╛ рдкреГрд╖реНрда/рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИ) рд▓реЗрдХрд┐рди рдЬрдм рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рд╡рд┐рдЬрд╝рд┐рдЯ рдорд┐рд▓рддреА рд╣реИ рддреЛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИ?

рдПрд░реНрд╣рд╛рди рдХрд░рд╛рдбреЗрдирд┐рдЬрд╝
http://www.erhankaradeniz.com

рек рдорд╛рд░реНрдЪ реирежреиреж рдХреЛ реиреж:реирел рдмрдЬреЗ рдЯрд┐рдо рдиреНрдпреВрдЯрдХреЗрдиреНрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:


рдореИрдВ рдПрдХ рд╣реЗрдбрд▓реЗрд╕ рд╕реАрдПрдордПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЬрд┐рди рдкреГрд╖реНрдареЛрдВ рдХреЛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЙрдиреНрд╣реЗрдВ рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛)ред рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдлрд╝реЙрд▓рдмреИрдХ рд╡рд┐рдХрд▓реНрдк рдЖрдПрдЧрд╛ред

рдмрдиреЗ рд░рд╣реЗрдВ, рдФрд░ рдЬрд▓реНрдж рд╣реА

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВред

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

рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд▓реНрдж рд╣реА рдбреЙрдХреНрд╕ рдЙрддрд╛рд░реЗ рдЬрд╛рдПрдВрдЧреЗред

рд╣рд╛рдБ рдореЗрд░рд╛ рдорддрд▓рдм рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдкреЗрдЬ рдерд╛ .. рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдкрд░ рдпреВрдЬрд░рдбреЗрдЯрд╛ рд▓рд╛рдКрдВрдЧрд╛ред

@timneutkens рдХреНрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдкреГрд╖реНрдареЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдпрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛?

рдирдорд╕реНрддреЗ!!! рдЗрд╖реНрдЯрддрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рддрд░рд╣ рдзреНрд╡рдирд┐ред рдореБрдЭреЗ рд░рд┐рдПрдХреНрдЯ рдФрд░ рдиреЗрдХреНрд╕реНрдЯ рджреЛрдиреЛрдВ рд╕реЗ рдкреНрдпрд╛рд░ рд╣реИ !!! рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕реБрдВрджрд░ рдФрд░ рд╕рд░рд▓ рдмрдирд╛ рджрд┐рдпрд╛ !! рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдзрд╛рд░рдгрд╛ рдмреНрд▓реЙрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИред рдореИрдВ рдПрдХ рд╣реЗрдбрд▓реЗрд╕ рд╕реАрдПрдордПрд╕ рд╕реЗ рдкреВрдЫрддрд╛рдЫ рдХрд░рддреЗ рд╕рдордп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐ рдкреГрд╖реНрда/рдкреЛрд╕реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

// рдЪреАрдпрд░реНрд╕, рдЪреВрдВрдХрд┐ рдпрд╣ рд╢реБрдХреНрд░рд╡рд╛рд░ рдХреЗ рдХрд░реАрдм рд╣реИ !!!

@timneutkens рдпрд╣ рд░реЛрдорд╛рдВрдЪрдХ рд╣реИ

рдПрдХ рдкрд░рд┐рджреГрд╢реНрдп рдЬрд┐рд╕реЗ рд╣рдо рдЕрдХреНрд╕рд░ рд╣рд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ next.js рдпрд╛ gatsby рдХреЗ рд╕рд╛рде рдбрд╛рдпрдиреЗрдорд┐рдХ рд░реВрдЯ рдпрд╛ рд▓реВрдк рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ:

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

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

рдХрдВрдХреНрд░реАрдЯ рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ https://mysite.com/my-product рдФрд░ https://mysite.co.uk/my-product рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд┐рд░ рдкреГрд╖реНрдареЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрдкрдирд╛ рдЕрдЧрд▓рд╛ рдРрдк 50x рдмрд╛рд░ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдпрд╛ рд╣рд░ рдЕрдиреБрд░реЛрдз рдкрд░ рдПрдХ рд╕реАрдПрдордПрд╕ рд╣рд┐рдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАЁЯШЕ

рдЕрдЧреНрд░рд┐рдо рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ / рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ тЭдя╕П

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

рддреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рдкреГрд╖реНрда рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рд░реВрдЯрд┐рдВрдЧ рдкрд░, рд╡реНрдпрд╡рд╣рд╛рд░ getInitialProps рдЬреИрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдкреГрд╖реНрда рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдФрд░ рдЗрд╕ рдкреГрд╖реНрда рдкрд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рд░реВрдЯрд┐рдВрдЧ рдкрд░, рд╕реНрдерд┐рд░ рдПрдЪрдЯреАрдПрдордПрд▓ рдкрд░реЛрд╕рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╣рд╛рдЗрдбреНрд░реЗрдЯреЗрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ) рдкреГрд╖реНрда рдкрд░ рдХреБрдЫ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдПрдкреАрдЖрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдореИрдВрдиреЗ рдмрд╕ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП unstable_getStaticProps рд╕рд╛рде рдЦреЗрд▓рд╛ рдФрд░ рдореИрдВ рдПрдХ рдордЬреЗрджрд╛рд░ рд╕рдВрдШрд░реНрд╖ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛: getStaticProps рд╕рд╛рде рдПрдкреАрдЖрдИ рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдХреЛрдб рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рд╡рд╛рд╣:

// pages/api/healthcheck.ts
import { NextApiResponse, NextApiRequest } from 'next';

export type ApiHealthCheckResponse = {
  message: 'ok';
};

const healthCheckHandler = (
  req: NextApiRequest,
  res: NextApiResponse<ApiHealthCheckResponse | ''>,
) => {
  if (req.method === 'GET') {
    return res.status(200).json({ message: 'ok' });
  }

  return res.status(405).send('');
};

export default healthCheckHandler;
// pages/index.js
// ...

export async function unstable_getStaticProps() {
  return {
    props: {
      healthcheck: (await fetch('localhost:3000/api/healthcheck').json())
    },
  };
}

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

@martpie рдЖрдк рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ: https://github.com/zeit/next.js/issues/9524#issuecomment -589772756

рдиреЗрдХреНрд╕реНрдЯ-рдЬреЗрди рд╕реНрдЯреЗрдЯрд┐рдХ рд╕рд╛рдЗрдЯ рдЬреЗрдирд░реЗрд╢рди (SSG) рд╕рдкреЛрд░реНрдЯ рдиреЗрдХреНрд╕реНрдЯ.js 9.3 рдореЗрдВ рд╕реНрдЯреЗрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ!

рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ "рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЛрдб" рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди, рдпрд╛ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд░реЗрдВрдбрд░ рдХрд┐рдП рдЧрдП рдкреГрд╖реНрда рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдФрд░ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рдХреЛ рдСрди-рдбрд┐рдорд╛рдВрдб рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред

рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рдбреЙрдХреНрд╕ рдореЗрдВ рдХреВрджреЗрдВ!

рдХреГрдкрдпрд╛ рдХрд┐рд╕реА рднреА рдкреНрд░рд╢реНрди рдХреЛ Next.js GitHub рд╕рдореБрджрд╛рдп рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ!

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ! рдХрдбрд╝реА рдореЗрд╣рдирдд рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдЕрдм рдЧрд╛рдерд╛ рдФрд░ рд░реЗрдбрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИ

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