Next.js: 9.0.6 рдореЗрдВ рдЕрдорд╛рдиреНрдп рд╣реБрдХ рдХреЙрд▓

рдХреЛ рдирд┐рд░реНрдорд┐рдд 10 рдЕрдХреНрддреВре░ 2019  ┬╖  74рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: vercel/next.js

рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ

рдмрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ

рдЬрдм рдЖрдк рдореБрдЦреНрдп Next.js рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдмрд╛рд╣рд░ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЕрдВрдд рдореЗрдВ Invalid hook call рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреВрдЯ рдЧрдпрд╛ рд╣реИред рд╣реБрдХ рдХреЗ рдмрд┐рдирд╛ рдШрдЯрдХ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдЬрдм рдЖрдк рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рдмрдЧ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ >9.0.5 рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдореБрдЦреНрдп рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдмрд╛рд╣рд░ рдХреА рдлрд╛рдЗрд▓реЗрдВ рдЯреНрд░рд╛рдВрд╕рдкреЗрд▓ рд╣реЛ рдЬрд╛рдПрдВред рдпрд╣ <=9.0.5 рдореЗрдВ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ

рдкреНрд░рдЬрдирди рдХрд░рдирд╛

Https://github.com/baldurh/next-9.0.6-bug-repro рдкрд░ repro

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░

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

рдкреНрд░рдгрд╛рд▓реА рдХреА рдЬрд╛рдирдХрд╛рд░реА

  • рдУрдПрд╕: рдПрди / рдП
  • рдмреНрд░рд╛рдЙрдЬрд╝рд░: рдПрди / рдП
  • Next.js рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг: >=9.0.6

рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрджрд░реНрдн

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

story 3 needs investigation

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

рд╣рд╛рдп рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрджреНрдпрддрди? рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореЛрдиреЛрд░реЗрдкреЛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕ рд╕рдЯреАрдХ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

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

@baldurh рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╣реА рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдЬрдм рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЕрдм тАЛтАЛрдХреЗрд╡рд▓ рдлрд╝реЛрд▓реНрдбрд░ рдЬрд╣рд╛рдВ Next.js рдРрдк рд░рд╣рддрд╛ рд╣реИ, рддреИрдирд╛рдд рд╣реИ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕рднреА рдмрд╛рд╣рд░реА рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред 2 рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

  • рд╕рдм рдХреБрдЫ рдПрдХ рд╣реА Next.js рдРрдк рдкрд░ рд▓реЗ рдЬрд╛рдПрдВ
  • Lerna рдпрд╛ рдирд┐рдЬреА npm рдкреИрдХреЗрдЬ рдпрд╛ рд╕рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

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

@baldurh рдмрд╕ рдЕрдЧрд▓реЗ i18next рдХреЗ рд╕рд╛рде рдЗрд╕ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ NextJs рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдиреЗрд╕реНрдЯреЗрдб рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдорд┐рд▓рд╛?

@ рдЖрдЗрд╕рд╛рдЪрд┐рдирдореИрди рд╣рдо рдирд╣реАрдВред рд╣рдо рдЕрдиреНрдп рдХрд╛рд░рдгреЛрдВ рд╕реЗ 9.x рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдореЗрдВ рдЕрднреА рддрдХ рдХрд╛рдордпрд╛рдм рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЕрдВрджрд╛рдЬрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдХрд╣рд╛рдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдирд╛ рдЪрд╛рд╣реВрдБрдЧрд╛ред

рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдЗрд╕реЗ рдЦреЛрджрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рднреА рд░рд┐рдкреНрд░реЛ рдХреА рдЬрд░реВрд░рдд рд╣реИ: рдХреНрд▓реЛрди cd рдореЗрдВ examples/simple рдФрд░ NextJs рд╕рдВрд╕реНрдХрд░рдг рдХреЛ> = = 9.0.6 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВред

рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ 9.0.3 рдкрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдПрдХ рдкреИрдЪ рдкрд░ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред

рдореБрдЭреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдРрд╕реА рд╣реА рддреНрд░реБрдЯрд┐ рдЖрдИ рдереА рдФрд░ рдЗрд╕реЗ рдШрдЯрдХрд░ 9.0.5 (рдФрд░ рд░рд┐рдПрдХреНрдЯ 16.8.x) рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореИрдВ рдЕрдЧрд▓реА рдмрд╛рд░ MDX рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рджреЗрдЦреА рдЧрдИ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рд╕реЗ рдкрд░реЗ рдХреЛрдИ рдареЛрд╕ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ рдиреЗрдХреНрд╕реНрдЯ рдПрдВрдб рдиреЗрдХреНрд╕реНрдЯ- i18next рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдореБрджреНрджреЗ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ 3 рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдбрд╛рд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИ:

  1. рдЧрд▓рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдкреНрд░рдзрд╛рди рд╕рдВрд╕реНрдХрд░рдг - рдореЗрд░реЗ рдРрдк рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ
  2. рдЖрдпрд╛рдд рдХрд┐рдП рдЧрдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреЛрдо рдХреЗ 2 рд╕рдВрд╕реНрдХрд░рдг - рдореЗрд░реЗ рдРрдк рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП
  3. рд░рд┐рдПрдХреНрдЯ рд╣реБрдХ рдХрд╛ рдЕрдиреБрдЪрд┐рдд рдЙрдкрдпреЛрдЧ - рдореИрдВ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рд▓рд┐рдмрд╛рд╕ рд╣реИрдВ, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд░ рдПрдХ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЕрдЬреАрдм рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЙрддреНрдкрд╛рджрди рдирд┐рд░реНрдорд╛рдг рдкрд░ рд╣реЛрддрд╛ рд╣реИред

@timneutkens @Timer рдЖрдкрдХреЛ рдЗрд╕рдореЗрдВ рдЯреИрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрдкрд╕реЗ рдХреБрдЫ рдЗрдирдкреБрдЯ рдкрд╕рдВрдж

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ react рдХрдорд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди react-dom ред рдХреНрдпрд╛ рдЖрдк рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@ рддреАрдорд░ рдзрдиреНрдпрд╡рд╛рдж рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреЛрдИ рдЕрд╕рд░ рдирд╣реАрдВ рд╣реБрдЖ

рдореИрдВ react рдФрд░ react-dom рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдПрдХ рд╕реНрддрд░ рдКрдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд░реЗрдкреНрд░реЛ рдореЗрдВ рдЕрднреА рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рдореИрдВрдиреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЖрдЬрд╝рдорд╛рдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд╢рд╛рдпрдж рдЗрд╕рд╕реЗ @isaachinman , @jaredcwhite рдФрд░ @felixmosh рдХреЗ рд▓рд┐рдП рднреА рд╕рдорд╕реНрдпрд╛ рд╕реБрд▓рдЭ рд╕рдХрддреА рд╣реИ ?

@ рдЯрд┐рдорд░ рдореБрдЭреЗ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдпрд╣ рдХрд╛рдо рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдерд╛ рдХрд┐ рдореЗрд░реА рдХреЛрдИ рдЕрдиреНрдп рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рдереА, рдЬрд┐рд╕рдиреЗ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ react рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛, node_modules рдлрд╝реЛрд▓реНрдбрд░ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╕реНрдЯреЛрд░реАрдмреБрдХ ( yarn why react рдмрд╣реБрдд рдорджрдж рдХреА) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдерд╛ред рд╣рдо рд╡реИрд╕реЗ рднреА рд╕реНрдЯреЛрд░реАрдмреБрдХ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рдереЗ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдЖрд╣ рдпреЗрд╕ред рдЕрдиреБрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд node_module рдкреИрдХреЗрдЬ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ (рд╕рд╣рдХрд░реНрдореА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдмрдЬрд╛рдп react(-dom|) рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде)ред

рдореИрдВ react рдФрд░ react-dom рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдПрдХ рд╕реНрддрд░ рдКрдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд░реЗрдкреНрд░реЛ рдореЗрдВ рдЕрднреА рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рдореИрдВрдиреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЖрдЬрд╝рдорд╛рдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд╢рд╛рдпрдж рдЗрд╕рд╕реЗ @isaachinman , @jaredcwhite рдФрд░ @felixmosh рдХреЗ рд▓рд┐рдП рднреА рд╕рдорд╕реНрдпрд╛ рд╕реБрд▓рдЭ рд╕рдХрддреА рд╣реИ ?

рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рд░реЗрдкреЛ рдореЗрдВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ?

рдореИрдВ npm ls react рдпрд╛ npm ls react-dom рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдореБрдЭреЗ рд╕реВрдЪреА рдореЗрдВ рдХреЗрд╡рд▓ рдореЗрд░рд╛ рдЕрдЧрд▓рд╛ рдРрдк рдорд┐рд▓рд╛ рд╣реИред

@felixmosh рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдХрд▓ рдореЗрд░реЗ рд▓рд┐рдП рдзрдХреНрдХрд╛ рд╡рд┐рдлрд▓ рд░рд╣рд╛ред рдЕрдм рдкрд░рд┐рд╡рд░реНрддрди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд╣рд╛рдБ рд╣реИрдВ moved рдореИрдВрдиреЗ react рдФрд░ react-dom app рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдЕрдм рдЖрдкрдХреЛ yarn/npm install рджреЛрдиреЛрдВ рдореЗрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред app рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ app рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдкрд╖реНрдЯ рд╣реИред

рд╣рдо рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЗрд╕ рдХрд╛рдо рдХреЛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЕрднреА рднреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдкрд░реЗрд╢рд╛рдиреА рднрд░рд╛ рд╣реИ do

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

@felixmosh рд╣рд╛рдБ рдореИрдВ

рдПрдХ рд╣реА рдореБрджреНрджреЗ рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдФрд░ react рдФрд░ react-dom рдПрдХ рд╕реНрддрд░ рдКрдкрд░ рд▓рд╛рдиреЗ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рд░реВрдЯ рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ 9.1.5 рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП https://github.com/facebook/react/issues/13991 рдФрд░ https://github.com/facebook/react/issues/15315#issuecomment -479802153 рдХреЛ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд╛рдпрд╛ рдерд╛ред

рд╣рд╛рдп рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрджреНрдпрддрди? рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореЛрдиреЛрд░реЗрдкреЛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕ рд╕рдЯреАрдХ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдорд┐рд▓рддреЗ рд╣реИрдВред
v9.0.5 rootFolder рдХреЗ рдмрд╛рд╣рд░ рдЖрдпрд╛рдд рдХрд┐рдП рдЧрдП рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

9.0.6 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ 9.1.6-canary.5 рддрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред

рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкрд░ рд╣реЛрддреА рд╣реИред рдпрджрд┐ SSR рдЕрдХреНрд╖рдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдбрд╛рдпрдиреЗрдорд┐рдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд╣рд░реА рдШрдЯрдХ рд▓реЛрдб) рддреЛ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ> = 9.0.6ред

@nodkz рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреИрдХреЗрдЬ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рдореБрджреНрджрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ рдиреЛрдб рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред

@ рдпрд╣ рдореБрджреНрджрд╛ рд▓рдЧрднрдЧ 6 рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП "рдЕрдЧрд▓рд╛" рдореАрд▓ рдХрд╛ рдкрддреНрдерд░ рдмрди рдЧрдпрд╛, рдпрд╣ рдореБрдЭреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЙрд╕ рдкрд░ рдЖрд╡рд╛рд╕ рдореЗрдВ рдкреВрд░реЗ рджрд┐рди рдХрд╛ рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд┐рдпрд╛ рд╣реИ, рдкрддрд╛ рдирд╣реАрдВ рдХрд┐ рдЗрд╕рдХрд╛ рд╕реНрд░реЛрдд рдореБрджреНрджрд╛ рдХреНрдпрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб (рдЬреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛) рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╕рд╣рд╛рдпрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЖрдВрдд-рднрд╛рд╡рдирд╛ рд╣реИ?
рдРрд╕рд╛ рдХреЗрд╡рд▓ рдЙрддреНрдкрд╛рджрди рдирд┐рд░реНрдорд╛рдг рдкрд░ рд╣реА рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ?
9.0.5 рд╕реЗ 9.0.6 рдЬреЛ рдХрд┐ рдЗрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпрд╛ рдмрджрд▓ рдЧрдпрд╛ рдерд╛?

рдереИрдВрдХреНрд╕ ЁЯЩПЁЯП╝

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдореБрджреНрджрд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ !!!
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ 2 рдЪреАрдЬреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рд╣реИ:

  1. рдиреЛрдб -modules рдХреЗ рд▓рд┐рдП рд╕рд┐рдореН-рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ
  2. i18next / react-i18next рд╕рд░реНрд╡рд░ рдмрдВрдбрд▓реЛрдВ рдореЗрдВ рдмрд╛рд╣рд░реА рдирд╣реАрдВ рдереЗ !!
    image
    рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рдпрд╣ рдЙрддреНрдкрд╛рджрди рдирд┐рд░реНрдорд╛рдг рдкрд░ рд╡рд┐рд╕реНрдлреЛрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ i18next useTranslation рд╣реБрдХ рдкрд░ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ ...

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

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЕрдЧрд▓реЗ рдкрд░рд┐рд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдкрд╡рд╛рдж рд╣реИрдВ (рдХреНрдпреЛрдВ?), рдордЬрд╝реЗрджрд╛рд░ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд░реЗрдЧреЗрдХреНрд╕ рд╕рднреА next/dist/ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд▓рд┐рдмрд╛рд╕реЛрдВ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ i18next & react-i18next рд╣реЛрддрд╛ рд╣реИ !!

рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВ:

res.match(/next[/\\]dist[/\\]/) 

рдЬрд╛рдВрдЪ

res.match(/[/\\]next[/\\]dist[/\\]/) 

рд╕рд░реНрд╡рд░ рдмрдВрдбрд▓ рдЙрди рд╕рднреА рд▓рд┐рдмрд╛рд╕реЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░ рджреЗрдЧрд╛ рдЬреЛ next рдФрд░ next/dist рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ рд╣реИ!

рдореЗрд░реЗ рд▓рд┐рдП рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдирдП рддрд░реАрдХреЗ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ: https://github.com/zeit/next.js/blob/canary/packages/next/build/webpack-config.ts#L446

рдЪреВрдБрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд░реВрдЯ рдХреЗ рдмрд╛рд╣рд░ рдШрдЯрдХ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк react рдХрд╛ рд╕рд░реНрд╡рд░ рд╕рд░реНрд╡рд░ рдореЗрдВ рдмрдВрдбрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ Invalid hook call рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред

@baldurh context рдЙрд╕ рд▓рд┐рдВрдХ рдореЗрдВ, рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рд╡реЗрдмрдкреИрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрд▓рдЧ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рди рд░реВрдЯ (рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛)ред
рдпрд╣ рд╣рдореЗрд╢рд╛ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ рдЬреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЬрд╛рд░реА рдХрд░ рд░рд╣реА рд╣реИред

рд╕рд╣реАред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдЪ рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдВрддрддрдГ рдХреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗ рддрд╛рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдПрдХ рдКрдкрд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реНрддрд░ рдкрд░ рд╕рд╛рдЭрд╛ рд╣реЛред рд╣рд╛рд▓рд╛рдБрдХрд┐, рднрд▓реЗ рд╣реА react рдмрд╛рд╣рд░реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛ (рд░реВрдЯ рдХреЗ рдмрд╛рд╣рд░) рдлрд┐рд░ рднреА рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред

рдореИрдВ рдПрдХ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ https://github.com/facebook/react/issues/13991 рд╡рд░реНрдХ ly рд╕реЗ рдХреЛрдИ рднреА рдлрд┐рдХреНрд╕ рдирд╣реАрдВ рд╣реИ

рдореИрдВ рднреА yarn link рд╕рд╛рде рд╕рдореНтАНрдорд┐рд▓рд┐рдд рдШрдЯрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рдиреЗ v9.0.6-canary.4 рддрдХ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдЕрдм рдореИрдВ рдХреБрдЫ рдЕрдиреНрдп рдЯрд┐рдкреНрдкрдгреАрдХрд╛рд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реВрдВ рдФрд░ рдЗрд╕ рдЕрддреАрдд рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ .. рдореИрдВрдиреЗ рдЗрд╕ PR https://github.com/zeit рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рд╣реИ

рдореЗрд░реЗ рдШрдЯрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп react , react-dom , рдФрд░ styled-components ред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рдиреНрдпрд╛рд╕ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ

  • рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рджреЗрд╡-рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╣-рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛
  • рдореЗрд░реЗ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдПрдХреНрд╕рдЯрд░реНрдирд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝реЗ
  • рдореЗрд░реЗ рдЕрдЧрд▓реЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдЗрди рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рдЙрдкрдирд╛рдореЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
  • рдЕрдЧрд▓реЗ-рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓-рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдШрдЯрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рдб рдХрд┐рдпрд╛

рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

рдореИрдВ рд╕рд░реНрд╡рд░ рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рдЗрди рдореЙрдбреНрдпреВрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдХреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ @HosseinAgha рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж https://github.com/martpie/next-transpile-modules/issues/50#issuecomment -558318688

if (isServer) {
  config.externals = [
    'react',
    'react-dom',
    'styled-components',
    ...config.externals
  ]
}

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

рдореЗрд░рд╛ рдкреИрдХреЗрдЬ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ (рдФрд░ рдореЗрд░реЗ рдЕрдЧрд▓реЗ.рдХреЙрдиреНрдлрд╝рд┐рдЧ.рдЬреИ рдореЗрдВ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ)ред

рд▓реЗрдХрд┐рди yarn link @mypackage рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рджреЗрд╡ рдмрд┐рд▓реНрдб рдЪрд▓рд╛рдиреЗ рд╕реЗ рд╣рдореЗрд╢рд╛ рдПрдХ рдЕрдорд╛рдиреНрдп рд╣реБрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред

рдореИрдВ node_modules/dist/build/wepack-config.js рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдХреЗ рдФрд░ https://github.com/zeit/next.js/pull/8739 рдореЗрдВ рдЬреЛрдбрд╝реА рдЧрдИ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдХрдо рдХрд░рдХреЗ рдЗрд╕реЗ рдХрд╛рдо рдореЗрдВ рд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред

рдЕрдЧрд░ рдореИрдВ рд▓реЙрдЧ рдЗрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдХреНрдпрд╛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред

  • /ред
  • рдореЗрд░реА рд╕рдордЭ рд╕реЗ рдпрд╣ рдЯреНрд░рд┐рдЧрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдкрде рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдлрд╝рд╛рдЗрд▓ / рд╕рдВрд╕реНрдХрд░рдг 100% рд╕рдорд╛рди рд╣реИ

рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:

рд╣рдо рдпрд╛рд░реНрди рд╡рд░реНрдХрд╕реНрдкреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ (рднрд▓реЗ рд╣реА рд╣рдорд╛рд░реЗ рд░реЗрдкреЛ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдкреИрдХреЗрдЬ рд╣реЛ)ред
рд╣рдордиреЗ рдЕрдкрдирд╛ рдХреЛрдб ./src рд╕реЗ ./package/our-package-name/src рдФрд░ рд╕реЗрдЯрдЕрдк рдпрд╛рд░реНрди рд╡рд░реНрдХрд╕реНрдкреЗрд╕ => https://classic.yarnpkg.com/en/docs/workspaces/ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рддрдХ рд▓рд╣рд░рд╛рдПрдЧрд╛ ред/node_modules рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ ./package/our-package-name/node_modules рдХрд╛рдлреА рд╣рдж рддрдХ рдЦрд╛рд▓реА рд░рд╣реЗрдВрдЧреЗред

рдЗрд╕рд▓рд┐рдП рдЕрдм рдЬрдм рд╣рдо рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреЛ рдЕрдЧрд▓реЗ рд▓рд┐рдВрдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдм рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдирд╣реАрдВ рдЦреАрдВрдЪреЗрдВрдЧреЗ (рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рдкреИрдХреЗрдЬ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдиреЛрдб_рдореЙрдбрд▓ рдлрд╝реЛрд▓реНрдбрд░) рдФрд░ рд╕рдм рдХреБрдЫ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рд╡рд╣реА рдХрдордмрдЦреНрдд рд╕рдорд╕реНрдпрд╛ рд╣реИред ┬м┬м '

рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рд╢рдкрде рдЧреНрд░рд╣рдг рдХреЛ рдзреНрд╡рд╕реНрдд рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдЪрд╛рд░ рд╕рдВрд╣рд┐рддрд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реИред

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

рдмрд╛рд╣рд░реА рд╕реНрдерд╛рдиреАрдп рдкреИрдХреЗрдЬ рдФрд░ next-transpile-modules рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо Next.js рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдореИрдВ рдореВрд▓ рдХрд╛рд░рдг рдЦреЛрдЬрдиреЗ рдкрд░ Next.js рдХреЛ рдПрдХ рдкреИрдЪ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред

рдЕрдЧрд▓реЗ [email protected] рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛
рдореЗрд░реА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдЕрдЧрд▓реЗ @v9.3.1 , [email protected] , [email protected] рд╣реИрдВ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдИ рдЕрдиреНрдп

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рд╣рдорд╛рд░реА рдбрд┐рдЬрд╛рдЗрди рдкреНрд░рдгрд╛рд▓реА (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп) рдкреИрдХреЗрдЬ рдХреЛ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рджреЗрдиреЗ рдХреЗ рд╕рд╛рде рднреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВред рд╣рдо рдЗрд╕реЗ https://github.com/martpie/next-transpile-modules рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рд╛рди рдХрд░ рд░рд╣реЗ рд╣реИрдВ

рд╕реБрдЭрд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣рд╛рдБ рддрдп рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛:

  • рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЕрдкрдиреЗ node_modules рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рд┐рдорд┐рд▓рд░ рдХрд░реЗрдВ (рд╣рдордиреЗ рдЗрд╕реЗ npm link рдмрдЬрд╛рдп рдЕрдкрдиреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)
  • рдЕрдкрдиреЗ next.config.js рд▓рд┐рдП рдирд┐рдореНрди рдЬреИрд╕рд╛ рдХреБрдЫ рдЬреЛрдбрд╝реЗрдВ:
// next.config.js
const nextConfig = {
    webpack: (config, options) => {
        // modify the `config` here

        if (options.isServer) {
            config.externals = ["react", ...config.externals];
        }
        config.resolve.alias["react"] = path.resolve(__dirname, ".\\node_modules\\react");

        return config;
    },
};
// more plugins etc...

рд╣рдорд╛рд░реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ

  • рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рд╕реЗ node_modules рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдмрдХреБрдЫ рд╕рд╣рд┐рд╖реНрдгреБ рдХрд░реЗрдВред рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдмрдирд╛рдИ, рд╢рд╛рдпрдж рдЗрд╕реЗ рдЧреАрдереВрдм рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рд▓реЗрдХрд┐рди NextJS рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдпрд╣ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдореИрдВрдиреЗ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдХрд┐ рд╡реЗрдмрдкреИрдХ рдЙрд░реНрдл тАЛтАЛрдиреЗ рдореЗрд░реЗ рд╕рднреА рдиреЙрди рдиреЗрдХреНрд╕реНрдЯрдЬ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ :)

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

if (options.isServer) {
            config.externals = ["react", ...config.externals];
        }

react рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╛рд╣рд░реА рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд╣реИред

config.resolve.alias["react"] = path.resolve(__dirname, ".\\node_modules\\react");

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

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

@timneutkens

рдЦреИрд░ рдирд╣реАрдВ рдпрд╣ рд╣рдореЗрд╢рд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╕рд╣рдХрд░реНрдореА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреЛрдо рд╣реИред рд╕рдорд╕реНрдпрд╛ рддрдм рднреА рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдиреЗрдХреНрд╕реНрдЯрдЬ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реАрд▓рд┐рдВрдХ рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдЕрдВрджрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ node_modules рдлрд╝реЛрд▓реНрдбрд░ рд╣реЛрдЧрд╛ (рдХрдо рд╕реЗ рдХрдо рдЕрдЧрд░ рдЖрдкрдиреЗ рдХрднреА рдЙрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ npm i рдпрд╛ npm link рд▓рд┐рдпрд╛)ред

рдЬрдм рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ рддреЛ рдпрд╣ рдЙрд╕ node_modules рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдкрд░ рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧреА рдФрд░ рдЖрдкрдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рджреЛрд╣рд░реА рдкреНрд░рддрд┐рдпрд╛рдБ рдорд┐рд▓реЗрдВрдЧреА рдЬрд┐рд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреАред рдЕрдЧрд░ рдореИрдВ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рдЕрдВрджрд░ node_modules рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реВрдВ рдпрд╛ npm link рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рдФрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рд╣рд╛рдВ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдпрджрд┐ рдЖрдк рд╕рд╣рдХрд░реНрдореА рдирд┐рд░реНрднрд░рддрд╛ рдпрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ)ред

рддреЛ рджреЗрд╡ рдХреЗ рджреМрд░рд╛рди рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЙрд░реНрдл тАЛтАЛрдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛ рдПрдХ рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдмрддрд╛рдИ рдЧрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, config.externals ... (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП) рдХреЛ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ рд╡рд░реНрддрдорд╛рди NextJS рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЗрд╕рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИ, рд╢рд╛рдпрдж рдЬреИрд╕рд╛ рдХрд┐ рд▓реЛрдЧреЛрдВ рдиреЗ рдпрд╣рд╛рдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдХрд╛рд░рдг рдпрд╣рд╛рдВ # 8739 рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдПрдХ рдорд╛рдорд▓рд╛ рдореЗрд░реЗ рд▓рд┐рдП рд╣реЛ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди (рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ) рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (# 10162 рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд) рдХреЗ рдХрд╛рд░рдг, рдореЗрд░реЗ рд▓рд┐рдП рдЕрднреА рдХрд╛ рдЕрд╕реНрдерд╛рдпреА рдирд┐рд░реНрдзрд╛рд░рдг npm run clean рдореЗрд░реЗ preserve рдЬреЛрдбрд╝рдирд╛ рдерд╛ред dev рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╣рд╛рдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реИрдВ:
https://github.com/zeit/next.js/issues/10162#issuecomment -6125014

@timneutkens рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрд╕рд▓реА рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбрд┐рдкреЛ (рдПрд╕рдкреА рдмрдирд╛рдо рдкреАрдпрд░-рдбрд┐рдк) рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдРрдк рдореЗрдВ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@ ryan-0 рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕реЗрдЯрдЕрдк рд╣реИ? рдЕрдЧрд░ рд╕рд╛рдордЧреНрд░реА рдпреВрдЖрдИ рдПрдХ рд╕рд╣рдХрд░реНрдореА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рддреЛ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛? рдЬреИрд╕реЗ рдЖрдк рдмрд╣реБрдд рдкреБрд░рд╛рдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдХреБрдЫ рднреА рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд░рдЦрддреЗ рд╣реИрдВ?

рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕реЗрдЯрдЕрдк рдирд╣реАрдВ .. рдХреЛрдИ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рдирд╣реАрдВ рд╣реИ рдФрд░ 16.13.1 -> рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдЕрдиреНрдп рдбрд┐рдкреЛ рд╣реИрдВ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЙрдЪрд┐рдд рддреЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдЙрд╕ рд░рд┐рдкреНрд░реЛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж рдпрд╣ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ / рдХреЛрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред (рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рднреА рдХрд░рддреЗ рд╣реИрдВ):
https://github.com/zeit/next.js/issues/10162

@ ryan-0 рдЖрдкрдХреЗ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдиреЛрдб_рдореЙрдбрд▓ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ?

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ npm dedupe рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реИ?

рдирд╣реАрдВ, рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдиреЗрд╕реНрдЯреЗрдб рдиреЛрдб рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ рдХрд┐ рдмрдЧ рдХреИрд╕реЗ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдФрд░ рдХреЛрдИ npm dedupe рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ :(

рдЕрдЬреАрдм рдмрд╛рдд рд╣реИ, resolve.alias рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд░реВрдЯ рдХреЗ рдмрд╛рд╣рд░ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдореЗрд░реА next.config.js рдлрд╝рд╛рдЗрд▓ рд╣реИ:

const path = require('path')

module.exports = {
  webpack: config => {
    const { alias } = config.resolve || {}
    alias.react$ = path.resolve('node_modules/react')
    alias['react-dom$'] = path.resolve('node_modules/react-dom')

    config.resolve = {
      ...config.resolve,
      alias,
    }

    return config
  }
}

рдореИрдВ Lerna рдореЛрдиреЛрд░реЗрдкреЛ рдореЗрдВ рдореМрдЬреВрдж рд╕реНрдерд╛рдиреАрдп рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде yarn link рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рдХреЗ node_modules рдореЗрдВ react рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореЛрдиреЛрд░рдкреЛ рд░реВрдЯ рдХрд░рддрд╛ рд╣реИ ред рдореИрдВ рдпрд╣ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЬрдм рддрдХ resolve.alias рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рдлрд░реНрдХ рдкрдбрд╝реЗрдЧрд╛, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдореЛрдиреЛрд░рдкреЛ рд░реВрдЯ рд╕реЗ react рдХреА рдХреЙрдкреА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдЕрдм Cannot find module 'react' рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛?

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рдЕрдЧрд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ 'рдЙрдкрднреЛрдХреНрддрд╛' рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП next-transpile-modules рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдбреЙрдХреНрд╕ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд react рдЙрдкрдирд╛рдо рдХреЛ рдЕрдкрдиреЗ next.config.json рдореЗрдВ рдЬреЛрдбрд╝рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛ред рдореБрдЭреЗ рдЕрднреА рднреА рд░рд┐рдПрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдбреБрдкреНрд▓рд┐рдХреЗрдЯреЗрдб рдирд┐рд░реНрднрд░рддрд╛ рдХреА рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред

рдЖрдк @mweststrate рджреНрд╡рд╛рд░рд╛ relative-deps рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛?

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рдЕрдЧрд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЕрдкрдиреЗ 'рдЙрдкрднреЛрдХреНрддрд╛' рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП next-transpile-modules рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдбреЙрдХреНрд╕ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд react рдЙрдкрдирд╛рдо рдХреЛ рдЕрдкрдиреЗ next.config.json рдореЗрдВ рдЬреЛрдбрд╝рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдерд╛ред рдореБрдЭреЗ рдЕрднреА рднреА рд░рд┐рдПрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдбреБрдкреНрд▓рд┐рдХреЗрдЯреЗрдб рдирд┐рд░реНрднрд░рддрд╛ рдХреА рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред

рд╣рд╛рдВ, рдКрдкрд░ рдореЗрд░реА рдкреЛрд╕реНрдЯ рджреЗрдЦреЗрдВ рдЖрдкрдХреЛ рдореЗрд░реЗ рдирдореВрдиреЗ рдореЗрдВ config.externals рднрд╛рдЧ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрдкрдирд╛рдо рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ

@ рдЬреЛрд╣реЛрдЯ рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрд╛рдо рдирд╣реАрдВ рдЖрдпрд╛ред рдореБрдЭреЗ рдХреБрдЫ рдЕрдЬреАрдм рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрдиреЗ рд▓рдЧреАрдВ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдпрд╣ рдПрдХ: cannot destructure property 'query' of 'Object(...)(...)' as it is null рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рджред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╢реВрдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ useRouter next/router ред

@aleclarson рдЯрд┐рдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдЕрдЧрд▓реЗ рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рддреЛ рдореИрдВ рдЗрд╕реЗ рдПрдХ рдХреЛрд╢рд┐рд╢ рджреВрдВрдЧрд╛ред рдХреНрдпрд╛ рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдпрджрд┐ рдЖрдк next-transpile-modules рдФрд░ рдпрд╛рд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╕рдорд╛рдзрд╛рди рдХрд╛рдлреА рд╕реАрдзрд╛ рд╣реИ: https://github.com/martpie/next-transpile-modules#i -have-рдкрд░реЗрд╢рд╛рдиреА-рдХреЗ рд╕рд╛рде рдбреБрдкреНрд▓рд┐рдХреЗрдЯ-рдирд┐рд░реНрднрд░рддрд╛рдПрдБ-рдпрд╛-рдФрд░ -invalid-рд╣реБрдХ-рдХреЙрд▓-рддреНрд░реБрдЯрд┐-рдЗрди-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛

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

рдареАрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рди yarn link рд╕реЗ yalc рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдирд╛ рдерд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ gulp рдХрд╛рд░реНрдп рд╣реИ рдЬреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдореЗрд░реЗ dist рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ yalc рд╕реНрдЯреЛрд░ рдореЗрдВ рдзрдХреЗрд▓рддрд╛ рд╣реИред

рдореЗрд░реЗ 'рдЙрдкрднреЛрдХреНрддрд╛' рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд░рд╛рд╕реНрддреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП tsconfig.json рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛:

 "paths": {
      "~/*": ["/src/*"],
      "my-library/*": ["./node_modules/my-library/dist/*"]
    },

рдФрд░ next.config.js рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝рд╛:

 experimental: {
      jsconfigPaths: true, // enables it for both jsconfig.json and tsconfig.json
    }

рддреЛ рдЕрдЧрд▓рд╛ tsconfig.json paths рдЖрдзрд╛рд░ рдкрд░ рдкрдереЛрдВ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдБ ред

рд▓рдВрдмреА рдХрд╣рд╛рдиреА рдЫреЛрдЯреА: yalc + next-transpile-modules рдиреЗ рдореЗрд░реЗ рд╕реНрдерд╛рдиреАрдп рд╡рд┐рдХрд╛рд╕ рд╕реЗрдЯрдЕрдк рдореЗрдВ рдмрд╣реБрдд рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ред рдХреЛрдИ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рдЕрдЬреАрдм рддреНрд░реБрдЯрд┐рдпреЛрдВред yarn add рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдзреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдФрд░ yalc рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред

рдпрджрд┐ рдЖрдк рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ styled-components рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рд╕рдВрджрд░реНрдн рд▓реЗрдВ: https://styled-compenders.com/docs/faqs#linking -in-a-ssr-рдкрд░рд┐рджреГрд╢реНрдп

server/index.js :

const moduleAlias = require('module-alias');
moduleAlias.addAlias('styled-components', path.join(__dirname, '../node_modules/styled-components'));

рд▓реЗрдХрд┐рди, рд╣рдореЗрдВ next.config.js рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:

config.resolve.alias['react'] = path.resolve(__dirname, './node_modules', 'react');
config.resolve.alias['react-dom'] = path.resolve(__dirname, './node_modules', 'react-dom');
config.resolve.alias['prop-types'] = path.resolve(__dirname, './node_modules', 'prop-types');
config.resolve.alias['styled-components'] = path.resolve(__dirname, './node_modules', 'styled-components');

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рд╕рд╣рд╛рдпрддрд╛ рдорд┐рд▓реЗрдЧреАред


рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛:

рдЖрдЧреЗ: 9.3.5
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛: 16.13.1
рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХ: 5.1.0

рдлреЙрдХреНрд╕, рд╕рд░рд▓ рдлрд┐рдХреНрд╕, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдкрдиреЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдЕрдЧрд▓рд╛ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреЛрдо рдХрд░:
npm remove -g react next react-dom

рдлреЙрдХреНрд╕, рд╕рд░рд▓ рдлрд┐рдХреНрд╕, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдкрдиреЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдЕрдЧрд▓рд╛ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреЛрдо рдХрд░:

npm remove -g react next react-dom

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

рд╡реЗрдм рд╣реА рдирд╣реАрдВ!
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ 16.9
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рджреЗрд╢реА 0.62
Android рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ
рд╢рд╛рдпрдж рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рдкреНрд░рдЬрдирдирдХрд░реНрддрд╛?

import React, { Component, useState } from 'react';
import {
  AppRegistry,
} from 'react-native';

function hooker() {
  const [count, setCount] = useState(0)
}

class ClassA extends Component {
  constructor(props) {
    super(props)
    //hooker();  //Invalid hook call Error
  }
  componentDidMount(){
    //hooker();  //Invalid hook call Error
  }
  render() {
    hooker();  //Invalid hook call Error
    return (      
      null   
    );
  }
} 
export default function App(props) {
  //hooker();  //No problem
  return (
    <ClassA/>
  );
};

AppRegistry.registerComponent('default', () => App);

рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдФрд░ npm ( https://github.com/vercel/next.js/ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп yarn рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ред рдореБрджреНрджреЛрдВ / 9022 # рдЬрд╛рд░реА рдХрд░рдиреЗ -616169466

рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рд╣рд▓ рд╣реИ?

рдмрд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг 9.4.4 рдХреЗ рд╕рд╛рде рдЕрдЯрдХ рдЧрдпрд╛ред

рдиреАрдЪреЗ рдирд┐рдЬреА рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП HOC рдкрд░ рдЬрд╛рд░реА рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдореБрджреНрджрд╛ред рдореИрдВрдиреЗ withRouter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЙрд╕реА рддреНрд░реБрдЯрд┐ рдХреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд▓рд┐рдкрдЯреЗ рдШрдЯрдХ рдкрд░ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ред

import { useRouter } from 'next/router'

function withPrivateRoute(WrappedComponent) {
const router = useRouter();                    //**** ERROR IS THROWN HERE *******
class WPR extends React.Component {
    componentDidMount(){
        console.log('wrappeed', WrappedComponent);
        // const { router } = this.props;
        const intendedRoute = router.pathname;
        // const isAdmin = !!cookies.get('isAdmin');
        // const isAuthenticated = !!cookies.get('username');
        const isAuthenticated = false;
        const isAdmin = false;
        if (!isAuthenticated) {
            router.push({
                pathname: '/login',
                query: { from: intendedRoute },
            });
        }
        if (
            isAuthenticated &&
            router.pathname.includes('admin') &&
            !isAdmin
        ) {
            router.push('/');
        }
    }

    render() {
        return ({ ...props }) => <WrappedComponent {...props} />;
    }
}
return WPR;
 }

  export default withPrivateRoute;

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдерд╛ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рд╢рд╛рдЦрд╛ рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рдкрдбрд╝рд╛ (рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдорд╛рдирд╛ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдирд╣реАрдВ рдерд╛) рдФрд░ рдлрд╝рд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рдирд╡реАрдирддрдо рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рдореБрджреНрджрд╛ рдерд╛

import { useToasts, AppearanceTypes } from 'react-toast-notifications';

export const showToast = (message: string, appearance: AppearanceTypes) => {
    const { addToast } = useToasts();
    addToast(message, {
        appearance,
    });
};

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

рдореИрдВ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ PR https://github.com/vercel/next.js/pull/8739 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ
рд╣рдо рд░рд╢ рдФрд░ pnpm рдХреЗ рд╕рд╛рде рдПрдХ рдореЛрдиреЛрд░реЗрдкреЛ рд╕реЗрдЯрдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЙрд╕ рдХрд╛рд░рдг рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдкреАрдЖрд░ рд╡рд┐рд▓рдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХрд╛ рдЕрд░реНрде рдпрд╣ рднреА рд╣реИ рдХрд┐ https://github.com/vercel/next.js/issues/9022#issuecomment -610255555 рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ @timneutkens рдмрд┐рдВрджреБ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рд╣реИ:

website
  dependencies: next, react, react-dom, library
library
  devDependencies: react, react-dom (for tests)
  peerDependencies: react, react-dom

library.devDependencies.(react|react-dom) рд╕реАрдорд▓рд┐рдВрдХ рд╣реИрдВ рдЬреЛ website.dependencies(react|react-dom) рд╕рдорд╛рди рд╕рдЯреАрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдУрд░ рд╕рдВрдХреЗрдд рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рд╕рдВрдХрд▓реНрдк @1.11.0 рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ https://github.com/vercel/next.js/blob/f98e38c9b634b85e6679e7b5f953a9809c74cfc3/packages/next/lib/resolve-request.ts#Loy1616 рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ Node.js рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдХреЗред

рд╣рдордиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛:

  1. рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ library рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
  2. resolve.symlinks = true рдЕрдВрджрд░ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ next.config.js
  3. рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдмрд╛рд╣рд░реА рдЬреЛрдбрд╝ рддреЛрдбрд╝ library рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ library/node_modules (рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП)
  4. рд▓рд╛рдЗрди рдмрд╛рд╣рд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рддреЗ https://github.com/vercel/next.js/blob/f98e38c9b634b85e6679e7b5f953a9d98074cfc3/packages/next/build/webpack-config.ts#L601

рдЗрд░рд╛рджрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ Hacky, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ Next.js рдЬреИрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рдХреБрдЫ рд╢рдХреНрддрд┐ рд╣реИ рдПрдкреНрдкрд▓ рдпрд╣ monorepos рдХрд┐ рдЕрдХреНрд╕рд░ рдЙрди рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕рд╛рдЭрд╛ рдХреЛрдб рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╕рдорд░реНрдерди рдХреА рдЙрдореНрдореАрдж рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реИ?

рдореИрдВ рдЗрди рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд░рд╣рд╛ рд╣реВрдБ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐, рдЬрдм рдореИрдВ рдПрдХ HOC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдБ рддреЛ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рдореИрдВ рдПрдХ рдЖрд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдБ, рддреЛ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд░реЗрдкреЛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдЕрдЧрд▓реЗ-рдШрдЯрдХ-рд╣реБрдХ-рддреНрд░реБрдЯрд┐

HOC рдЯреЗрд╕реНрдЯ - рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ

components/withPrivateRoute.js -> рдЙрдЪреНрдЪрддрд░ рдЖрджреЗрд╢ рдШрдЯрдХ

import React, { useEffect } from 'react';
import { useRouter } from 'next/router';
const withPrivateRoute = WrappedComponent => {

    const router = useRouter();
    const [loading, setLoading] = useState(true);

    useEffect(() => {
        const user = localStorage.getItem('user');
        console.log(user);

        if (!user) {
            router.push('/login');
        } else {
            setLoading(false);
        }

    }, []);

    return ({ ...props }) => !loading && <WrappedComponent test={test} {...props}/>;
};

export default withPrivateRoute;

pages/hoc.js -> рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (HOC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреЗрдЬ)

import React from 'react';
import withPrivateRoute from '../components/withPrivateRoute';

const HocTest = () => <p>Authorization HOC Test!</p>;

export default withPrivateRoute(HocTest);

рд░реИрдкрд░ рдХрдореНрдкреЛрдиреЗрдВрдЯ рдЯреЗрд╕реНрдЯ

components/AuthLayout.js -> рдШрдЯрдХ (рдЖрд╡рд░рдг)

import React, { useState, useEffect } from 'react';
import { useRouter } from 'next/router';

const AuthLayout = ({ children }) => {

    const router = useRouter();
    const [loading, setLoading] = useState(true);

    useEffect(() => {
        const user = localStorage.getItem('user');
        console.log(user);

        if (!user) {
            router.push('/login');
        } else {
            setLoading(false);
        }

    }, []);

    return !loading && (
        <React.Fragment>
            {children}
        </React.Fragment>
    );
};

export default AuthLayout;

pages/wrapper.js -> рдкреГрд╖реНрда рдЖрд╡рд░рдг рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

import React from 'react';
import AuthLayout from '../components/AuthLayout';

const WrapperTest = () => (
    <AuthLayout>
        <p>Authorization Wrapper Test!</p>
    </AuthLayout>
);

export default WrapperTest;

рд╣реЗ @Timer рд╡рд╣рд╛рдБ рдЗрд╕ рдкрд░ рдПрдХ рдкреНрд░рдЧрддрд┐ рд╣реИ?

рдореИрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ https://github.com/vercel/next.js/issues/9022#issuecomment -609969178 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реВрдВред
рдореЗрд░реА рд╕рдорд╕реНрдпрд╛рдПрдБ рдореЗрд░реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд░реЗрдкреЛ рдФрд░ yarn link рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрд░реЗ рдРрдк рд░реЗрдкреЛ рдХреЗ рд╕рд╛рде рдереА
рдЙрджрд╛рд╣рд░рдг
package.json

{
  "dependencies": {
    "next": "9.5.1",
    "myUILibrary": "git+ssh://[email protected]/MyRepo/library-web-ui.git#master",
    "react": "16.13.1",
    "react-dom": "16.13.1"
  }
}

рдФрд░ рдореИрдВ yarn link myUILibrary рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЪреЗрдХрдЖрдЙрдЯ MyRepo/library-web-ui рдЬреЛ рднреА рд╣реИ react рд╕реНрдерд╛рдкрд┐рддред

рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ @johot рдзрдиреНрдпрд╡рд╛рдж

3 рдореЗрдВ рд╕реЗ 5 3 (рд╣рд╛рдБ! рд╕рднреА рд╕рд┐рддрд╛рд░реЗ рдФрд░ рдЕрдзрд┐рдХ!)

рдореИрдВ рд░рд╢ + рдкреАрдПрдирдкреАрдПрдо рдореЛрдиреЛрд░реЗрдкреЛ рдореЗрдВ @ wasd171 рдХреЗ рд╕рдорд╛рди рдЕрдиреБрднрд╡ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ рдЕрднреА рдЕрдВрддрд░рд┐рдо рдореЗрдВ ~9.4.4 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред

рдореИрдВ рд░рд╢ + PNPM Rush рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдЯреАрдХ рдореБрджреНрджрд╛ рд░рдЦ рд░рд╣рд╛ рд╣реВрдВ

рдареАрдХ рд╣реИ рдореБрдЭреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рд░рдг рдмрд╣реБрдд рд╣реА рдмреЗрд╡рдХреВрдлрд╛рдирд╛ рддреНрд░реБрдЯрд┐ рд╣реБрдИ:

import React, { useState } from 'React';

рдпрд╣ рдЖрд░ eact рдХреЗ рдмрдЬрд╛рдп рдЖрд░ eact рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

import React, { useState } from 'react';

рд╣рд╛рдБред рдореИрдВ рдЗрд╕реЗ 9.5.x - 9.4.4 рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ - рдЖрдк рдЗрд╕реЗ next-site рд╕рд╛рде рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

Capture

рдореИрдВ 9.5.2 рдореЗрдВ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ 9.5.3 рдореЗрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪрд╛рд▓ рдХреЗ рдореЗрд░реЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВ pnpm рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред

рдореИрдВрдиреЗ рднреА рдЬрд▓реНрджреА рд╣реА рдмреЛрд▓ рджрд┐рдпрд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ 9.5.3 рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдпрд╣ рдЕрдм рдореЗрд░реЗ рд▓рд┐рдП 9.5.3 рдореЗрдВ рдордЬрд╝рдмреВрддреА рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред What's рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЕрдм рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИред

9.5.3 рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рд╡рд╣реА рддреНрд░реБрдЯрд┐ред рдореИрдВ рд░рд╢ + рдПрдирдкреАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХреНрдпрд╛ рдХреЛрдИ рдЬреНрдЮрд╛рдд рд╕рдорд╛рдзрд╛рди рд╣реИ? (btw рд╢реАрд░реНрд╖рдХ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ 9.0.6 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ)

FYI рдХрд░реЗрдВ, рдпрд╣ рдПрдХ рдХрд╛рд░рдг рдерд╛ рдХрд┐ рдореЗрд░реЗ рдСрд░реНрдЧрди рдиреЗ npm рд╕реЗ yarn рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдпрд╣ рд╕рд┐рд░реНрдл (рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ) рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЦреЗрд▓рддрд╛ рд╣реИред рдпрд╣ рдХрджрдо рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдХрд╛рдлреА рдЦреБрд╢ рд╣реИрдВред

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

рд╡реИрд╕реЗ, next-transpile-modules рдФрд░ npm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдиреЗ, рдореИрдВрдиреЗ рдПрдХ FAQ рдЕрдиреБрднрд╛рдЧ рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ: https://www.npmjs.com/package/ рдЕрдЧрд▓рд╛-рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓-рдореЙрдбреНрдпреВрд▓ # i -have- рдкрд░реЗрд╢рд╛рдиреА-рдбреБрдкреНрд▓рд┐рдХреЗрдЯ-рдирд┐рд░реНрднрд░рддрд╛-рдпрд╛-рдЕрдорд╛рдиреНрдп-рд╣реБрдХ-рдХреЙрд▓-рддреНрд░реБрдЯрд┐-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛

рдореИрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдореЗрдВ рдпрд╛рд░реНрди рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдЗрд╕рд▓рд┐рдП рд╕рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдореВрд▓ package.json рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реАрдВ:

  "resolutions": {
    "react": "16.13.1",
    "react-dom": "16.13.1"
  }

рджреЗрдЦреЗрдВ: https://classic.yarnpkg.com/en/docs/selective-version-resolutions/

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдерд╛рдиреАрдп рдмрд┐рд▓реНрдб рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛, рдЬрдмрдХрд┐ рд╡рд░реНрд╕реЗрд▓ рдкрд░ рдмрд┐рд▓реНрдб рдиреЗ Invalid hook call рддреНрд░реБрдЯрд┐ рдХреА рд╕реВрдЪрдирд╛ рджреАред

рдореИрдВрдиреЗ рдиреЗрдХреНрд╕реНрдЯ 10 рдореЗрдВ рдПрдХ catchall рдкреЗрдЬ рдХреЗ рд╕рд╛рде _app.js рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдореБрджреНрджреЗ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛

image

рдЕрд░реЗ,

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВрдиреЗ рдРрд╕реЗ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рдб рдореЙрдбреНрдпреВрд▓ рд░рдЦреЗ рдереЗ рдЬреЛ npm link рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝реЗ рдереЗред

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

  1. рдЕрдкрдиреЗ рдореБрдЦреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред
  2. рдЕрдкрдиреЗ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП npm install рдЪрд▓рд╛рдПрдБред
  3. рдЕрдкрдирд╛ рдЯрд░реНрдорд┐рдирд▓ / рдХрдВрд╕реЛрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдкрд░ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░реЗрдВ, рдлрд┐рд░ sudo npm link рдЪрд▓рд╛рдПрдВред
  4. рдЕрдкрдиреЗ рдореБрдЦреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ npm link @example/project рдЪрд▓рд╛рдПрдВред рдпрджрд┐ рдЖрдк Visual Studio рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЫреЛрдЯрд╛ рддреАрд░ рдЖрдЗрдХрди рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
  5. рдЕрдкрдирд╛ npm run dev рдЪрд▓рд╛рдПрдБред

рдлрд┐рд░, рдЖрдкрдХреЛ рдЕрдкрдиреЗ @ рдЙрджрд╛рд╣рд░рдг / рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдирд┐рдпрдорд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рд╣рдХрд░реНрдореА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдорджрдж рдХрд░реЗрдВрдЧреЗ!

рдореИрдВ рдПрдХ рдЕрдЧрд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдВрджрд░ рдХреЗ рд╕рд╛рде рдПрдХ monorepo рд╣реИред storybook рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЕрдорд╛рдиреНрдп рд╣реБрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ @aengl рдХреЗ рд╕реБрдЭрд╛рд╡ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ - рдореИрдВрдиреЗ resolutions рдХреЛ рдореВрд▓ рд╕реНрддрд░ package.json рдЬреЛрдбрд╝рд╛:

"resolutions": {
  "react": "^17.0.1",
  "react-dom": "^17.0.1"
}

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

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

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

formula349 picture formula349  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rauchg picture rauchg  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

irrigator picture irrigator  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

timneutkens picture timneutkens  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ