рдЬрдм рдЖрдк рдореБрдЦреНрдп Next.js рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдмрд╛рд╣рд░ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЕрдВрдд рдореЗрдВ Invalid hook call
рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреВрдЯ рдЧрдпрд╛ рд╣реИред рд╣реБрдХ рдХреЗ рдмрд┐рдирд╛ рдШрдЯрдХ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдЬрдм рдЖрдк рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рдмрдЧ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ >9.0.5
рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдореБрдЦреНрдп рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдмрд╛рд╣рд░ рдХреА рдлрд╛рдЗрд▓реЗрдВ рдЯреНрд░рд╛рдВрд╕рдкреЗрд▓ рд╣реЛ рдЬрд╛рдПрдВред рдпрд╣ <=9.0.5
рдореЗрдВ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ
Https://github.com/baldurh/next-9.0.6-bug-repro рдкрд░ repro
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдмрд╛рд╣рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреЛрдб рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред
>=9.0.6
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╢рд╛рдпрдж Next.js рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣рдо рдПрдХ рдореЛрдиреЛрд░реЗрдкреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдЭрд╛ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИред рдпрд╣ рдХрд╛рдо рдлрд┐рд░ рд╕реЗ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рднреА рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА
@baldurh рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╣реА рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдЬрдм рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЕрдм тАЛтАЛрдХреЗрд╡рд▓ рдлрд╝реЛрд▓реНрдбрд░ рдЬрд╣рд╛рдВ Next.js рдРрдк рд░рд╣рддрд╛ рд╣реИ, рддреИрдирд╛рдд рд╣реИ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕рднреА рдмрд╛рд╣рд░реА рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред 2 рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
@ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ рдФрд░ рд╣рдо рдЕрднреА рдпрд╛ рдХреБрдЫ рднреА рд╕рдорд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдирд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдордиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдпрд╛рд░реНрди рд╡рд░реНрдХрд╕реНрдкреЗрд╕ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдордиреЗ рдмрд╛рдЬрд╝рд▓ рдХреЛ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдпрд╛рд░реНрди рд╡рд░реНрдХрд╕реНрдкреЗрд╕ рдХреА рд╕рд╣рд╛рдиреБрднреВрддрд┐ рдкреНрд░рдХреГрддрд┐ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЦреЗрд▓рддрд╛ рд╣реИред 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 рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдбрд╛рд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
рдЕрдЬреАрдм рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЙрддреНрдкрд╛рджрди рдирд┐рд░реНрдорд╛рдг рдкрд░ рд╣реЛрддрд╛ рд╣реИред
@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 рдЪреАрдЬреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рд╣реИ:
i18next
/ react-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 рдореЗрдВ рдЬреЛрдбрд╝реА рдЧрдИ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдХрдо рдХрд░рдХреЗ рдЗрд╕реЗ рдХрд╛рдо рдореЗрдВ рд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред
рдЕрдЧрд░ рдореИрдВ рд▓реЙрдЧ рдЗрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдХреНрдпрд╛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред
рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:
рд╣рдо рдпрд╛рд░реНрди рд╡рд░реНрдХрд╕реНрдкреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ (рднрд▓реЗ рд╣реА рд╣рдорд╛рд░реЗ рд░реЗрдкреЛ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдкреИрдХреЗрдЬ рд╣реЛ)ред
рд╣рдордиреЗ рдЕрдкрдирд╛ рдХреЛрдб ./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 рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдХреЗред
рд╣рдордиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛:
library
рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП resolve.symlinks = true
рдЕрдВрджрд░ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ next.config.js
library
рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ library/node_modules
(рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП)рдЗрд░рд╛рджрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ Hacky, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ Next.js рдЬреИрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рдХреБрдЫ рд╢рдХреНрддрд┐ рд╣реИ рдПрдкреНрдкрд▓ рдпрд╣ monorepos рдХрд┐ рдЕрдХреНрд╕рд░ рдЙрди рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕рд╛рдЭрд╛ рдХреЛрдб рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╕рдорд░реНрдерди рдХреА рдЙрдореНрдореАрдж рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рд╣реИ?
рдореИрдВ рдЗрди рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд░рд╣рд╛ рд╣реВрдБ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐, рдЬрдм рдореИрдВ рдПрдХ 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
рд╕рд╛рде рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдореИрдВ 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
рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдореБрджреНрджреЗ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛
рдЕрд░реЗ,
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВрдиреЗ рдРрд╕реЗ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рдб рдореЙрдбреНрдпреВрд▓ рд░рдЦреЗ рдереЗ рдЬреЛ npm link
рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреБрдбрд╝реЗ рдереЗред
рд░рд┐рдПрдХреНрдЯ рдЬреИрд╕реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдирд┐рдпрдорд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдмрдЬрд╛рдп peerDependencies
рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд░рд╣рд╛ рдерд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдорд╛рдиреНрдп рд╣реБрдХ рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИ, рддреЛ рдЗрди рдЪрд░рдгреЛрдВ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
npm install
рдЪрд▓рд╛рдПрдБредsudo npm link
рдЪрд▓рд╛рдПрдВредnpm link @example/project
рдЪрд▓рд╛рдПрдВред рдпрджрд┐ рдЖрдк Visual Studio рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЫреЛрдЯрд╛ рддреАрд░ рдЖрдЗрдХрди рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПредnpm run dev
рдЪрд▓рд╛рдПрдБредрдлрд┐рд░, рдЖрдкрдХреЛ рдЕрдкрдиреЗ @ рдЙрджрд╛рд╣рд░рдг / рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдирд┐рдпрдорд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рд╣рдХрд░реНрдореА рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдорджрдж рдХрд░реЗрдВрдЧреЗ!
рдореИрдВ рдПрдХ рдЕрдЧрд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдВрджрд░ рдХреЗ рд╕рд╛рде рдПрдХ monorepo рд╣реИред storybook
рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЕрдорд╛рдиреНрдп рд╣реБрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ @aengl рдХреЗ рд╕реБрдЭрд╛рд╡ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ - рдореИрдВрдиреЗ resolutions
рдХреЛ рдореВрд▓ рд╕реНрддрд░ package.json
рдЬреЛрдбрд╝рд╛:
"resolutions": {
"react": "^17.0.1",
"react-dom": "^17.0.1"
}
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдПрдХ рдмрд╛рд░ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдФрд░ рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╣рд╛рдп рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрджреНрдпрддрди? рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореЛрдиреЛрд░реЗрдкреЛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕ рд╕рдЯреАрдХ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред