рдЕрдм рд╣рдо рдореЗрдВ рд╕реЗ рдХреБрдЫ рд▓реЛрдЧ ES2015 рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП NPM рдкреИрдХреЗрдЬ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдШрдЯрдХ) рдХреЛ рдмрд┐рдирд╛ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓ рдХрд┐рдП рд╢рд┐рдк рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрджрд┐ рд╡реЗ Next.js рдпрд╛ CRA (рдЬреЛ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИ) рдЬреИрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВред рд╡реЗ рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ:
рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ рдХреЗ рдЕрдВрджрд░ рдХреА рд╣рд░ рдЪреАрдЬ рдХреЛ рдмреИрдмреЗрд▓ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд┐рдВрдЧ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░
рддреЛ, рдпрд╣рд╛рдБ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИред
рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ next.config.js
рдореЗрдВ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдмреЗрдмреЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреЗрдЦреЛ:
module.exports = {
transpileModules: [
"my-component",
"redux/src"
]
}
webpack()
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?transpileModules
рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИрдпрд╣ рд╡реЗрдмрдкреИрдХ () рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм рдХрд╕реНрдЯрдо рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИред рдпрд╣ рд╕рд╛рдзреНрдп рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдореМрдЬреВрджрд╛ рд▓реЛрдбрд░ рдореЗрдВ рдмреИрдарддрд╛ рд╣реИред рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдХреБрдЫ рдХрдард┐рди рд╣реИред
transpileModules
рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИ
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ред рдореИрдВ рдЕрдкрдбреЗрдЯ рдХрд░реВрдВрдЧрд╛ред
рдХреНрдпрд╛ рд╣рдо рд░реЗрдЧреЗрдХреНрд╕рдкреНрд╕ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ?
рд╣рд╛рдВред рдЬрд╝рд░реВрд░ред
рдЕрд░реЗ,
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЕрдкрдиреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рд▓рд░реНрди/рдиреЗрдХреНрд╕реНрдЯ/рд╕реНрдЯрд╛рдЗрд▓ рдЬреИрд╕реА рдирдИ рддрдХрдиреАрдХреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ ... рдФрд░ рдЗрд╕ рдкрд░ рд╢реБрд░реБрдЖрддреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред
рдореИрдВрдиреЗ рдПрдХ рдбреБрдкреНрд▓реАрдХреЗрдЯ рдореБрджреНрджрд╛ рдЦреЛрд▓рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдиреЗрдХреНрд╕реНрдЯрдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рд╕реАрдЖрд░рдП-рдЖрдзрд╛рд░рд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЖрдпрд╛рдд/рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реЗрд╢рди рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдпреЛрдЧреНрдп рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ)
рдореИрдВрдиреЗ рдпрд╣ рднреА рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдмреЗрдмреЗрд▓, рдЬреЛ рд▓рд░реНрди рдкрд░ рднреА рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ @arunoda рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдРрдк рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд┐рдВрдЧ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред
рдореИрдВ рдЕрдкрдиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдВрдЧрд▓ рдмреЗрдмреЗрд▓ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдЙрд╕ рдХреЙрдиреНрдлрд┐рдЧ рдХреЛ рдЕрдкрдиреЗ рд╕рднреА рдбрд┐рдХреЙрдЙрд▓реНрдб рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрд╣ рд╢рд╛рдпрдж рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рдореИрдВ рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдиреЗрдХреНрд╕реНрдЯ рд░рдирд░ рдХреЗ рдмрд╛рд╣рд░ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ
рдореЗрд░реА рд╡рд░реНрддрдорд╛рди рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдпрд╣рд╛рдВ рд╣реИ: https://github.com/slorber/playground/ рдЬреИрд╕реЗ рд╣реА рдХреЛрдИ рдХрд╛рдВрдЯрд╛/рдкреАрдЖрд░ рд╣реЛрдЧрд╛, рдореИрдВ рдЗрд╕реЗ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред @arunoda рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
@slorber рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо 2.0 рд░рд┐рд▓реАрдЬ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рдо рд╕рд╛рдорд╛рди рдХреЛ рдареАрдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдмрдЧ рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ 2.0 рдХреЗ рдмрд╛рдж рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдареАрдХ рд╣реИ рддреЛ рдореИрдВ рдПрдХ рдХрд╛рдВрдЯрд╛ рдмрдирд╛ рджреЗрддрд╛ рд╣реВрдБред рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 2.0.0 рдмреАрдЯрд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЪрд▓ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡реЗрдмрд╕рд╛рдЗрдЯ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╡реЗрдмрдкреИрдХ 1.13 рдХрд░рддрд╛ рд╣реИ: рдореБрдЦреНрдп/рдореЙрдбреНрдпреВрд▓ рдлрд╝реАрд▓реНрдбред
рдореИрдВ рдПрдХ рдмрдВрдбрд▓рд░ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдкреИрдХреЗрдЬ рдХреЗ "рдореЙрдбреНрдпреВрд▓" рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдЬреЗрд╕рди рдирд╣реАрдВ? рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ "рдореБрдЦреНрдп" рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╛рд░рджрд░реНрд╢реА рдХреЛрдб рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реЗрд╢рди рдХреЛ рд╢рд╛рдорд┐рд▓/рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдореИрдВ рдХрд┐рди 3 рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЗрд╕ рдкрд░ рдХреЛрдИ рд╕рд┐рдлрд╛рд░рд┐рд╢?
@slorber рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ main
рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рдЕрдкрдиреЗ next.conf.js
. рдореЗрдВ exclude
рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдлрд╝рд╛рдЗрд▓рдкрде рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд╣рдореНрдо рдореИрдВрдиреЗ рдиреЗрдХреНрд╕реНрдЯ 2.x рдХреЗ рдЦрд┐рд▓рд╛рдл рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЬреЛ рджреЗрдЦрд╛ рд╣реИ рдЙрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореИрдВрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛рдо рджреЗрдЦрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдЬрдмрдХрд┐ рдЬреЗрдПрд╕рдиреЗрдХреНрд╕реНрдЯ: рдореБрдЦреНрдп рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ (рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореБрдЭреЗ рдпрд╛рдж рд╣реИ)ред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛
рд╡реИрд╕реЗ рднреА, рдЬреЗрдПрд╕рдиреЗрдХреНрд╕реНрдЯ: рдореБрдЦреНрдп рдпрд╛ рдореЙрдбреНрдпреВрд▓ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрдВрдкрдиреА-рдЖрдВрддрд░рд┐рдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реЗрд╢рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╢рд╛рдпрдж рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ
рд╕рдореБрджрд╛рдп рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ рдирд╛? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ react-youtube
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдореИрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдорд╛рди рд░рд╣рд╛ рд╣реВрдВ?
рд╕рдВрджрд░реНрдн: https://github.com/rauchg/blog/blob/master/components/post/youtube.js
рд╣рд╛рдВ, рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрд╢рд╛ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрднреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЕрдкрдиреЗ lib рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдмреЗрдмреЗрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд░реЛрд▓рдЕрдк рдпрд╣реА
рд▓реЗрдХрд┐рди рдХрдВрдкрдиреА рдХреЗ рдЖрдВрддрд░рд┐рдХ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП, рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрдИ рдкреНрд░реЛрдЬреЗрдХреНрдЯ (рдЬреИрд╕реЗ рдмреИрдмреЗрд▓ рдкреНрд░реАрд╕реЗрдЯ) рдореЗрдВ рд╕рдорд╛рди рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдВрдбрд▓рд░ рдХреЛ рд╕рднреА рдХрдВрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ
@slorber рд╕реЗ рдмрд╣реБрдд рд╕рд╣рдордд рд╣реИрдВ - рдпрд╣ рдЖрдВрддрд░рд┐рдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рддреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдФрд░ @rauchg / @arunoda RegExp рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ NPM org рдирд╛рдорд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдВрдкрдиреА рдХреЗ рд╕рднреА рдЖрдВрддрд░рд┐рдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрдХрдбрд╝рддреА рд╣реИ:
// next.config.js
module.exports = {
transpileModules: [
/^\@my-npm-org\/.*/
]
}
рд╕реБрдВрджрд░ рд╕реБрдЭрд╛рд╡ @philcockfield
рдЕрд░реЗ рд╢рд╛рдпрдж рдпрд╣ рдХреБрдЫ рдкреНрд░реАрд╕реЗрдЯ рджреЗрдиреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдХрд░рдг (рд▓рд░реНрди/рдПрдирдкреАрдПрдо рд▓рд┐рдВрдХ ...) рд╕рд┐рдореНрд▓рд┐рдВрдХ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рд╕рд░рд▓ рдХреНрдпреЛрдВ рдирд╣реАрдВ:
```рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдореЙрдбреНрдпреВрд▓.рдПрдХреНрд╕рдкреЛрд░реНрдЯ = {
transpileModules: ["рд╕рд┐рдореНрд▓рд┐рдВрдХ"]
}
````
рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ next.js
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдореЙрдбреНрдпреВрд▓ рдХреА рдПрдХ рд╕рдореГрджреНрдз рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реВрдВ, рдЙрддрдирд╛ рд╣реА рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддреА рд╣реИред рдпрд╣ рдореЗрд░реЗ рдЖрдВрддрд░рд┐рдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдмреЗрдмреЗрд▓ рд╕рдВрдХрд▓рди рдЪрд░рдг рдХреА рдирдХрд▓ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд┐рдЯрд╛ рдмрди рд░рд╣рд╛ рд╣реИред
рдореИрдВ
рдореИрдВ рдЖрдЬ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдБ :)
@philcockfield рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ: https://github.com/zeit/next.js/pull/749
рдзрдиреНрдпрд╡рд╛рдж @ рдЕрд░реБрдгреЛрджрд╛
рддреЛ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреЗ рдкреАрдЖрд░ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ рд╣реИ рдпрджрд┐ рдпрд╣ рд╕рд┐рдореНрд▓рд┐рдВрдХ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдереЛрдбрд╝реА рд╕реАрдорд┐рдд рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдирдкреАрдПрдо рд▓рд┐рдВрдХ рдпрд╛ рд▓рд░реНрдирд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреА, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдирдкреАрдПрдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реНрдб рдирд╣реАрдВ рд╣реИрдВ (рджрд╛рдПрдВ? рдореБрдЭреЗ рдХреЛрдИ рдЕрдиреНрдп рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ рдЬрдм рддрдХ рдЖрдк /node_modules
рдЕрдВрджрд░ рдореЙрдбреНрдпреВрд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ)
рд╕рд┐рдореНрд▓рд┐рдВрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХреНрдпреЛрдВ рдирд╣реАрдВ? рдХреНрдпрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ?
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореИрдВ рдЕрдкрдиреЗ рдРрдк рдкрд░ рдЖрдкрдХреА рд╢рд╛рдЦрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдЬреНрдЮрд╛рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рд╢рд╛рдЦрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдкрд░реАрдХреНрд╖рдХ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджрд░реНрджрдирд╛рдХ рдирд╣реАрдВ рд╣реИ? рдореИрдВрдиреЗ рдХреБрдЫ рд╕рд╛рдорд╛рди рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдЬреИрд╕реЗ:
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╛рдВрдЯреЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ?
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ next.config.js
: module.exports = { webpack: (config
, рддреЛ config.module.rules
рдореЗрдВ рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдирд┐рдпрдо рдХреЛ рдмрджрд▓рдиреЗ рдпрд╛ рдПрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? :
{ loader: 'babel-loader',
include: '/Users/me/gh/guide/node_modules/next/dist/pages',
options:
{ babelrc: false,
cacheDirectory: true,
sourceMaps: 'both',
plugins: [Object] } },
{ test: /\.js(\?[^?]*)?$/,
loader: 'babel-loader',
include:
[ '/Users/me/gh/guide',
'/Users/me/gh/guide/node_modules/next/dist/pages' ],
exclude: [Function: exclude],
query:
{ babelrc: true,
cacheDirectory: true,
sourceMaps: 'both',
presets: [] } } ]
рд╕реБрдЭрд╛рдП рдЧрдП рд╕рд░рд▓ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдореЗрд░реА рдЕрдЬреНрдЮрд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдореИрдВ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реИ? рд╣рдо рдЕрдкрдиреЗ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ es6 рдЖрдпрд╛рдд рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ, рд╣рдореЗрдВ рдЯреНрд░реА-рд╢реЗрдХрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдХреЛрдИ рдЬрдирд╕рдВрдкрд░реНрдХ рд╣реИ?
@andrewmclagan рдпрд╣ рдореБрджреНрджрд╛ рдЕрднреА рднреА рдЦреБрд▓рд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдкреАрдЖрд░ рд╣реИ рдЬреЛ рд╢рд╛рдпрдж рд╕рднреА рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ (рдЬреИрд╕реЗ LernaJS рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛)
рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ node_modules рд╕реЗ рдЖрдпрд╛рдд рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓рд╛ рд╡реЗрдмрдкреИрдХ рдмрдирд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХрд╛ рд╣реИ?
@slorber рдореИрдВ рдкреАрдЖрд░ рдкрд░ рдПрдХ рдирдЬрд╝рд░
рдореБрдЭреЗ рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред get-urls
рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИред dev
рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ uglify рд╕реЗ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА
...
{ Error: commons.js from UglifyJs
...
рдХреГрдкрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрдкрд╛рдп рд╣реИ?
рдЕрд░реБрдгреЛрджрд╛ рдпрд╣рд╛рдВ рдХрднреА рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреАред рд╡рд╣ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ #749 . рдореЗрдВ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ
рдореБрдЭреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ @philcockfield рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдирд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ рдЬреЛ Next.js рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реЗрд╢рди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмреАрдЪ рдШрдЯрдХреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
рдпрд╣ рди рдХреЗрд╡рд▓ рдкреЗрдбрд╝ рдХреЛ рд╣рд┐рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред styled-jsx
рдЬреИрд╕реЗ рдмреЗрдмреЗрд▓ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд▓рд┐рдП рднреАред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдореЙрдбреНрдпреВрд▓ (рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рддрд░рд╣) рд╣реИ рдЬреЛ рдПрдХ рдмреЗрдмрд▓ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рддреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди ES6 рд╕реНрд░реЛрдд рдХреЛрдб рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЕрдкрдиреЗ рдРрдк рдХреЛ рдЗрд╕реЗ рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╣реИред рдмреЗрд╢рдХ рдЕрдЧрд▓рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ styled-jsx
рд╣реИред
рдпрд╣рд╛рдБ рдореИрдВрдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛
// next.config.js
exports.webpack = config => (config.module.rules = config.module.rules.map(({exclude, ...rest}) => ({
exclude: Object.prototype.toString.call(exclude) === '[object Function]' ? (str => !/mycomponents/.test(str) && exclude(str)) : exclude,
...rest
})), config);
рдореИрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ exclude
рдХреЛ рдПрдХ рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ред
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рдореБрдЭреЗ node_modules/mycomponents
рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ Next.js . рджреНрд╡рд╛рд░рд╛ рднреА рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдпрд╣ рддрдм рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдореИрдВ рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рд╕рднреА рдмрд╣рд┐рд╖реНрдХрд░рдгреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реВрдВ
exports.webpack = config => (config.module.rules = config.module.rules.map(({exclude, ...rest}) => ({
exclude: [],
...rest
})), config);
рдХреГрдкрдпрд╛ рдореЗрд░реА рдорджрдж рдХрд░реЗрдВ :)
рдзрдиреНрдпрд╡рд╛рдж
рдЕрд░реЗ рджреЛрд╕реНрддреЛрдВ ( @thealjey ) рдореИрдВ рдорд╣реАрдиреЛрдВ рд╕реЗ jsnext:main
рд╕рдВрдЪрд╛рд▓рд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
jsnext:main
package.json рдореЗрдВ рд╣реИ рддреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрдВрдЯреНрд░реАрдкреЙрдЗрдВрдЯ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рдЬреЛ main
рдореЗрдВ рд╣реИ рдЙрд╕реЗ рдЖрдпрд╛рдд рдХрд░реЗрдВрдореИрдВ next.js
рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИред
@damianobarati рдирд╣реАрдВ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рдирд╣реАрдВ рд╣реИ
рдЬреЛ рдХреБрдЫ рднреА рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдЙрд╕реЗ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рд╡реЗрдмрдкреИрдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдХрд╛рдо рдХреЛ Next.js рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
рд╣реЗ рд╕рдм, рдХрд┐рд╕реА рдХреЛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ?
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдерд╛рдиреАрдп ES6 рд▓рд┐рдВрдХреНрдб рдиреЛрдб рдореЙрдбреНрдпреВрд▓ рд╣реИ рдЬрд┐рд╕реЗ рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡реЗрдмрдкреИрдХ рд╡реВрдбреВ рд╕рд╣реА рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ!
рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдирд┐рд░реНрдорд╛рдг рдкрд░ рдмреЗрдмреЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдм рдХреБрдЫ рдЪрд▓рд╛рддреЗ рд╣реИрдВ:
next build && babel .next/*.js --out-dir . --presets=es2015,react
рдХреНрдпрд╛ рдпрд╣ рдорд░ рдЧрдпрд╛? рдореИрдВ рдПрдХ рдХрд╕реНрдЯрдо рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдвреВрдВрдв рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред
@mattfelten рдпрд╣ v5 . рдХреЗ рд░реЛрдбрдореИрдк рдкрд░ рд╣реИ
рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдордХрд╛рдЬ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ?
@timneutkens рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдордпрд░реЗрдЦрд╛ рд╣реИ? рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдЕрдХреНрд╕рд░ рдПрдХ рдЕрд╕рдВрднрд╡ рдкреНрд░рд╢реНрди рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рдХрд╛рдо рдкрд░ рдЕрдкрдиреЗ рдвреЗрд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдЕрд╡рд░реЛрдзрдХ рд╣реИ! :)
рд╕рдорд╛рдзрд╛рди рд╕реБрдЭрд╛рд╡ рднреА рдорд╛рдиреНрдп рд╣реИрдВред
@thealjey рдХреЛ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреБрд░рд╛рдиреА рдЯрд┐рдкреНрдкрдгреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рд╢рд╛рдпрдж рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ include
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ рдЬрд┐рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЕрджреНрдпрддрди: рдЗрд╕ рд░рдгрдиреАрддрд┐ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЧрд▓реЗ.рдЬреЗрдПрд╕ рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рднреАрддрд░ рд╡рд┐рднрд┐рдиреНрди рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓реЛрдбрд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд╕рдордЭрджрд╛рд░ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
@chrisui рдореЗрд░рд╛ (рдЕрд╕реНрдерд╛рдпреА) рд╕рдорд╛рдзрд╛рди -рдкреНрд▓рдЧрдЗрди-рдореЙрдбреНрдпреВрд▓-рд░рд┐рдЬрд╝реЙрд▓реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛, рдЗрд╕ рддрд░рд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ - "plugins": [["module-resolver", {"root": ["./"]}]]
рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдПрдХ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди, рдЪреВрдВрдХрд┐ рдмрд╛рдХреА рд╕рдм рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдЕрднреА рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдХрд┐ рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ рдЖрдпрд╛рдд рдХреЗ рд╕рд╛рде ../
рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
@thealjey рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗ рд╕рдХрддреЗ рд╣реИрдВ?
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрдЕрдк рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдЗрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд▓рд╛рдн рдХреЗ рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ ...
https://github.com/jamesgorrie/nappy
рдореИрдВ рдЦреБрд╢реА-рдЦреБрд╢реА рдПрдХ рдкреАрдЖрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рд╣рдорд╛рд░рд╛ рдЬреАрд╡рди рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕рд╡рд╛рд▓ рд╣реИрдВ рдЬреИрд╕реЗ: рдХреНрдпрд╛ next.js
рдХреБрдЫ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдпрд╣ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рддрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди next.js
рдореЙрдбреНрдпреВрд▓ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХрд╛ рдЕрдзрд┐рдХ рд╕рдЦреНрддреА рд╕реЗ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред next.js
рд▓рд┐рдП рдирдП рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕рд╕реЗ рдкреВрдЫрдирд╛ рд╣реИ рдпрд╛ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИред
рдпрд╣ v5 . рдХреЗ рд░реЛрдбрдореИрдк рдкрд░ рд╣реИ
@timneutkens рдиреЗ рдЗрд╕реЗ v5 рдореЗрдВ рдмрдирд╛рдпрд╛?
рдЬрд╛рдирдХрд░ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдЬрд░рд╛ рджреЗрдЦрд┐рдП рдХрд┐ рдЗрд╕рдХрд╛ рд╡рд┐рд▓рдп рдХрд╣рд╛рдВ рд╣реБрдЖ рд╣реИред рдЗрд╕реЗ 8 рджрд┐рди рдкрд╣рд▓реЗ рдорд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред 5.0.0 2 рджрд┐рди рдкрд╣рд▓реЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреИрдирд░реА рд╢рд╛рдЦрд╛ рд╕реЗ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ...
рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЬреИрд╕рд╛ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпрд╛ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
module.exports = {
transpileModules: ['my-npm-module']
}
рдпрд╛ рдпрд╣ рдЕрд▓рдЧ рджрд┐рдЦрддрд╛ рд╣реИ?
рдореИрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВред @timneutkens рдЙрдкрд░реЛрдХреНрдд рд▓рд┐рдВрдХ рдПрдХ рдкреАрдЖрд░ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдЕрднреА рднреА рдЦреБрд▓рд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕реЗ рдЕрднреА рддрдХ v5 рдореЗрдВ рдорд░реНрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдкреАрдЖрд░ рд╣реИред
рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЛ рдмрд┐рдирд╛ рдорд░реНрдЬ рдХрд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред transpileModules
рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╣рдо рдмрд╛рдж рдореЗрдВ рдирд┐рдкрдЯреЗрдВрдЧреЗред
рдЕрдВрдЧреВрдареЗ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ: рдЬрдм рдХреЛрдИ рдореБрджреНрджрд╛ рдЦреБрд▓рд╛ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЙрд╕реЗ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
@brianyingling рдореИрдВрдиреЗ рдПрдХ рдЕрдВрддрд░рд┐рдо рд╕рдорд╛рдзрд╛рди (рдХреЗрд╡рд▓ v5) рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред
рдпрд╣ рдЗрд╕ рд╕рдордп рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЕрдзрд┐рдХ рдордЬрдмреВрдд, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред
https://www.npmjs.com/package/@weco/next -plugin-transpile-modules
рдореБрдЭреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рджреЛрдиреЛрдВ рдкрдХреНрд╖реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВ, рдпрд╛ рддреЛ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрдкрдиреЗ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдлреИрдХреНрдЯрд░ рдХрд░рдХреЗ рдФрд░ yarn link
рдЖрдИрдПрдирдЬреА, рдпрд╛ рд╡реЗрдмрдкреИрдХ рдирд┐рдпрдореЛрдВ рдХреЛ рд╣реИрдХ рдХрд░рдХреЗред
рдпрд╣рд╛рдБ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░реЗрдкреНрд░реЛ рд╣реИ: https://github.com/statico/nextjs-with-async-lib
// pages/index.js
import { foo } from '../lib/test'
export default () => <div>hello {String(typeof foo)}</div>
// lib/test.js
async function foo () {}
module.exports = { foo }
@timneutkens рдореБрдЭреЗ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рд╕рд╛рдЭрд╛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ async/await
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди async/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЛ рд╣рдЯрд╛рдирд╛ рдФрд░ рд╕рдм рдХреБрдЫ .then()
-рд╕реНрдЯрд╛рдЗрд▓ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдПрдХ рдлрд┐рдХреНрд╕ рдорд┐рд▓рд╛ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ config.resolve.symlinks = false
рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдЕрдкрдиреЗ next.config.js
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рддрд┐ https://github.com/zeit/next.js/issues/3018#issuecomment -380879576 рдореЗрдВ рдЬреЛрдбрд╝рд╛
// next.config.js
webpack: (config, { dev }) => {
config.resolve.symlinks = false
return config
}
рдлрд┐рд░ рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕рд╛рдЭрд╛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА - рдПрдХ .js
рдлрд╝рд╛рдЗрд▓ рдЬреЛ рдХреЙрдордирдЬреЗрдПрд╕ рдирд┐рд░реНрдпрд╛рдд рдФрд░ async
/ await
рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ - рдХреЛ shared
рдирд╛рдордХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЙрдкрджрд┐рд░ рдореЗрдВ рд░рдЦрд╛:
// shared/index.js
async function foo () {}
module.exports = { foo }
// shared/package.json
{
"name": "@myapp/shared",
"version": "1.0.0",
"main": "index.js",
"license": "UNLICENSED",
"private": true,
"dependencies": { ... }
}
рдФрд░ рдЕрдВрдд рдореЗрдВ рдореИрдВрдиреЗ рдПрдХ postinstall
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЬрдм рдХреЛрдИ рднреА рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ yarn install
рдХрд░рддрд╛ рд╣реИ:
// package.json
{
...
"scripts": {
"postinstall": "cd shared ; yarn -s unlink ; yarn link && yarn && cd .. && yarn link @myapp/shared",
...
рдЕрдм рдореЗрд░рд╛ рдореЛрдЪрд╛ рдкрд░реАрдХреНрд╖рдг рд╕рд░реНрд╡рд░ рдХреА рддрд░рдл рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдореЗрд░рд╛ рдХрд╕реНрдЯрдо рдХреЛрдЖ рд╕рд░реНрд╡рд░ рдареАрдХ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдореЗрд░реЗ рдиреЗрдХреНрд╕реНрдЯрдЬреЗрдПрд╕ рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдХреЛрдИ рдФрд░ рдЕрдзрд┐рдХ рдкрд╛рдЧрд▓ Cannot assign to read only property 'exports' of object '#<Object>'
рд╣реИред
рдиреЗрдХреНрд╕реНрдЯрдЬреЗрдПрд╕ 5.1.0 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдереАред рдЕрдЧрд▓реЗ рдореЗрдВ рдПрдХ рдпрд╛ рджреЛ рдиреЛрдб рдореЙрдбреНрдпреВрд▓ IE11 рдореЗрдВ рд╡рд╕рд╛ рддреАрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рдереЗ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдлреЗрдВрдХ рд░рд╣реЗ рдереЗред рдореИрдВ рдкрд╣рд▓реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рд╕реЗрдЯ рдХрд░ рдЪреБрдХрд╛ рдерд╛ рдФрд░ рдЕрдВрдд рдореЗрдВ рдореИрдВрдиреЗ рдЕрдкрдиреЗ next.config.js
рдЙрди рдореЙрдбреНрдпреВрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ babel-polyfill
рд╕рд╛рде рд▓рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛:
module.exports = {
webpack: (config, { dev }) => {
const polyfill = new Promise((resolve, reject) => {
const originalEntry = config.entry
originalEntry().then(entries => {
if (entries['main.js']) {
entries['main.js'].unshift('./client/polyfills.js')
entries['main.js'].unshift('babel-polyfill')
}
config.entry = entries
resolve()
})
})
config.module.rules.push(
{
test: path.resolve('./node_modules/next/node_modules/'),
loader: 'babel-loader',
options: {
babelrc: false,
cacheDirectory: false,
presets: ['es2015']
}
}
)
return polyfill.then(() => { return config })
}
}
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдИрдПрд╕рдПрдо рдПрдХ рдЖрдХрд░реНрд╖рдг рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
index.js
рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рдиреЗрдХреНрд╕реНрдЯ.js рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде, рдореИрдВ рд╕рд░реНрд╡рд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ esm рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, Lerna-symlinked рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреИрдХреЗрдЬ рдореЗрдВ ES рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
node -r esm index.js
@ рдХрд░рди рдХреВрд▓, рдХреНрдпрд╛ рдпрд╣
@curran рдореИрдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ
@рдмреНрд▓реИрдХрдмрд┐рдВрдЧ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред
@thealjey рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ?
рдЕрдЧрд░ рдХреЛрдИ рддреНрд╡рд░рд┐рдд рдФрд░ рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рдвреВрдВрдв рд░рд╣рд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рдпрд╣ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдПрдХ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдИ, shared/
, рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЗ рд╕рд╛рде рд╣рдо рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдиреЛрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрдХреНрд╕реНрдЯрдЬреЗрдПрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреИрдХрдПрдВрдб рдкрд░ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ package.json
рдФрд░ рдЗрд╕рдХрд╛ рдирд╛рдо @myproject/shared
рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдлрд┐рд░, рдореБрдЦреНрдп (рдкреИрд░реЗрдВрдЯ) рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, рдореИрдВрдиреЗ package.json
рдПрдХ рдкреЛрд╕реНрдЯрдЗрдВрд╕реНрдЯреЙрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рдЬреЛрдбрд╝рд╛: cd shared && yarn -s unlink >/dev/null 2>&1 ; yarn -s link && yarn -s && yarn link @myproject/shared
- рдлрд┐рд░ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ yarn
рдЪрд▓рд╛рдПрдВ, рдФрд░ рдЕрдкрдиреЗ рдЖрдпрд╛рдд рдХреЛ import { whatever } from '@myproject/shared/somefile'
рдмрджрд▓реЗрдВ
рдЗрд╕ рддрд░рд╣ рд╕рд╛рдЭрд╛ рдХреЛрдб рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкрд╛рдЧрд▓ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реЗрд╢рди рдЪрд░рдгреЛрдВ рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЖрдкрдХреЛ yarn
/ npm
рд╣рд░ рдмрд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ yarn link
рдПрдХ рдмрдирд╛рддрд╛ рд╣реИ рд╕рд┐рдорд▓рд┐рдВрдХ
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, @weco/next-plugin-transpile-modules
рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВрдиреЗ рдиреЗрдХреНрд╕реНрдЯ рдХреЗ withTypescript
рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдВрдЯрд╛ рдмрдирд╛рдпрд╛: https://github.com/KeitIG/next-plugin-transpile-modules
рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдХреЛрдб рд╣реЛрдиреЗ рдкрд░ рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЗрд╕ рдкрд░ рдХреЛрдИ рднреА рд╕рдорд╛рдЪрд╛рд░?
@bogdansoare рдореИрдВ https://github.com/KeitIG/next-plugin-transpile-modules рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
рдФрд░ рдлрд┐рд░ рднреА рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдФрд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рд░ рдореЗрдВред рдпрд╣ рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдФрд░ @scope
рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рднреА рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред https://gist.github.com/trusktr/44400d0d016c506629b4f914799dc9cd
рдореИрдВрдиреЗ рдмрд╕ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рдордХрд╛рдЬреА рдЙрджрд╛рд╣рд░рдг рд░рдЦрд╛ рд╣реИ рдЬреЛ esm
рдФрд░ lerna
https://github.com/curran/nextjs-esm-example
/рд╕реАрд╕реА @jdalton
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд next.config.js
рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ:
module.exports = {
webpack: (config, options) => {
config.module.rules.push({
test: /\.js$/,
include: /node_modules/,
use: [
options.defaultLoaders.babel
]
})
return config
}
}
рдпрд╣ node_modules
рдореЗрдВ рд╕рдм рдХреБрдЫ рдмреЗрдмреЗрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдИрдИ 11 рд╕рдВрдЧрддрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХ рдерд╛ ...
рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреА рднреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЧреИрд░-рдкрд╛рд░рджрд░реНрд╢реА рдПрдирдкреАрдПрдо рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рд╡рд┐рдХреНрд░реЗрддрд╛ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рдкрдбрд╝рд╛ :(
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреБрд╕реНрд╕реЗ рд╡рд╛рд▓рд╛
@ Bel0v рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА next-plugin-transpile-modules
рд╕рд╛рде рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред cc/ @timneutkens
рдореИрдВ рдЕрднреА рднреА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬреЗрдореА рдиреЗ рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╡рд┐рд╕реНрддреГрдд рд╕реВрддреНрд░ рд▓рд┐рдЦрд╛: https://twitter.com/jamiebuilds/status/1080840492525350912
рдореИрдВрдиреЗ рдЬреЗрдореА рдХреЗ рд╕реВрддреНрд░ рдХреЛ рдкрдврд╝рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдФрд░ рд╕рдорд╛рдзрд╛рди рдкрд░ рд╣реЗрдирд░реА рдЭреВ рдФрд░ рдмреЗрдмреЗрд▓ рдХреА рд░рд╛рдп рднреА рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
https://babeljs.io/blog/2018/06/26/on- Consumer-and-publishing-es2015+-packages
(рдЯрд┐рдо рдХреЗ рд╕рд╛рде рдЕрд╕рд╣рдордд рдирд╣реАрдВ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдХрдИ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ред рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдореЗрдВ рдЯрд┐рдо рдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ)
рд╣рд╛рдБ, рд╣рдо рдкрд┐рдЫрд▓реЗ рдЖрдзреЗ рд╕рд╛рд▓ рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рд▓реЛрдЧреЛрдВ рд╕реЗ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╣реЗрдирд░реА . рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдПрдХ рдореЛрдиреЛрд░реЗрдкреЛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдпреЗ рдЪрд┐рдВрддрд╛рдПрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ
@dcalhoun рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореБрдЭреЗ рдЕрднреА рднреА рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЯреЛрдХрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдкрд░ рдПрдХ рдЦреБрд▓рд╛ рдЕрдЧрд▓рд╛ 7 рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
@bel0v
рдЖрдкрдХреЛ рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди рдкрдврд╝рдиреЗ рдЪрд╛рд╣рд┐рдП;) рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ: https://github.com/martpie/next-plugin-transpile-modules#i -have-trouble-making-it-work-with-nextjs-7
рдореИрдВ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛ 7 рдЕрдВрдХ рдЕрдЬреАрдм рд╣реИ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдиреЗрдХреНрд╕реНрдЯ рдпрд╛ рдмреИрдмреЗрд▓ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ, рдореИрдВрдиреЗ рд╡реИрд╕реЗ рднреА рдпрд╣рд╛рдВ рдПрдХ рдореБрджреНрджрд╛ рдЦреЛрд▓рд╛: https://github.com/zeit/next.js/issues/5393
@martpie рд╣рд╛рдБ, рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ .. рд╡реИрд╕реЗ рднреА рдореИрдВ рдЗрд╕реЗ рдПрдХ рдФрд░ рдХреЛрд╢рд┐рд╢ рджреВрдВрдЧрд╛
@martpie рд╣рдордиреЗ рдПрдХ рд╕реБрд╕рдВрдЧрдд babel.config.js, рдФрд░ рдпрд╛рд░реНрди рд╡рд░реНрдХрд╕реНрдкреЗрд╕ рдХреЗ рд╕рд╛рде next7 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рд╕реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рдлреЛрд░реНрдХ рдХрд┐рдпрд╛ рд╣реИ
https://github.com/bel0v/learnnextjs-demo
рдЗрд╕рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдирд┐рд░реНрднрд░рддрд╛ (рд╡рд╛рдпрд░реНрдб-рдПрд▓рд┐рдореЗрдВрдЯреНрд╕) рд╕реНрдерд╛рдкрд┐рдд рдХреА, рдПрдХ рдмрд┐рд▓реНрдб рддреНрд░реБрдЯрд┐ Unhandled Rejection (SyntaxError): Unexpected token {
рдорд┐рд▓реА рдФрд░ рдЗрд╕реЗ рд╕реБрдЭрд╛рдП рдЧрдП рддрд░реАрдХреЗ рд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред
рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рд╢рд╛рдпрдж рдореБрдЭреЗ рдЗрд╕рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдмреЗрдмреЗрд▓ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ..
@ bel0v рдПрдлрдПрдХреНрдпреВ рдореЗрдВ рдлрд┐рд░ рд╕реЗ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реИ рдХрд┐ рд▓рд░реНрди рд╕реЗрдЯрдЕрдк рдХреНрдпреЛрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЯреАрдПрд▓, рдбреАрдЖрд░; рдЖрдк рд╢рд╛рдпрдж рдЧрд▓рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ)
@martpie рдЖрд╣, рд╕рдордЭ рдЧрдпрд╛! рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рд▓рд░реНрдирд╛ рдХреЗ рд╕рд╛рде рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреИрдХреЗрдЬ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА рдЧрдИ рдереАред рдзрдиреНрдпрд╡рд╛рдж
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ https://twitter.com/jamiebuilds рдХреЛ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдм рд╡рд╣рд╛рдВ рдзрд╛рдЧрд╛ рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрддрд╛ред #3018 рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЛрдВ рдкрд░ рдХреНрдпрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?
рдХреНрдпрд╛ рдпреЗ рдЗрди рдпреВрдЬ-рдХреЗрд╕ рдПрдЯреАрдПрдо рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ/рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕ рдХреА рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ?
https://github.com/curran/nextjs-esm-example
https://github.com/wellcometrust/next-plugin-transpile-modules
https://github.com/martpie/next-transpile-modules
https://github.com/zeit/next.js/tree/canary/examples/with-yarn-workspaces
рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк, рдореЗрд░реА рддрд░рд╣, рдПрдХ рдРрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕реЗ IE11 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рднреА рдХреЛрдб рдХреЛ node_modules/
рдХреЗ рдЕрдВрджрд░ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред Next.js 7.x рдореЗрдВ рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯрдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЬрд┐рд╕рдиреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕рдиреЗ рдиреЗрдХреНрд╕реНрдЯ.js 8.x рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣реЗ рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдерд╛ред рдореИрдВ рддреЛ Next.js 8.x рдХреЗ рд▓рд┐рдП config рдиреАрдЪреЗ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рдореЗрдВ рдХреЛрдб transpiles рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ node_modules/
рдХреЗ рд╕рд╛рде @babel/preset-env
, рдФрд░ рдХреЛрдИ рдЕрдиреНрдп рдкреНрд▓рдЧ-рдЗрдиред
рдпрд╣ рдореЗрд░реА browserlist
рд╕рдВрдкрддреНрддрд┐ рдХреЛ package.json
рд╕реЗрдЯ рдХрд░рдХреЗ рд╕рдВрдпреБрдХреНрдд рд╣реИ:
"browserslist": "defaults, IE >= 11, EDGE >= 14, Safari >= 11, Chrome >= 41, Firefox >= 52",
next.config.js
module.exports = {
webpack: (config, options) => {
config.module.rules.push({
test: /\.js$/,
include: /node_modules/,
use: [
options.defaultLoaders.babel,
],
})
return config
},
}
next.config.js
module.exports = {
webpack: (config, options) => {
config.module.rules.push({
test: /\.js$/,
include: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
plugins: ['@babel/plugin-syntax-dynamic-import'],
},
},
})
return config
},
}
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рдЕрднреА рддрдХ рдЗрд╕ рд╕реЗрдЯрдЕрдк рдХреЗ рд╕рд╛рде @babel/plugin-transform-runtime
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╢рд╛рдпрдж рдХреЛрдб рдореЗрдВ рдХреБрдЫ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЛ рдереВрдХ рджреЗрдЧрд╛ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ gzip рдЗрд╕рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦреЗрдЧрд╛
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдпрд╣ рднрдпрд╛рдирдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ Next.js рд╣рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ transpile рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рджреЗ рд╕рдХрддрд╛ рд╣реИ node_modules/
рдЬреЛ рдХреБрдЫ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП browserlist
рдЖрдкрдХреЗ рдкрд╛рд╕ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕реА рдХреЛрдИ рднреА рдмрдбрд╝реА рд╕рд╛рдЗрдЯ, рдЬрд┐рдирдореЗрдВ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ, рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рд╕рдорд░реНрдерди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВред
next-transpile-modules
(@jamesgorrie рдХреЗ рд╢рд╛рдирджрд╛рд░ рдХрд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░) рдХреЗ рдЕрдиреБрд░рдХреНрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рдпрд╣рд╛рдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреА рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИред
рдореИрдВ рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдкреЗрд╢реЗрд╡рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдЕрдм рддрдХ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЦреЗрд▓рд╛ рд╣реИред
Next.js рд╕реЗ рдореВрд▓ рд╕рдорд░реНрдерди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдореБрдЭреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ next
рдкреИрдХреЗрдЬ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЯрд┐рдо рдХреЗ рдкрд╛рд╕ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдереЗ рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд╣ рдЖрдЬрдорд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреАред
рдЪреАрдпрд░реНрд╕!
@martpie рдореИрдВрдиреЗ рдЬрд▓реНрджреА рд╕реЗ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рджреЗрдЦрд╛, рд▓реЗрдХрд┐рди _all_ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддреНрд╡рд░рд┐рдд рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ? я╕П
рд╕рд╛рде рд╣реА, рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдк options.defaultLoaders.babel
рдЪреБрди рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмреЗрдмреЗрд▓ рд▓реЛрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред Next.js 8.x рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛ рдереА рдХрд┐ рдХреБрдЫ рдореЙрдбреНрдпреВрд▓ рдЙрд╕рдХреЗ рдмрд╛рдж CJS рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдареАрдХ рд╕реЗ рдкрд╣рдЪрд╛рдиреЗ рдЬрд╛рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рдЕрдиреНрдп libs рдЙрдиреНрд╣реЗрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг:
./pages/_glamor.js
Attempted import error: 'css' is not exported from 'glamor'.
./components/project-selector.js
Attempted import error: 'react-select/lib/Async' does not contain a default export (imported as 'AsyncSelect').
./node_modules/react-select/dist/react-select.esm.js
Attempted import error: 'react-input-autosize' does not contain a default export (imported as 'AutosizeInput').
./pages/signup/full.js
Attempted import error: 'react-select/lib/Creatable' does not contain a default export (imported as 'CreatableSelect').
./components/markdown-editor.js
Attempted import error: 'react-simplemde-editor' does not contain a default export (imported as 'SimpleMDEEditor').
./components/pagination.js
Attempted import error: 'react-js-pagination' does not contain a default export (imported as 'UpstreamPagination').
./node_modules/react-google-recaptcha/lib/es/recaptcha-wrapper.js
Attempted import error: 'react-async-script' does not contain a default export (imported as 'makeAsyncScriptLoader').
./pages/_glamor.js
Attempted import error: 'rehydrate' is not exported from 'glamor'.
рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ node_modules/
рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдмреЗрдмреЗрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛, рдЬреЛ рдХреЗрд╡рд▓ preset-env
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ Next.js- рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдЖрдк рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ?
рдЪреАрдпрд░реНрд╕
@LinusU рд╢рд╛рдпрдж transpileModules: ['(.*?)']
рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреА рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдХрд╛рдо рди рдХрд░ рд░рд╣рд╛ рд╣реЛ, рдЗрд╕рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред
рдЕрдзрд┐рдХ рдЖрдо рддреМрд░ рдкрд░, рдореИрдВ рдкреВрд░реЗ node_modules
рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ ("рдЕрддреНрдпрдзрд┐рдХ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд" рдкрдврд╝реЗрдВ), рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд╕рдордп рд▓рдЧреЗрдЧрд╛ рдФрд░ рдкреИрдХреЗрдЬреЛрдВ рдХреЛ ES3-рд╕рдВрдЧрдд рдХреЛрдб (рдЗрд╕рд▓рд┐рдП IE11 рд╕рдВрдЧрдд) рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреЗрд╡рд▓ рдЙрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░реЗрдВ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ! (рдЬреИрд╕реЗ lodash-es
, рд╕реНрдерд╛рдиреАрдп рдореЙрдбреНрдпреВрд▓ рдЖрджрд┐...)
рд╕рдВрдХреБрд▓ рдХреЛ ES3-рд╕рдВрдЧрдд рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЗрд╕рд▓рд┐рдП IE11 рд╕рдВрдЧрдд)ред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ, рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рд╕реЗ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВред рдореЙрдбреНрдпреВрд▓ рд▓реЗрдЦрдХ рдХрднреА рдирд╣реАрдВ рдЬрд╛рди рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдореИрдВ рдХрд┐рди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдпрджрд┐ рд╡реЗ рдкреБрд░рд╛рдиреЗ рдХреЛрдб рднреЗрдЬрддреЗ рд╣реИрдВ рддреЛ рд╡реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рджрдВрдбрд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд▓рдЧ рдЬрд╛рдПрдЧрд╛
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕рдХреЗ рдмрд╛рдж, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреГрд╖реНрда рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рддрддреНрдХрд╛рд▓ рдкреБрдирдГ рд▓реЛрдб рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред
рдХреЗрд╡рд▓ рдЙрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░реЗрдВ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!
рдЗрд╕рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдХреМрди рд╕реЗ рдкреИрдХреЗрдЬ IE11 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИрдВ рдФрд░ рдХреМрди рд╕реЗ рдирд╣реАрдВ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХрд┐рд╕реА рднреА рдирд┐рд░реНрднрд░рддрд╛ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдХреНрд╖рдгрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛) рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдордп рдЕрджреНрдпрддрд┐рдд рд░рдЦрддреЗ рд╣реИрдВред рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рд╣реИ
рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ ESM рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдЬреЛ package.json module
рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╡реЗ рдЖрдорддреМрд░ рдкрд░ ES5 рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ ES6 рдЖрдпрд╛рдд/рдкреЗрдбрд╝ рд╣рд┐рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдпрд╛рдд рд╣реЛрддрд╛ рд╣реИред рддреЛ рдпрд╣ рдПрдХ рдмрдВрдбрд▓рд░ (рд╡реЗрдмрдкреИрдХ) рдХрд╛ рдХрд╛рдо рд╣реИ, рди рдХрд┐ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ (рдмреЗрдмреЗрд▓) рдХреЗ рд▓рд┐рдП, рдЬрдм рддрдХ рдХрд┐ рдЕрдиреНрдпрдерд╛ рди рдХрд╣рд╛ рдЧрдпрд╛ рд╣реЛред рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА ESM рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП redux/es
Redux рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ OP рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ
next.config.js
:module.exports = { webpack: (config
, рддреЛconfig.module.rules
рдореЗрдВ рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдирд┐рдпрдо рдХреЛ рдмрджрд▓рдиреЗ рдпрд╛ рдПрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? :{ loader: 'babel-loader', include: '/Users/me/gh/guide/node_modules/next/dist/pages', options: { babelrc: false, cacheDirectory: true, sourceMaps: 'both', plugins: [Object] } }, { test: /\.js(\?[^?]*)?$/, loader: 'babel-loader', include: [ '/Users/me/gh/guide', '/Users/me/gh/guide/node_modules/next/dist/pages' ], exclude: [Function: exclude], query: { babelrc: true, cacheDirectory: true, sourceMaps: 'both', presets: [] } } ]
рд╕реБрдЭрд╛рдП рдЧрдП рд╕рд░рд▓ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
{
test: /\.js(\?[^?]*)?$/,
loader: 'babel-loader',
include: [
path.resolve(__dirname, './node_modules/next/dist/pages'),
],
query: {
cacheDirectory: true,
sourceMaps: 'both',
presets: ['@babel/preset-env'],
plugins: ['@babel/plugin-proposal-object-rest-spread']
}
},
рдореИрдВ рдПрдХ рд▓рд░реНрди рдореЛрдиреЛ рд░реЗрдкреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ рдФрд░ рдЕрдкрдиреЗ рд╕рд┐рд░ рдХреЛ рдЦрд░реЛрдВрдЪ рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдХреНрдпрд╛ рдерд╛ред рдЪреВрдВрдХрд┐ рддреНрд░реБрдЯрд┐ рд╡реЗрдмрдкреИрдХ рд╕реЗ рдЖ рд░рд╣реА рд╣реИ, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕рдореЗрдВ рдПрдХ рд▓реЛрдбрд░ рдЧреБрдо рд╣реИ, рдЬреЛ рд╕рд╣рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред рд╢реБрдХреНрд░ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдЬреАрдердм рдореБрджреНрджрд╛ рдорд┐рд▓рд╛!
рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣рд╛рдВ рдЫреЛрдбрд╝рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд▓рд░реНрди рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
рд╕рд╛рдЭрд╛ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрд╡-рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ рдЬреЛ рд╕реНрд░реЛрдд рдХреЛ рдПрдХ рдбрд┐рд╕реНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓рд┐рдВрдХ рдХрд░рддреЗ рд╕рдордп рд▓рд░реНрдирд╛ рдХреЛ рдбрд┐рд╕реНрдЯрд░реНрдм рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ:
// package.json
"main": "dist",
"scripts": {
// I'm using the react-app preset because it's easy
"prepublish": "babel --presets react-app --plugins @babel/plugin-transform-modules-commonjs src --out-dir dist"
},
// This instructs Lerna to use dist when symlinking
"publishConfig": {
"directory": "dist"
}
рдЕрдм рдЬрдм рдЖрдк lerna bootstrap
рдпрд╣ рдкреВрд░реНрд╡рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдЧрд╛ рдФрд░ рд╕реНрд░реЛрдд рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░реЗрдЧрд╛ рддрд╛рдХрд┐ рдЕрдЧрд▓рд╛ рдЗрд╕рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░ рд╕рдХреЗред
рдпрджрд┐ рдЖрдк lerna
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдк рдиреЗрдХреНрд╕реНрдЯ-рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓-рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдореНрд▓рд┐рдВрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрд╕ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ lerna
рдХреЗ рд╕рд╛рде рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рдиреАрдЪреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
NextJs рдРрдкреНрд╕ рдореЗрдВ рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рдореЛрдиреЛ рд░реЗрдкреЛ рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ рдиреЗрдХреНрд╕реНрдЯрдЬреЗ рдРрдкреНрд╕ рдХреЗ рдмреАрдЪ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдФрд░ рдмрд░реНрддрдиреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп
// next.config.js
const aliasPathsToResolve = [
{ name: 'components', path: path.resolve(__dirname, './components') },
{ name: 'Common', path: path.resolve(__dirname, '../../common/react/') },
]
module.exports = () => {
return {
webpack(config, { defaultLoaders }) {
config.module.rules.push({
test: /\.(js|jsx)$/,
include: [path.resolve(__dirname, '../../common/react/')],
use: [defaultLoaders.babel],
})
/** Resolve aliases */
aliasPathsToResolve.forEach((module) => {
config.resolve.alias[module.name] = module.path
})
}
}
}
рдореИрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рд╕рдордп рдиреЗрдХреНрд╕реНрдЯрдЬреЗ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
@ Lwdthe1 рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдХреЛрдб рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА:
TypeError: Cannot read property 'then' of undefined
at getBaseWebpackConfig (/c2/wiz-frontend/packages/pipeline-view/node_modules/next/dist/build/webpack-config.js:85:25)
at async Promise.all (index 0)
at async HotReloader.start (/c2/wiz-frontend/packages/pipeline-view/node_modules/next/dist/server/hot-reloader.js:14:1675)
at async DevServer.prepare (/c2/wiz-frontend/packages/pipeline-view/node_modules/next/dist/server/next-dev-server.js:7:223)
at async /c2/wiz-frontend/packages/pipeline-view/node_modules/next/dist/cli/next-dev.js:22:359
рдХреБрдЫ рдЯреНрд╡рд┐рдХрд┐рдВрдЧ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реБрдЖ:
const path = require("path");
const libPath = "../components/src"
const aliasPathsToResolve = [
{ name: "Common", path: path.resolve(__dirname, libPath) }
];
module.exports = {
webpack: (config, { defaultLoaders }) => {
config.module.rules.push({
test: /\.(js|jsx)$/,
include: [path.resolve(__dirname, libPath)],
use: [defaultLoaders.babel]
});
/** Resolve aliases */
aliasPathsToResolve.forEach(module => {
config.resolve.alias[module.name] = module.path;
});
return config
}
};
рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рддреНрд░реБрдЯрд┐ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛:
export { default as NavBar } from "./NavBar/NavBar"
^^^^^^
SyntaxError: Unexpected token 'export'
at wrapSafe (internal/modules/cjs/loader.js:1055:16)
at Module._compile (internal/modules/cjs/loader.js:1103:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1159:10)
....
рдЬрд┐рд╕рдХрд╛ рд╕рд╛рдордирд╛ рдкрд╣рд▓реЗ #2850 рдФрд░ #883 рдореЗрдВ рд╣реЛ рдЪреБрдХрд╛ рд╣реИред
рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ: https://github.com/martpie/next-transpile-modules#but -i-really-need-to-make-it-work-with-lerna
рдореИрдВрдиреЗ рдЬреЛ рд╕реБрдирд╛ рд╣реИ, рдЙрд╕рдореЗрдВ рд╕реЗ RFC рдЬрд▓реНрдж рд╣реА рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ Next.js рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЗрд╕реЗ рдЕрднреА рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ https://github.com/ рд╕реЗ рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди npm рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рд╣реИред
"next": "npm:@sheerun/[email protected]",
рдФрд░ next.config.js рдХреЗ рдмрд╛рдж:
babelIncludeRegexes: [/turf/],
(рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЭреЗ рдмреИрдмреЗрд▓ рдХреЗ рд╕рд╛рде рдкреВрд░реНрд╡-рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЯрд░реНрдл рдлрд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА)
рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рд╣реБрдИ рд╣реИ?
рдореИрдВ next.js 9.2.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди babelIncludeRegexes
рд╡рд┐рдХрд▓реНрдк рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ
рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рд╣реБрдИ рд╣реИ?
next-transpile-modules
рд▓рдХреНрд╖реНрдп рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рд╕реЗ рд╣рд▓ рдХрд░рдирд╛ рд╣реИ, рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕реЗ рдЖрдЬрдорд╛рдпрд╛?
рд╣рд╛рдп @martpie ,
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди .babelrc рдлрд╝рд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реВрдВ
рдзрдиреНрдпрд╡рд╛рдж
@martpie рдореИрдВ next-transpile-modules
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдЬрдм рдореИрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдиреАрдЪреЗ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред рдореИрдВ рд╕рд╛рдЭрд╛ рдХреЛрдбрдмреЗрд╕ рдХреЗ рд╕рд╛рде рдореЛрдиреЛрд░реЗрдкреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред '@myapp/shared/components/componentname.js' рдЬреИрд╕реЗ рд╕рд╛рдЭрд╛ рд╕реЗ рдШрдЯрдХреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ nextjs 9.x рдФрд░ рдХрд╕реНрдЯрдо next.config.js
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рддреНрд░реБрдЯрд┐
`
рдореЙрдбреНрдпреВрд▓ рдкрд╛рд░реНрд╕ рд╡рд┐рдлрд▓: рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдЯреЛрдХрди (12:4)
рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдЙрдкрдпреБрдХреНрдд рд▓реЛрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд▓реЛрдбрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рджреЗрдЦреЗрдВ https://webpack.js.org/concepts#loaders
| рдХреЙрдиреНрд╕реНрдЯ рд╕реНрдкрд┐рдирд░ = рдкреНрд░реЙрдкреНрд╕ => {
| рдХреЙрдиреНрд╕ рд░реЗрдВрдбрд░рдбрд┐рдлреЙрд▓реНрдЯрд╕реНрдкрд┐рдирд░ = (рд╕реНрдкрд┐рдирд░ рдХреНрд▓рд╛рд╕, {...рдЕрдиреНрдп}) => (
>
рдирд┐рд░реНрдорд╛рдг рддреНрд░реБрдЯрд┐ рд╣реБрдИ
рддреНрд░реБрдЯрд┐: > рд╡реЗрдмрдкреИрдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдлрд▓ рд░рд╣рд╛
`
рдЕрдЧрд▓рд╛.config.js
const withTM = require('next-transpile-modules')(['<strong i="26">@myapp</strong>']);
module.exports = withPlugins([withTM, withBundleAnalyzer], {
...
}
рдХреГрдкрдпрд╛ рдорджрдж рдХрд░реЗрдВ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
@ raghav1086 рдХреНрдпрд╛ рдЖрдк рд░реЗрдкреЛ рдкрд░ рдХреЛрдИ рдореБрджреНрджрд╛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ? ;) рдпрд╣ рдпрд╣рд╛рдВ рдХреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╢реЛрд░ рд╕реЗ рдмрдЪ рдЬрд╛рдПрдЧрд╛ред
+1
рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП src/
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ рдФрд░ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП lib/
рдЬреЛ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдмрд░реНрддрдиреЛрдВ/рд░реИрдкрд░реЛрдВ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдХреБрдЫ рдЕрд▓рдЧ рдЕрдЧрд▓реЗ рдРрдкреНрд╕ (рдореЗрд░рд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ) рдореЗрдВ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдЬрдм рдореИрдВ рджреЗрд╡ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ lib рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред lib рд╕реЗ рдХреЛрдИ рднреА рдШрдЯрдХ/рд▓реЛрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ
рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ src рдФрд░ lib рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @ Lwdthe1 рдХреЗ рд╕рдорд╛рдзрд╛рди (https://github.com/zeit/next.js/issues/706#issuecomment-569041997) рдХреА рднрд┐рдиреНрдирддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рд╣реА рдЪреАрдЬрд╝ aliasPathsToResolve
рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдкрд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп config.resolve.modules
рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред
webpack: (config, options) => {
config.resolve.modules = [
'./src/',
'./lib/',
'node_modules'
];
config.module.rules.push({
test: /\.(js|jsx)$/,
include: [path.resolve(__dirname, './lib/')],
use: [options.defaultLoaders.babel],
});
рдЗрди рджрд┐рдиреЛрдВ рд▓рд░реНрди, рдиреЗрдХреНрд╕реНрдЯрдЬ рдФрд░ рдмреЗрдмреЗрд▓ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рд╕рдорд╛рдзрд╛рди рдХреНрдпрд╛ рд╣реИ?
рдореИрдВ рдЖрдпрд╛рдд рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдкреВрд░реНрд╡-рдкрд╛рд░рджрд░реНрд╢реА рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рд╣рд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рдИрдВрдЯ рдХреА рджреАрд╡рд╛рд░ рдорд╛рд░рд╛ рд╣реИред рдпрд╣рд╛рдБ рд╡рд╣ рд╣реИ рдЬреЛ рдореИрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛:
next-transpile-modules
редnext-babel-loader
include
рдФрд░ exclude
рдирд┐рдпрдореЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ред@mikestopcontinues next-transpile-modules
рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд┐рдпрд╛ред
@calebmpeterson рдФрд░ @martpie (рдореИрдВ рддреБрдореНрд╣реЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдБ! )ред рдореИрдВрдиреЗ рдкреНрд▓рдЧ рдкрд░ рд╡рд╛рдкрд╕ рдЪрдХреНрдХрд░ рд▓рдЧрд╛рдпрд╛, рдФрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ рдХрд┐ рдЙрдк-рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреИрдЯрд░реНрди '@ рдореЛрдиреЛ/рдШрдЯрдХ' '@ рдореЛрдиреЛ/рдШрдЯрдХ/рдбрд┐рд╡' рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдФрд░ рдкреИрдЯрд░реНрди рдХреЗ рд░реВрдк рдореЗрдВ '@ рдореЛрдиреЛ/рдШрдЯрдХ/рдбрд┐рд╡' рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдпрд╛ рддреЛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ... рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рд╛рдЭрд╛ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдореИрдЪ рдкреИрдЯрд░реНрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдЧреЗрдХреНрд╕ рдкреАрдврд╝реА рдХреЛ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдЬрдм рдЖрдЙрдЯрдкреБрдЯ рд░реЗрдЧреЗрдХреНрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдХреБрдЫ рдФрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИред
рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдореИрдВ рд╣рд░ рдЪреАрдЬ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП '@mono' рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдФрд░ рдЕрдкрдиреЗ package.json рдХреЛ рд╕рдЪреНрдЪрд╛рдИ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕реНрд░реЛрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛, рдЬрд┐рд╕ рдкрд░ рдореЗрд░рд╛ рдкреНрд░рддреНрдпреЗрдХ рдРрдк рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдореИрдВ рдЗрдВрдбреЗрдХреНрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рд╕рдм-рдореЙрдбреНрдпреВрд▓ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкреНрд░рддреНрдпреЗрдХ lib рдореЗрдВ рд╕рдмрдХреБрдЫ рдЖрдпрд╛рдд/рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред
рд╡рд╛рдкрд╕ рд╕рд░реНрдХрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рдореБрджреНрджреЗ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ rootMode: 'upward'
рдХреЛ next-babel-loader
рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдерд╛, рддрд╛рдХрд┐ рдмреЗрдмреЗрд▓ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд┐рдВрдЧ рддрд░реНрдХ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХреЗред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдиреНрдп рдиреЗрдХреНрд╕реНрдЯ-рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрдбрд╝ рдЕрд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ рдЕрдЧрд▓рд╛ рд╡реЗрдмрдкреИрдХ рдФрд░ рдмреЗрдмреЗрд▓ рдореЗрдВ рдЙрд▓рдЭрд╛ рд╣реБрдЖ рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, babel-loader
рдХреЛ рдиреЗрдХреНрд╕реНрдЯ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рд╕реЗ рдЕрд▓рдЧ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?
next-transpile-modules
рдореЛрд░реНрдЪреЗ рдкрд░ рдмрд╕ рдПрдХ рдЕрдкрдбреЗрдЯред рдореИрдВрдиреЗ рддреНрд░реБрдЯрд┐ рдХрд╛ рдЧрд▓рдд рдирд┐рджрд╛рди рдХрд┐рдпрд╛ рдерд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рдХрд╕реНрдЯрдо .babelrc
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдЗрд╕ рд╡рд┐рдзрд┐ (рдЗрдВрдбреЗрдХреНрд╕ рдпрд╛ рд╕рдмрдореЙрдбреНрдпреВрд▓) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдИ рдЖрдпрд╛рдд рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХрд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдпрд╣ рдлрд┐рд░ рд╕реЗ рдПрдХ rootMode: 'upward'
рдореБрджреНрджрд╛ рд╣реИред
@mikestopcontinues рдЖрдкрдХреЛ babel.config.js
(рд╡реИрд╢реНрд╡рд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди) рдХрд╛ рдЙрдкрдпреЛрдЧ next-transpile-modules
, рди рдХрд┐ .babelrc
(рд╕реНрдерд╛рдиреАрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди), рдпрд╣ рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди рдореЗрдВ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ;)
@martpie рдЖрдкрдХреЛ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореИрдВ рдХрд┐рддрдирд╛ рд╢рд░реНрдорд┐рдВрджрд╛ рд╣реВрдВред рдореБрдЭреЗ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╣рдлреНрддреЛрдВ рдореЗрдВ рдЙрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рдПрдХ рджрд░реНрдЬрди рдмрд╛рд░ рдкрдврд╝рдирд╛ рдкрдбрд╝рд╛ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрднреА рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реБрдЖред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рдзрдиреНрдпрд╡рд╛рдж!
рдиреЗрдХреНрд╕реНрдЯ-рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓-рдореЙрдбреНрдпреВрд▓ рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛ред рдпрд╣ рдЕрдм рдлреЗрдВрдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдорд╛рдиреНрдп рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрдмрдХрд┐ рдореИрдВрдиреЗ рддреАрди рдЙрджрд╛рд╣рд░рдг рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ
рдХреНрдпрд╛ рдХреЛрдИ рдкреБрди: рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреНрдпрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд╣ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рдЬреЛ рдореБрдЭреЗ babel.config.js . рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реИ
@masbaehr рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рд┐рд░реНрдл next-transpile-modules
рдХреЛ рдЕрдкрдиреЗ next.config рд╕реЗрдЯрдЕрдк рдореЗрдВ рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ
рдПрдХрдорд╛рддреНрд░ рдореБрджреНрджрд╛ next-transpile-modules
рдпрд╛рд░реНрди 2 рдкреАрдПрдирдкреА рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдореИрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ
next.js
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдореЙрдбреНрдпреВрд▓ рдХреА рдПрдХ рд╕рдореГрджреНрдз рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реВрдВ, рдЙрддрдирд╛ рд╣реА рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддреА рд╣реИред рдпрд╣ рдореЗрд░реЗ рдЖрдВрддрд░рд┐рдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдмреЗрдмреЗрд▓ рд╕рдВрдХрд▓рди рдЪрд░рдг рдХреА рдирдХрд▓ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд┐рдЯрд╛ рдмрди рд░рд╣рд╛ рд╣реИредрдореИрдВ