рдПрдХ рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рддрд░реАрдХреЗ рд╕реЗ normalize.css (рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ NPM рд╕реЗ) рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдЖрджрд░реНрд╢ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ? рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд▓рд┐рдП рд╣реЗрдбрд░ рдЕрдиреБрд░реЛрдз рдкреЗрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЧреНрд▓реИрдорд░ рдореЗрдВ glamor/reset
рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдЬреЛ рдореИрдВ рдвреВрдВрдв рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдирд╣реАрдВ (рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЧреНрд▓реИрдорд░ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреИрд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдП)ред
рдЖрдк next/head
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
@nkzawa рдореИрдВрдиреЗ рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП next/head
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ css-loader
рдХреЗ рдмрд┐рдирд╛, рдореБрдЭреЗ node_modules
рд╕реЗ CSS рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддреА рд╣реИ? рдФрд░ рдХреНрдпрд╛ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреИрд╢ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдпрд╛ рдХреНрдпрд╛ рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рд╣реЗрдбрд░ рдЕрдиреБрд░реЛрдз рдкреЗрд▓реЛрдб рдХреЛ рдЙрдбрд╝рд╛ рджреЗрддрд╛ рд╣реИ?
рдЖрдк style
рдХреЛ next/head
$ рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдЬреИрд╕реЗ:
<Head>
<style>{`
body {
margin: 0;
}
`}</style>
</Head>
рдЖрдкрдХреЛ normalize.css
рд╕реЗ .json
рдпрд╛ рдПрдХ рдШрдЯрдХ рдХреЛ require
рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдм IMO рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЪрдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдбрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреЗрд▓реЛрдб рдХреЛ рдмреНрд▓реЛрдЯ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
https://github.com/zeit/next.js/pull/222 рдЬрд╛рд░реА рд╣реЛрдиреЗ рдкрд░ рдЖрдк css-loader
рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рдкрд╛рдПрдВрдЧреЗред
рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рдпрд╣реА рдкрд╛рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рддрд░реАрдХрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдЧрд▓реА рд╣рд┐рдЯ рд╕реЗ рдкрд╣рд▓реЗ рдХрдирд╡рд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╡реЗрдмрдкреИрдХ рдпрд╛ рдЧрд▓реНрдк рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдВред
рдФрд░ рдпрд╣ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд▓рд╛ рд╕рд╛рдорд╛рдиреНрдп рдЪрдВрдХрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЕрдм рд╕рд╛рдорд╛рди рдХреЛ рд╕рд┐рд░ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреЗрд╣рддрд░ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВред рдореЗрд░реЗ рд╕рд╡рд╛рд▓реЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
9 рджрд┐рд╕рдВрдмрд░ 2016 рдХреЛ 01:11 рдмрдЬреЗ, Naoyuki Kanezawa [email protected] рдиреЗ рд▓рд┐рдЦрд╛:
рдЖрдк рд╢реИрд▓реА рдХреЛ рдЕрдЧрд▓реЗ/рд╕рд┐рд░ рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ:
рдЖрдкрдХреЛ normalize.css рдХреЛ .json рдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдЯрдХ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдм IMO рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЪрдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдбрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреЗрд▓реЛрдб рдХреЛ рдмреНрд▓реЛрдЯ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред#222 рдЬрд╛рд░реА рд╣реЛрдиреЗ рдкрд░ рдЖрдк css-loader рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рдкрд╛рдПрдВрдЧреЗред
-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рд╕реВрддреНрд░ рдХреЛ рд▓рд┐рдЦрд╛ рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред
рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рдЧреНрд▓реИрдорд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ normalize.css
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрджреНрдпрдкрд┐ рдПрдХ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг v3.0.2
https://github.com/threepointone/glamour/blob/master/src/reset.js
рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛
https://github.com/threepointone/glamour/pull/154
рдмрд╕ import 'glamor/reset'
рдЖрдпрд╛рдд рдХрд░рдирд╛ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореЗрд░реЗ рдХрд╛рдВрдЯреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ рдпрджрд┐ рдЖрдкрдХреЛ 5.0 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рд╡рд┐рд▓рдп рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ :)
@FrancosLab рдЯрд┐рдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ glamor/reset
рдХреЗ рдкрд╛рд░ рдЪрд▓рд╛ рдЧрдпрд╛ рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрд╛ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдЗрд╕рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдерд╛- рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЧреНрд▓реИрдорд░ рдХреЗ рд░реАрдбрдореЗ рдкрд░ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреАрдЖрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рддреЛ [email protected]
рдХреЗ рд▓рд┐рдП рдЕрднреА рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ? рдореИрдВрдиреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрд┐рд╕реНрдордд рдХреЗ with-global-stylesheet
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЬреЛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЙрд╕рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рдХрдИ рдШрдВрдЯреЗ рдмрд┐рддрд╛рдП рд╣реИрдВред
рдХреНрдпреЛрдВрдХрд┐ normalize.css
рдПрдХ рдкреИрдХреЗрдЬ рд╣реИ, рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ (рдиреЛрдб рдХреЗ рд░рд┐рдЬрд╝реЙрд▓реНрдпреБрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ package.main
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, emit-file-loader
(рдФрд░ file-loader
рднреА) рдЙрджрд╛рд╣рд░рдг рд░реЗрдкреЛ рд╕реЗ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдбрд░ рдХреЛ рд╡рд┐рдХрд▓реНрдк name=dist/[path][name].[ext]
рдкрд╛рд╕ рдХрд░рддреЗ рд╕рдордп, path
рд╣рдореЗрд╢рд╛ -
рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдлрд╝рд╛рдЗрд▓ .next/dist/-/node_modules/normalize.css/normalize.css
рдореЗрдВ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ .
рдЗрд╕реЗ рджреВрд░ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдкреВрд░реНрдг normalize.css
рдлрд╝рд╛рдЗрд▓ рдХреЛ static
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реИ рдпрд╛ рд╢рд╛рдпрдж рдкреВрд░реА рдЪреАрдЬрд╝ рдХреЛ style
рдЯреИрдЧ рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рдХрд░рдирд╛ рд╣реИ (рдореИрдВ рд╕реНрдЯрд╛рдЗрд▓ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐)ред
рдореИрдВрдиреЗ webpack-copy-plugin
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ static
рдлрд╝реЛрд▓реНрдбрд░ .next
рд╕реЗ рдирд╣реАрдВ рдкрд░реЛрд╕рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд╣реА <root-folder>/static
(рдЬрд╣рд╛рдВ pages
рд░рд╣рддрд╛ рд╣реИ) рддреЛ рдпрд╣ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдЕрдм рдЬрдмрдХрд┐ Next.js рдЧреНрд▓реИрдорд░ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реБрдЭрд╛рд╡?
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╕рдВрдмрдВрдзрд┐рдд: https://github.com/zeit/styled-jsx/issues/83 , https://github.com/zeit/styled-jsx/pull/100 , https://github.com/zeit/ рдЕрдЧрд▓рд╛.рдЬреЗрдПрд╕/рдореБрджреНрджреЗ/544
with-global-stylesheet
рдЙрджрд╛рд╣рд░рдг рдЕрднреА рдпрд╣рд╛рдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: #1327!
import 'normalize.css'
рдЬреИрд╕реА рд╕рд░рд▓ рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЦреНрдп рдореБрджреНрджрд╛ рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗрдмрдкреИрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИ, рдЖрдк рд╕рд░реНрд╡рд░ рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдлрд╛рдЗрд▓ рдкрд░ рдЧреИрд░-рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред@migueller рд╢рд╛рдпрдж v2.0 рдХреЗ рдмрд╛рдж рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рд╡реЗрдмрдкреИрдХ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИ...: https://github.com/zeit/next.js/issues/1245
@sedubois , рдЗрд╕рдХрд╛ рдмреЗрд╕рдмреНрд░реА рд╕реЗ рдЗрдВрддрдЬрд╛рд░ рд╣реИ! рдореИрдВ
рдЖрдк рд╡рд╣рд╛рдВ рдЕрдкрдирд╛ рд╡реЛрдЯ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ
рджреЛрд╕реНрддреЛрдВ, рдореИрдВ normalize
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдареАрдХ рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ sass-loader
, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ includePaths
рдХреЗ рдмрд┐рдирд╛ рднреА рдЬреЛ рдЕрднреА рд╡рд┐рд▓рдп рд╣реБрдЖ рд╣реИред рдЖрдкрдХреЛ рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐ normalize-scss ( normalize.css
рдХрд╛ Sass рдкреЛрд░реНрдЯ) рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ рдЙрдЪреНрдЪрддрдо рд╕реНрддрд░ рдкрд░ <strong i="10">@import</strong> '~normalize-scss';
рдЬреЛрдбрд╝реЗрдВ (рдХрд╕реНрдЯрдо _document
, рд▓реЗрдЖрдЙрдЯ, рдпрд╛ рдкреЗрдЬ) рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ scss
рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧреА рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ with-global-stylesheet
рдХрд░рддрд╛ рд╣реИред
рдЕрдм рдпрджрд┐ рдЖрдк рдореВрд▓ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рд╢рд░реНрдд рд▓рдЧрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк babel-plugin-module-resolver рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЙрдкрдирд╛рдо рдХреЛ node_modules
babel-plugin-module-resolver
рдкрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ styles
рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд рдХрд░реЗрдВ + <style dangerouslySetInnerHTML={{ __html: normalize }} />
ред
@orlin , рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд░реНрд╡рд░ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡реЗрдмрдкреИрдХ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред
@migueloller , рдЗрд╕реЗ рдареАрдХ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрд╕реА рддрд░рд╣ scss
рдХреЛ with-global-stylesteet
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ js
рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред css
рдФрд░ scss
рджреЛрдиреЛрдВ рдХреЛ рд╡реЗрдмрдкреИрдХ рд▓реЛрдбрд░ рджреНрд╡рд╛рд░рд╛ next.config.js
рдореЗрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬреЗрдПрд╕ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЕрднреА import normalize from '...'
рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ normalize.css
рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ babel-plugin-module-resolver
рдЙрдкрдирд╛рдо рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рддрд╛рдХрд┐ рдЖрдкрдХреЛ рдПрдХ ...
рдкрде рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
@рдСрд░реНрд▓рд┐рди ,
рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рд╣реИ, normalize.css
рдЬреЛрдбрд╝рд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рд╕рд╛ рдЦреЗрд▓рд╛ рд╣реИред рдЖрдк рд╕рд╣реА рд╣реИрдВ, рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ!
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдирд╛ рдкрдбрд╝рд╛, рдЬрд╣рд╛рдВ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдирд╛рдо dist/[path]index.js
рдерд╛, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдпрджрд┐ рдЖрдк package.json
рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ рдиреЛрдб рдХрд╛ require
рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЕрдиреНрдп рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдЖрдкрдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд░рд╣рдирд╛ рдФрд░ node_modules
рдирд╣реАрдВ) рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ normalize.css (рд╕рд╛рде рд╣реА рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдЕрдиреНрдп рдкреИрдХреЗрдЬ) рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдмрдкреИрдХ рдирд┐рдпрдо рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдпрд╣ рдПрдХ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рдлрд┐рдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛ рдЬреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬреИрд╕рд╛ рдХрд┐ # 1245 рдФрд░ https://github.com/zeit/styled-jsx/pull/100#issuecomment рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред -277133969
@rauchg , рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ node_modules
рдореЗрдВ рдореМрдЬреВрдж рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛? рдореБрдЭреЗ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдпрд╛ with-global-stylesheet
рдПрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реЛрдЧреАред
@migueller рдЗрд╕реЗ рдЙрд╕реА рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╢рд╛рдпрдж рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛
@migueller рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдкрд░-рдХреНрд▓реАрди "рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕" рддрд░реАрдХрд╛ рдорд┐рд▓рд╛ред with-global-stylesheet
рдкрд░ рдПрдХ рдкреАрдЖрд░ рдХрд░реЗрдВрдЧреЗ ... рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рд╣реИрдХ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордп рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ред
рд░реАрд╕реЗрдЯ рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕рд╣рд┐рдд рд╡реИрд╢реНрд╡рд┐рдХ рд╢реИрд▓рд┐рдпрд╛рдБ, рд╡реИрд╕реЗ рднреА рдПрдХ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реИрдВред рдШрдЯрдХреЛрдВ рдХреЛ рдЕрдкрдиреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╕реАрдПрд╕рдПрд╕ рдХрд╛ jQuery рд╣реИред
@jaydenseric рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ normalize.css CSS рдХрд╛ jQuery рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрднреА рднреА HTML рддрддреНрд╡реЛрдВ рдХреА рдЕрдкрдиреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдореЗрдВ рдХрд╛рдлреА рдЕрд╕рдВрдЧрдд рд╣реИрдВ, normalize.css рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЖрдзреБрдирд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓реАрдЧреЗрд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП normalize.css рдПрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: (https://github.com/zeit/next.js/#custom-document)
// ./pages/_document.js
import Document, { Head, Main, NextScript } from 'next/document'
import flush from 'styled-jsx/server'
export default class MyDocument extends Document {
static getInitialProps({ renderPage }) {
const { html, head, errorHtml, chunks } = renderPage()
const styles = flush()
return { html, head, errorHtml, chunks, styles }
}
render() {
return (
<html>
<Head>
<title>My page</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css" />
</Head>
<body className="custom_class">
{this.props.customValue}
<Main />
<NextScript />
</body>
</html>
)
}
}
@vinzcelavi рдЖрдк рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдХреНрдпреЛрдВ рдлреНрд▓рд╢ рдХрд░рддреЗ рд╣реИрдВ?
@sospedra рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рд╢рд╛рдпрдж рдпрд╣ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ: https://github.com/zeit/styled-jsx#styled -jsxserver
рдЖрдк рд╢рд╛рдпрдж рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЕрдиреБрд╕рд╛рд░ Document.getInitialProps
рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВ: https://github.com/zeit/next.js/#custom -document
Head
рдХреЗ рдЕрдВрджрд░ рд╕реАрдбреАрдПрди рдпреВрдЖрд░рдПрд▓ рдХреЗ рд╕рд╛рде link
рдЯреИрдЧ рд░рдЦрдирд╛ рдареАрдХ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ? рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред
@ janoist1 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЖрдЧреЗ рд╕реЗ рдЦреБрдж рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдмрд╛рд╣рд░реА рд╕реАрдбреАрдПрди рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдХрд┐рд╕реА рдмрд╛рд╣рд░реА рдЪреАрдЬ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред
рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВ рдпрджрд┐ next-css
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ (рд╢рд╛рдпрдж рдЖрдк CSS рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП _app рд╕реЗ CSS рдлрд╝рд╛рдЗрд▓ рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрдЧрд╛)ред
рд╣рдо рдкрд╣рд▓реЗ link
рдХреЗ рдЕрдВрджрд░ Head
рдХреЗ рд▓рд┐рдП normalize.css
рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ <style type='text/css'>{globalStyles}</style>
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреБрдЫ рдХрд╕реНрдЯрдо рд╡реИрд╢реНрд╡рд┐рдХ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ
import React from 'react'
import Document, { Head, Main, NextScript } from 'next/document'
const globalStyles = `
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
`
export default class MyDocument extends Document {
render () {
return (
<html>
<Head>
<meta name='viewport' content='width=device-width, initial-scale=1' />
<meta charSet='utf-8' />
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css' />
<style type='text/css'>{globalStyles}</style>
</Head>
<body>
<Main />
<NextScript />
</body>
</html>
)
}
}
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@jaydenseric рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ normalize.css CSS рдХрд╛ jQuery рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрднреА рднреА HTML рддрддреНрд╡реЛрдВ рдХреА рдЕрдкрдиреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдореЗрдВ рдХрд╛рдлреА рдЕрд╕рдВрдЧрдд рд╣реИрдВ, normalize.css рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЖрдзреБрдирд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓реАрдЧреЗрд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП normalize.css рдПрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред