Next.js: _app . рдХреЗ рдмрд╛рд╣рд░ node_modules рд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реНрдХреЛрдкреНрдб рд╕реАрдПрд╕рдПрд╕ рдЖрдпрд╛рдд рдХрд░рдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 21 рдЕрдкреНрд░реИрд▓ 2020  ┬╖  49рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: vercel/next.js

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

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

рдХрд┐рд╕реА рдкреИрдХреЗрдЬ рд╕реЗ рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдХрд┐рд╕реА рдкреГрд╖реНрда рдореЗрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд▓рд╛ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ:

Global CSS cannot be imported from files other than your Custom <App>. Please move all global CSS imports to pages/_app.tsx.
Read more: https://err.sh/next.js/css-global

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

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

  1. import "my-library/index.css"
  2. yarn dev
  3. рдореБрдЭреЗ рдКрдкрд░ рд╕реЗ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ

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

рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдпреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ:

  • next.config.js рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдзреНрд╡рдЬ
  • рдЖрдпрд╛рдд рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдЯрд┐рдкреНрдкрдгреА
  • рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЪреЗрддрд╛рд╡рдиреА рджреЗрдВ
  • рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╕реАрдПрд╕рдПрд╕ рдореЗрдВ рдХреЗрд╡рд▓ рд╕реНрдХреЛрдкреНрдб рдЪрдпрдирдХрд░реНрддрд╛ рд╣реИрдВ

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

рдЗрд╕рдХреЛ рд▓реЗрдХрд░ рдкрд╣рд▓реЗ рднреА рдЪрд░реНрдЪрд╛ рд╣реЛ рдЪреБрдХреА рд╣реИред

рдмреНрд▓реЙрдЧ рд╕реЗ

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

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

#10059

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

#10975

рдЕрд╕рдВрдмрдВрдзрд┐рдд рд▓рдЧрддрд╛ рд╣реИред

#9830

рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИред

рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛

рдореИрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╕реНрдЯрдо рдЖрд░реНрдЯрд╡рд░реНрдХ рдФрд░ рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рдЗрд▓рд╕реНрдЯреНрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд▓рдВрдмреЗ рд▓реЗрдЦ рд▓рд┐рдЦрддрд╛ рд╣реВрдВред рд▓реЗрдЦ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рдЬреА рдПрдирдкреАрдПрдо рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрд╕рд╡реАрдЬреА рдХреЛ рдХрд╛рдлреА рд╣рдж рддрдХ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рдкреИрдХреЗрдЬ CSS рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ index.js рдФрд░ index.css рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рд╕рднреА рд╕реАрдПрд╕рдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ _app рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╕рднреА рд╕реАрдПрд╕рдПрд╕ рд▓реЛрдб рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд▓реЛрдЧ рд╣реЛрдо рдкреЗрдЬ, рд╕рдВрдкрд░реНрдХ рдлрд╝реЙрд░реНрдо рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд▓реЗрдЦ рдкрд░ рд╣реЛрдВ, рднрд▓реЗ рд╣реА рдпрд╣ 100% рдЕрдкреНрд░рдпреБрдХреНрдд рд╣реЛред рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЖрдкрдХреЗ рдкреГрд╖реНрдареЛрдВ рдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рднреА рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓рдЧрднрдЧ рд╣рд░ рдкреГрд╖реНрда _app рдореЗрдВ рдПрдХ рд╕реАрдПрд╕рдПрд╕ рдЖрдпрд╛рдд рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

story 8 feature request

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

рд╣рдо рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ (рдХреИрдирд░реА рдкрд░) рдХреЗ рднреАрддрд░ рдХрд┐рд╕реА рднреА рдШрдЯрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ node_modules рд╕реЗ CSS рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ! рдЬрдм рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдЧрд╛ рддреЛ рд╣рдо рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВрдЧреЗред

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

рдореБрдЭреЗ рдЗрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ, рдмрд╕ рд▓рд┐рдиреЗрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рд╕реНрдХреЛрдк рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕реАрдПрд╕рдПрд╕ рдлрд╛рдЗрд▓реЗрдВ .module.css рдореЗрдВ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рд╡реЗ "рдореЙрдбреНрдпреВрд▓" рд╣реИрдВред рдореБрдЭреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдПред

рдиреЗрдХреНрд╕реНрдЯрдЬ рдкрд░ рдлрд┐рд░ рд╕реЗ рдХреНрдпреЛрдВ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛?

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

рд╣рд╛рдБ рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ! рдХрдИ рдПрдирдкреАрдПрдо рдкреИрдХреЗрдЬ рдиреЗрдХреНрд╕реНрдЯрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╕реАрдЖрд░рдП, рдпрд╛ рдЕрдиреНрдп рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ

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

// example next.config.js
module.exports = {
webpack(config, options) {
  config.module.rules.forEach(rule => {
          if (rule.oneOf) {
            const nestedScss = rule.oneOf.find((one) => {
              return one.test
                && 'some.scss'.match(one.test) 
                && one.issuer 
                && one.issuer.include 
                && one.issuer.include.includes('_app');
            });
            if (nestedScss) {
              const sassLoader = nestedScss.use.find(u => u.loader.includes('sass-loader'));
              // Set implementation to sass instead of node-sass here.
              sassLoader.options.implementation = require('sass');
            }
          }
        })
  }
}

рдлрд┐рд░ рдЖрдкрдХреЛ рдЕрдкрдиреА scss рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ _app.js рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

@smurrayatwork рдпрд╣ рд╣реИрдХрд┐рдВрдЧ рд╣реИ рдХреЛрдбрд┐рдВрдЧ рдирд╣реАрдВ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ

рд╕рд╛рде рд╣реА рдЗрд╕ рдкрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ _app.js рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдереЛрдбрд╝рд╛ рдмреЛрдЭрд┐рд▓ рд╣реИред

рдпрджрд┐ рд╣рдо рд╣рд░ рдЬрдЧрд╣ рд╕реАрдПрд╕рдПрд╕ рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕реАрдПрд╕рдПрд╕ рдХреЛ _app рдХреА рдкреНрд░рддреНрдпрдХреНрд╖ рдирд┐рд░реНрднрд░рддрд╛ рджреНрд╡рд╛рд░рд╛ рднреА рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ (рдЬреЛ рдХрд╣реАрдВ рдФрд░ рд╕рдВрджрд░реНрднрд┐рдд рдирд╣реАрдВ рд╣реИрдВ)?
рдЕрд░реНрдерд╛рддред рдпрд╣ рдареАрдХ рд╣реИ рдЕрдЧрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ _app (рдФрд░ рдХрд╣реАрдВ рдирд╣реАрдВ) рд╣реИ рдЬреЛ рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдЖрдпрд╛рдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирд┐рдпрддрд╛рддреНрдордХ рдЖрджреЗрд╢ рджреЗрдЧрд╛ред

рдпрд╣ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдХреЛрдбрдмреЗрд╕ рд╣реИ рдЬреЛ рдПрдХ рд╕рд╛рдЭрд╛ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рд╛рдЭрд╛ рд╕реАрдПрд╕рдПрд╕ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд╣рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП _app.js рдореЗрдВ рдЙрди рд╕рд╛рдЭрд╛ рд╕реАрдПрд╕рдПрд╕ рдЖрдпрд╛рддреЛрдВ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдирдлрд░рдд рдХрд░рддрд╛ рд╣реВрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреБрдЫ рдлреИрдВрд╕реА рдЬреЗрдПрд╕ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕реАрдПрд╕рдПрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореИрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╡рд░реНрддрдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ "рдРрдк рдлреИрдХреНрдЯреНрд░реА" рд╣реИ рдЬреЛ рд╕рднреА рд╕рд╛рдЭрд╛ рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред _app рдлрд┐рд░ рдлрд╝реИрдХреНрдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕реАрдПрд╕рдПрд╕ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред

рдореИрдВ https://github.com/vercel/next.js/discussions/13991 рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП +100ред рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдиреЛрдб рдореЙрдбреНрдпреВрд▓ рд╕реАрдПрд╕рдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЙрди рдкрд░ рдПрдХ .module.css рдЬреЛрдбрд╝рдирд╛ рд╣реИ

рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИред

рдкреИрдХреЗрдЬ pdf-viewer-reactjs рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП CSS рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕реЗ _app.js рд╕реЗ рднреА рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдпрд╣ рдкреВрд░реЗ рдРрдк рдХреЗ рд▓рд┐рдП рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдлреВрд▓рд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рд╕рдВрдШрд░реНрд╖реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВред

рдЖрдпрд╛рдд 'react-quill/dist/quill.snow.css';
рдЖрдпрд╛рдд 'рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЫрд╡рд┐-рдлрд╕рд▓/рдЬрд┐рд▓рд╛/ReactCrop.css';
рдЖрдпрд╛рдд '../../node_modules/material-design-icons/iconfont/material-icons.css';
рдЖрдпрд╛рдд '../../node_modules/bulma/css/bulma.css';
рдЖрдпрд╛рдд '../../node_modules/bulma-helpers/css/bulma-helpers.min.css';

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:

рдЪреЗрддрд╛рд╡рдиреА - ./node_modules/material-design-icons/iconfont/material-icons.css
рд╡реИрд╢реНрд╡рд┐рдХ CSS рдХреЛ node_modules рдХреЗ рднреАрддрд░ рд╕реЗ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдФрд░ рдкрдврд╝реЗрдВ: https://err.sh/next.js/css-npm
рд╕реНрдерд╛рди: node_modules/pdf-viewer-reactjs/dist/pdf-viewer-reactjs.js

./node_modules/bulma/css/bulma.css
рд╡реИрд╢реНрд╡рд┐рдХ CSS рдХреЛ node_modules рдХреЗ рднреАрддрд░ рд╕реЗ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдФрд░ рдкрдврд╝реЗрдВ: https://err.sh/next.js/css-npm
рд╕реНрдерд╛рди: node_modules/pdf-viewer-reactjs/dist/pdf-viewer-reactjs.js

./node_modules/bulma-helpers/css/bulma-helpers.min.css
рд╡реИрд╢реНрд╡рд┐рдХ CSS рдХреЛ node_modules рдХреЗ рднреАрддрд░ рд╕реЗ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдФрд░ рдкрдврд╝реЗрдВ: https://err.sh/next.js/css-npm
рд╕реНрдерд╛рди: node_modules/pdf-viewer-reactjs/dist/pdf-viewer-reactjs.js

./node_modules/material-design-icons/iconfont/material-icons.css
рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдлрд▓: рддреНрд░реБрдЯрд┐: рдЕрдВрддрд┐рдо рд▓реЛрдбрд░ (./node_modules/next/dist/build/webpack/loaders/error-loader.js) рдПрдХ рдмрдлрд░ рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛

./node_modules/bulma/css/bulma.css
рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдлрд▓: рддреНрд░реБрдЯрд┐: рдЕрдВрддрд┐рдо рд▓реЛрдбрд░ (./node_modules/next/dist/build/webpack/loaders/error-loader.js) рдПрдХ рдмрдлрд░ рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛

./node_modules/bulma-helpers/css/bulma-helpers.min.css
рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдлрд▓: рддреНрд░реБрдЯрд┐: рдЕрдВрддрд┐рдо рд▓реЛрдбрд░ (./node_modules/next/dist/build/webpack/loaders/error-loader.js) рдПрдХ рдмрдлрд░ рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛

рдирдорд╕реНрддреЗ ! рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдФрд░ рдХреИрд╕реЗ? рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдиреЛрдб рдореЙрдбреНрдпреВрд▓ рдЬреЛ рдореИрдВ рдЙрд╕рдХреЗ рдХрд╛рд░рдг рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ next.config.js рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдХреНрд░рд┐рдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рд╡реИрд╢реНрд╡рд┐рдХ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рдмрджрд╕реВрд░рдд рдХрдВрд╕реЛрд▓ рдЪреЗрддрд╛рд╡рдиреА рджрд┐рдЦрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЕрдЧрд░ рдиреЗрдХреНрд╕реНрдЯрдЬреЗрдПрд╕ рдХреА рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ/рд░рд╛рдп рд╕реЗ рдЯреВрдЯрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдпрд╣ рд╕реАрдЖрд░рдП > рдиреЗрдХреНрд╕реНрдЯрдЬреЗрдПрд╕ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдЕрд╡рд░реЛрдзрдХ рд╣реИ b/c рд╣рдо рд╕реНрд╡рд┐рдЪ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ CSS рдореЙрдбреНрдпреВрд▓ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

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

рдЕрдЧрд▓рд╛.config.js

const withCSS = require('@zeit/next-css');
const withPlugins = require('next-compose-plugins');
...
module.exports = withPlugins([
...
withCSS,
]);

@abdelrahmantoptal рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ SASS рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

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

error - ./src/components/layouts/Footer.scss 1:0
Module parse failed: Unexpected character '@' (1:0)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
> <strong i="8">@import</strong> 'styles/vars';
| 
| footer {

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ withCSS рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдПрдХ SASS рд▓реЛрдбрд░ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛:

      config.module.rules.push({
        test: /\.s[ac]ss$/i,
        use: [
          // Creates `style` nodes from JS strings
          'style-loader',
          // Translates CSS into CommonJS
          'css-loader',
          // Compiles Sass to CSS
          'sass-loader'
        ]
      });

рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдХрд╛рд░рдг:

error - ./src/components/App.scss
ReferenceError: self is not defined

рдореИрдВрдиреЗ @zeit/next-sass рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рд╣реБрдИ:

error - ./src/components/App.scss
ReferenceError: self is not defined

SASS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реБрдЭрд╛рд╡?

рдХрд┐рд╕реА рдиреЗ рдХрд┐рд╕реА рднреА рд╕рдВрдпреЛрдЧ рд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ https://github.com/balena-io-modules/rendition рд▓рд╛рдЧреВ рдХрд┐рдпрд╛?

https://github.com/balena-io-modules/rendition/issues/1164

рдореИрдВрдиреЗ рдЕрдм Gatsby рдФрд░ рдЬрд▓реНрдж рд╣реА Next.js рдХреЛ рдЙрдирдХреА рдЫреЛрдЯреА, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрд╡рд░реБрджреНрдз, рд░рд╛рдп рд╡рд╛рд▓реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕ рдПрдХ рдХреЗ рдХрд╛рд░рдг рдмрд╛рд╣рд░ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдореИрдВ рдЕрдм CKEditor 5 рдХреЗ рд▓рд┐рдП CodeBlock рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред рдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕рд░реНрдХрд▓ рдХрд░рдиреЗ рдХрд╛ рд╣рдореЗрд╢рд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ @Timer рдпрд╛

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

@OssiPesonen рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕реЗ рдЕрднреА рддрдХ рджреЗрдЦрд╛ рд╣реИ? рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмреАрдЪ рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░ рджреАред

@OssiPesonen рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕реЗ рдЕрднреА рддрдХ рджреЗрдЦрд╛ рд╣реИ? рдпрд╣ рд╕рдорд╛рдзрд╛рди рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмреАрдЪ рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░ рджреАред

рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдорджрдж рдХрд░рддрд╛ рд╣реИ? рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдиреЛрдб рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдХреБрдЫ рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ npm рд╕рдВрдХреБрд▓ рд╣реИ рдЬреЛ CSS рдХреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдПрдХ рдкреИрдХреЗрдЬ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ:

import '../theme/stylesheet.css'

рдЕрдЧрд▓рд╛.рдЬреЗрдПрд╕ рдкреНрд░рддрд┐рд╢реЛрдз рдХреЗ рд╕рд╛рде рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рдЕрдиреБрд░рдХреНрд╖рдХ рдХреА рд╕рд▓рд╛рд╣ рд╣реИ:

рдЕрдиреБрд░рдХреНрд╖рдХ рдХреЗ рдкрд╛рд╕ рдкрд╣реБрдВрдЪреЗрдВ рдФрд░ рдЙрдирд╕реЗ рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВред

рд▓реЛрдЧ рдХрд┐рд╕ рддрд░рд╣ рдХреА рдХрд╛рд▓реНрдкрдирд┐рдХ рднреВрдорд┐ рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╡реЗ рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд рддреЗрдЬ рдЧрддрд┐ рд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рдХрд┐рд╕реА рдХреЛ рднреА рд╣рдлреНрддреЛрдВ рддрдХ рд░реЛрдХреЗрдЧрд╛! рдпрд╣ рдЯрд┐рдХрдЯ 4 рдорд╣реАрдиреЗ рд╕реЗ рдЦреБрд▓рд╛ рд╣реИред рддреЗрдЬреА рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╡рд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред

рд╣рдо рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ (рдХреИрдирд░реА рдкрд░) рдХреЗ рднреАрддрд░ рдХрд┐рд╕реА рднреА рдШрдЯрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ node_modules рд╕реЗ CSS рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ! рдЬрдм рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдЧрд╛ рддреЛ рд╣рдо рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВрдЧреЗред

рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рд░рд┐рд▓реАрдЬ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рд╕реАрдПрд╕рдПрд╕ рдЖрдпрд╛рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ node_modules рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрдХреНрд╕реНрдЯ -рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓-рдореЙрдбреНрдпреВрд▓ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЬрд╛рджреВ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд┐рдпрд╛ред

@BrandonE рд▓рдЧрддрд╛ рд╣реИ рдЕрдЧрд▓реА transpile-рдореЙрдбреНрдпреВрд▓ рдЕрднреА рднреА рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рджрд┐рдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ *.module.css ред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдорд┐рд▓рд╛?

@rjoaopereira рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдХреА рдЧрд╣рд░реА рд╕рдордЭ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ node_modules рдЬреЛ рдХрд┐ рдЖрдпрд╛рддрд┐рдд CSS рдХреЗрд╡рд▓ @zeit/next-css рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рдПрдХ рдиреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЬрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд┐рдВрдЧ рдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ред рдПрдХ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рд╕реЗ рдмрд╣реБрдд рджреВрд░, рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ Next.js рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд╣рдореЗрдВ рдмреЗрдмреЗрд▓ / рд╡реЗрдмрдкреИрдХ рдХреАрдорд┐рдпрд╛ рдкрд░ рдХрдо рд╕рдордп рдФрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗред

рдореБрдЭреЗ рдпрд╣ рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЕрдЧрд▓рд╛ 9.5.3
рдиреЗрдХреНрд╕реНрдЯ-рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓-рдореЙрдбреНрдпреВрд▓ 4.1.0
рднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рдердо рдкрдХреНрд╖ рдШрдЯрдХред
рд╕реАрдПрд╕рдПрд╕ рдореЙрдбреНрдпреВрд▓ рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рдорд┐рд╢реНрд░рдг рдХреЗ рд╕рд╛рде рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдШрдЯрдХ

scopedcomponents рдХреЛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдШрдЯрдХреЛрдВ рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рд╣реИ

//next.config.js
const withCustomWebpack = require("./webpack-custom.config");
const withNextCSSOverride = require("./next.config.css");
const withTM = require("next-transpile-modules")(["@scopedcomponents"]);

module.exports = withCustomWebpack(
  withTM(
    withNextCSSOverride({
      poweredByHeader: false
    })
  )
);

///next.config.css.js
const {
  getCssModuleLocalIdent
} = require("next/dist/build/webpack/config/blocks/css/loaders/getCssModuleLocalIdent");
const path = require("path");
/**
 * Stolen from https://stackoverflow.com/questions/10776600/testing-for-equality-of-regular-expressions
 */
const regexEqual = (x, y) => {
  return (
    x instanceof RegExp &&
    y instanceof RegExp &&
    x.source === y.source &&
    x.global === y.global &&
    x.ignoreCase === y.ignoreCase &&
    x.multiline === y.multiline
  );
};

module.exports = (nextConfig = {}) => {
  return Object.assign({}, nextConfig, {
    webpack(config, options) {
      const nextCssLoaders = config.module.rules.find(
        rule => typeof rule.oneOf === "object"
      );

      if (nextCssLoaders) {
        const nextCssLoader = nextCssLoaders.oneOf.find(
          rule =>
            rule.sideEffects === false &&
            regexEqual(rule.test, /\.module\.css$/)
        );

        if (nextCssLoader) {
          /***********************************************************
           * change the rule to match all scopedcomponents css files
           ***********************************************************/
          nextCssLoader.test = /(@scopedcomponents|react\-virtualized)\/.*\.css$/;

          const cssLoader = nextCssLoader.use.find(({ loader }) =>
            loader.includes("css-loader")
          );

          if (cssLoader) {
            /***********************************************************
             * Override the default behaviour for CSS modules discovery
             * auto = true makes webpack search for *.module.css
             * https://webpack.js.org/loaders/css-loader/#auto
             ***********************************************************/
            cssLoader.options.modules.auto = /@scopedcomponents\/.*\.css$/;
            /***********************************************************
             * Nextjs overrides the default mode to "Pure"
             * https://github.com/vercel/next.js/blob/v9.5.2/packages/next/build/webpack/config/blocks/css/loaders/modules.ts#L35
             * Put it back to normal
             ***********************************************************/
            cssLoader.options.modules.mode = "local";
            /***********************************************************************************************************************
             * There is a problem when using components built with css-modules with Nextjs.                                        *
             * NextJS will consume code from `lib` on the server side and from `es` on the client.                                 *
             * https://github.com/vercel/next.js/blob/v9.5.2/packages/next/build/webpack-config.ts#L374                            *
             * This raises a problem when generating the classes for different environments,                                       *
             * throwing an error of className mismatch due to the hash created being based on the file path                        *
             * https://github.com/vercel/next.js/blob/v9.5.2/packages/next/build/webpack/config/blocks/css/loaders/modules.ts#L26  *
             * https://github.com/webpack/loader-utils/blob/v1.4.0/lib/interpolateName.js#L39                                      *
             * To solve this, when generating the classNames for 3rd party components,                                                 *
             * we need to tell cssloader to always use the same path                                                               *                                                                          *
             *                                                                                                                     *
             *  https://github.com/zeit/next-plugins/issues/595                                                                    *
             ***********************************************************************************************************************/
            cssLoader.options.modules.getLocalIdent = (
              context,
              localIdentName,
              localName,
              options
            ) => {
              const newContext = { ...context };
              if (newContext.resourcePath.includes("@scopedcomponents")) {
                newContext.resourcePath = newContext.resourcePath.replace(
                  `${path.sep}es${path.sep}`,
                  `${path.sep}lib${path.sep}`
                );
              }
              return getCssModuleLocalIdent(
                newContext,
                localIdentName,
                localName,
                options
              );
            };
          }
        }
      }

      if (typeof nextConfig.webpack === "function") {
        return nextConfig.webpack(config, options);
      }

      return config;
    }
  });
};

рд╕рдорд╕реНрдпрд╛:

  • рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдм рджреЗрд╡ рдореЛрдб рдореЗрдВ SSR рдирд╣реАрдВ рд╣реИред рдЙрддреНрдкрд╛рджрди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
  • рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреЗрд╡ рдореЗрдВ рдирд╣реАрдВ, рдЬреЛ рдХрд┐ https://github.com/vercel/next.js/issues/11448 рдФрд░ https://github.com рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЕрдЧрд▓реА-рд╕реАрдПрд╕рдПрд╕ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдкреНрд░реЗрд░рдгрд╛ рдереАред

@Timer рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

рд╣рдо рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ (рдХреИрдирд░реА рдкрд░) рдХреЗ рднреАрддрд░ рдХрд┐рд╕реА рднреА рдШрдЯрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ node_modules рд╕реЗ CSS рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ! рдЬрдм рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдЧрд╛ рддреЛ рд╣рдо рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВрдЧреЗред

рдХреНрдпрд╛ рдЗрд╕ рд╕реБрдзрд╛рд░ рдХреЗ рдмрд╛рдж рдХрд┐рд╕реА рдШрдЯрдХ рд╕реЗ CSS рдХрд╛ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рд╣реЛрдЧрд╛?

рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж @ рдЯрд╛рдЗрдорд░

next@^9.5.4-canary.10 рдЕрдм рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХрд╣реАрдВ рднреА node_modules рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реАрдПрд╕рдПрд╕ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рддреГрддреАрдп-рдкрдХреНрд╖ рд░рд┐рдПрдХреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд┐рд▓рд┐рдЯреА рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрдирдХреЗ рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдмрдВрдбрд▓ рдЖрдХрд╛рд░ рдХреЛ рдмрдврд╝рд╛рдПред

@Timer рдЙрд╕ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ рдХрд╛рдо рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА тЭдя╕П

рдзрдиреНрдпрд╡рд╛рдж @ рдЯрд╛рдЗрдорд░ !

рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЕрд╡рд░реБрджреНрдз рдореБрджреНрджрд╛ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЬрдм рдореИрдВрдиреЗ рдЖрдЬ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рддрдм рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рдерд╛ред рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ 9.5.4-рдХреИрдирд░реА-10 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдФрд░ рдХреБрдЫ рд╣реИ? рдпрд╣ рдЙрджрд╛рд╣рд░рдг рддреГрддреАрдп рдкрдХреНрд╖ lib @ rmwc . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ

image

@johmike рдХреНрдпрд╛ рдЖрдк рдирд┐рдореНрди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдпрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ ??

import "@rmwc/avatar/avatar.css";

рдХреНрдпрд╛ рдЖрдкрдиреЗ next рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рджреЗрд╡ рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдерд╛?

@Timer рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред node_modules рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ CSS рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

import 'prism-themes/themes/prism-darcula.css';

node_modules dir рдХреЗ рдмрд╛рд╣рд░ рд╡реИрд╢реНрд╡рд┐рдХ css рдХреЗ рдЖрдпрд╛рдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛?

@sasivarnan
рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ рдЬреЛ @rmwc рдШрдЯрдХреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░ @require("@rmwc/avatar/avatar.css") ред рдореИрдВ import {Avatar} from "library/Avatar" рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╡рд╣ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИред

@sasivarnan

рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ рдЬреЛ @rmwc рдШрдЯрдХреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░ @require("@rmwc/avatar/avatar.css") ред рдореИрдВ import {Avatar} from "library/Avatar" рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╡рд╣ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рд╕рдордЭ рд▓рд┐рдпрд╛ред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╕реАрдзреЗ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореЗрд░реА рдЧрд▓рддреАред

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

рдлрд┐рдХреНрд╕ рдРрдк рдХреЛ node_modules/ рдкрде рд╕реЗ рд╕реАрдПрд╕рдПрд╕ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЗрдЬрд╛рдЬрдд рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХрд╛ рдПрдХ рдмрд╣реБрдд рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ: рдмрд╕ рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдЕрдкрдиреЗ рдРрдк рдкрд░ рддрдм рддрдХ рдХреЙрдкреА рдХрд░реЗрдВ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдареАрдХ рди рд╣реЛ рдЬрд╛рдПред рдпрд╣ рдмреНрд▓реЙрдХрд░ рд╕реНрддрд░ рдХрд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЗрд╕рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд╡рд░реЛрдзрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдХрд╛ рдХреЛрдИ рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдШрдЯрдХ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдЖрдпрд╛рдд рд╡рд┐рд╡рд░рдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреИрдХреЗрдЬ рдореЗрдВ рд╣реА рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рдРрдк рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

@sasivarnan @OssiPesonen рдЖрдк рджреЛрдиреЛрдВ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдУрдкреА рдореБрджреНрджреЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдФрд░ рддрдп рдХреА рдЬрд╛ рд░рд╣реА рдереАред

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

// components/MySlider.tsx
import { Slider } from "@reach/slider";
import "@reach/slider/styles.css";

function Example() {
  return <Slider min={0} max={200} step={10} />;
}

рдЖрдк рдЬрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ #706 рдФрд░ #13282 рдХрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИ, рдпрд╛ node_modules рдХреЛ рдкреНрд░рдердо-рдкрдХреНрд╖ рдХреЛрдб рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред

@ рдЯрд╛рдЗрдорд░ рдореИрдВрдиреЗ рдЕрднреА рдЕрдкреЗрдХреНрд╖рд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

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

рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреБрдЫ рдФрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реЛ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ Avatar рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ Button рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рднреА Avatar рд╡рд┐рдлрд▓ рддреНрд░реБрдЯрд┐ рд╣реИред

image

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореИрдВрдиреЗ next-transpile-modules рдЬреЛрдбрд╝рд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рдореЛрдиреЛрд░реЗрдкреЛ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдореБрджреНрджреЗ рдХреА рдорджрдж рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред

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

const withCSS = require("@zeit/next-css");
module.exports = withCSS();
require.extensions[".css"] = () => {
  return;
};

рдореИрдВрдиреЗ next-transpile-modules рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХреНрдпреЛрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореИрдВ рдмрд╣реБрдд рдЬрд▓реНрджреА рдмреЛрд▓ рдЧрдпрд╛! рдЬрдмрдХрд┐ рдпрд╣ next dev рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, next build рд╕реАрдПрд╕рдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ unknown token . (рдбреЙрдЯ) рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред

@ рдЯрд╛рдЗрдорд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдореЛрдиреЛрд░реЗрдкреЛ рдФрд░ рдХрдИ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╛ рдХреБрдЫ рдФрд░ рд╣реИ рдЬрд┐рд╕реЗ рдореБрдЭреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ @ рдЯреАрдо/рдкреИрдХреЗрдЬрдП рдиреЛрдб_рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд╕реАрдПрд╕рдПрд╕ рдЖрдпрд╛рдд рдХрд░ рд╕рдХреЗ рдФрд░ рдлрд┐рд░ @ рдЯреАрдо/рдкреИрдХреЗрдЬрдмреА рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ?

рдЖрдк рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП https://github.com/vercel/next.js/issues/13282 рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

[email protected] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХрд╣реАрдВ рднреА рд╕реАрдПрд╕рдПрд╕ рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдПрд╕рд╕реАрдПрд╕рдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рд╕рдВрднрд╡ рд╣реЛрдЧрд╛? рдореИрдВ рдХреЗрд╡рд▓ рдЙрди рдПрд╕рд╕реАрдПрд╕рдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рдирдХрд╛ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдкреГрд╖реНрда рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

// рдкреЗрдЬ/_app.tsx
import '../styles/common.scss'

// рдкреГрд╖реНрда/index.tsx рдореИрдВ рдПрдХ рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ
import '@mynpm/custom-ui/_Button.scss'

// рдкреГрд╖реНрда/about.tsx рдореИрдВ рдПрдХ рд╣рд┐рдВрдбреЛрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ
import '@mynpm/custom-ui/_Carousel.scss'

https://nextjs.org/docs/basic-features/built-in-css-support рдкрд░ рдЙрджрд╛рд╣рд░рдг
Schermata 2020-10-13 alle 16 43 19

рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рддрд╛ рд╣реИ:
рддреНрд░реБрдЯрд┐ - /Users/gp/dev/next-kolumbus/node_modules/@reach/dialog/styles.css
рд╡реИрд╢реНрд╡рд┐рдХ CSS рдХреЛ node_modules рдХреЗ рднреАрддрд░ рд╕реЗ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдФрд░ рдкрдврд╝реЗрдВ: https://err.sh/next.js/css-npm

https://nextjs.org/docs/basic-features/built-in-css-support рдкрд░ рдЙрджрд╛рд╣рд░рдг
Schermata 2020-10-13 alle 16 43 19

рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рддрд╛ рд╣реИ:
рддреНрд░реБрдЯрд┐ - /Users/gp/dev/next-kolumbus/node_modules/@reach/dialog/styles.css
рд╡реИрд╢реНрд╡рд┐рдХ CSS рдХреЛ node_modules рдХреЗ рднреАрддрд░ рд╕реЗ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдФрд░ рдкрдврд╝реЗрдВ: https://err.sh/next.js/css-npm

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк Next.js рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рд╕рдВрд╕реНрдХрд░рдг 9.5.5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдмрд╕ npm рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдореИрдВрдиреЗ рд╕рднреА .next рдХреИрд╢реЗ рд╕рд╛рдлрд╝ рдХрд░ рджрд┐рдП рд╣реИрдВ рдФрд░ рдЕрдм рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рддреНрд░реБрдЯрд┐ рдЕрднреА рднреА рд╕рдВрд╕реНрдХрд░рдг 9.5.5 рд╣реИ , _app -> import "react-gauge-chart-nextjs-support/dist/GaugeChart/style.css";

Screenshot 2020-11-12 at 14 12 11

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

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

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

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

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

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

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