Razzle: рдореИрдВ рд╕рд░реНрд╡рд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд╛ рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреИрд╕реЗ рдХрд░реВрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 5 рдлрд╝рд░ре░ 2019  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jaredpalmer/razzle

рдирдорд╕реНрддреЗ,

рд╣рдордиреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рджреЗрдЦреА рд╣реИ рдЬрд╣рд╛рдВ рдпрджрд┐ рдЖрдк Google рдХреЗ рдЦреЛрдЬ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ Google рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдПрдХ рд░рд┐рдХреНрдд рдкреГрд╖реНрда рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЬрд╛рддреА рд╣реИред

рдореИрдВрдиреЗ рдХреБрдЫ рд╢реЛрдз рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдореБрдЭреЗ рдЗрд╕ рд▓реЗрдЦ рддрдХ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ:

https://medium.com/@gajus/react -application-seen-as-a-blank-page-via-fetch-as-google-afb11dff8562

рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЦреЛрдЬ рдЗрдВрдЬрди, рдФрд░ Google рд╕реНрд╡рдпрдВ рдЙрд╕реА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рд╣рдо рдЕрдм рддрдХ рд░реИрдВрдХрд┐рдВрдЧ рдЦреЛ рдЪреБрдХреЗ рд╣реЛрдВрдЧреЗ, рдлрд┐рд░ рднреА рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рдорд╛рд▓рд┐рдХ рдХреЛ рдЬрдЧрд╛рдП рд░рдЦреЗрдЧрд╛ред

рдореИрдВрдиреЗ рдлреИрдВрдЯрдордЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рдХрд┐ рдпрд╣ Google рдХреЗ рд╕рдорд╛рди рд╣реИ, рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдХрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВ:

image

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

рдХреНрдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рдпрд╣рд╛рдВ рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛?

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

рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ (рдФрд░ рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) server.js , client.js , App.js , рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЬрд┐рддрдирд╛ рд╣реЛ рд╕рдХреЗ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рд╣реИ рдЖрдкрдХреЗ рд░реИрдЬрд╝рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рдЬреИрд╕реЗ рд░рд╛рдЬреНрдп рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд╡реЗрдмрдкреИрдХ рдХреЗ рдкрд╣рд▓реВ рдУрд╡рд░рд░рд╛рдЗрдб (рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╣реИ)ред рдореИрдВ рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реИрдЬрд╝рд▓ рдХреЗ рдПрдЪрдЯреАрдПрдордПрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдЕрдкрдиреА server.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ рд╕рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдареАрдХ рд╕реЗ рд▓реЛрдб рд╣реЛ рдЧрдИ рд╣реИрдВред рдПрдХ рдмрд╛рд░ рдЬрдм рдпрд╣ рдЪрд▓ рд░рд╣рд╛ рд╣реЛ, рддреЛ рдХреНрд░реЛрдо рджреЗрд╡ рдЯреВрд▓реНрд╕ рдЦреЛрд▓реЗрдВ рдФрд░ "рдкреНрд░рджрд░реНрд╢рди" рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВ, "рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ" рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЛ рдЪреЗрдХ рдХрд░реЗрдВ, рдлрд┐рд░ рд░реАрдлреНрд░реЗрд╢ рдЖрдЗрдХрди рджрдмрд╛рдПрдВред рдиреАрдЪреЗ рдЬреАрдЖрдИрдПрдл рджреЗрдЦреЗрдВред

kapture 2019-02-05 at 8 33 42

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

рдЖрдкрдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ Google рдЯреИрдЧ рдкреНрд░рдмрдВрдзрдХ рд╕рд╛рдордЧреНрд░реА, рдЖрдкрдХреЗ рд╕рднреА рд╕реАрдПрд╕рдПрд╕, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЖрдк рдЬреЛ рднреА рдХреЛрдб-рд╡рд┐рднрд╛рдЬрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛ред рдмрд╕ рдЗрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдФрд░ рдкреАрдЫреЗ рдХреА рдУрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, Redux рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдлрд┐рд░ рд╡рд╛рдкрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╣реЗрд▓рдореЗрдЯ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдлрд┐рд░, рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рд╕рд╣реА рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рд▓рд╛рдЗрдЯрд╣рд╛рдЙрд╕ рдкрд░реАрдХреНрд╖рдг (рдСрдбрд┐рдЯ рдЯреИрдм) рдХрд░рдХреЗ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рдЗрд╕ рд░рд╛рдЬреНрдп рдХреЛ рдПрдХ рдирдИ рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдк рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛ рд╕рдХреЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рдЕрдкрдиреА рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рдЕрдВрдд рдореЗрдВ, рдХреЛрдб-рд╡рд┐рднрд╛рдЬрди рдХреЛ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рдиреЛрдЯ: рдпрджрд┐ рдЖрдк рдЕрдкрдирд╛ рд╕реАрдПрд╕рдПрд╕ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдореЗрдВ рд░реИрдЬрд╝рд▓ рдХреЗ рд╕рд╛рде рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдПрдлрдУрдпреВрд╕реА рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд░реИрдЬрд╝рд▓ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рд╕рд░реНрд╡рд░ рдкрд░ .css рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рд╕рд┐рд░реНрдл рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдЖрдк .css рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдк рд╕реНрдЯрд╛рдЗрд▓ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдЙрдЪрд┐рдд SSR рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд░реИрдЬрд╝рд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкреНрд░реЛрдбрдХреНрд╢рди рд╕рд░реНрд╡рд░ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдкрдиреЗ HTML рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

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

рдпрджрд┐ рдЖрдкрдХрд╛ рдкреГрд╖реНрда рдЦрд╛рд▓реА рд╣реЛ рд░рд╣рд╛ рд╣реИ рддреЛ рдЖрдкрдиреЗ рдЕрдкрдиреА SSR рдпрд╛ рдЬрд▓рдпреЛрдЬрди рдпреЛрдЬрдирд╛ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИред рдЖрдкрдиреЗ рдЬреЛ рд▓реАрдХ рд╕реЗ рд╣рдЯрдХрд░ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ рдЙрд╕рд╕реЗ рд░реИрдЬрд╝рд▓ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреАрдмреАрд╕реА рдбреЙрдЯ рдХреЙрдо рдЬреИрд╕реА рдПрд╕рдИрдУ-рдХреЗрдВрджреНрд░рд┐рдд рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреА рд╕рд░реНрд╡рд░.рдЬреЗрдПрд╕ рдлрд╛рдЗрд▓ рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрдк рдЕрдкрдирд╛ рдбреЗрдЯрд╛ рд╕рд░реНрд╡рд░ рдкрд░ рд▓рд╛ рд░рд╣реЗ рд╣реИрдВ?

рд╣рд╛рдп рдЬрд╛рд░реЗрдб,

рд╢реАрдШреНрд░ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рд╛рдБ рд╣рдо рдПрдХ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣рд╛рдБ рдореЗрд░рд╛ рд╕рд░реНрд╡рд░ рд╣реИредjs

import App from './App';
import React from 'react';
import Helmet from 'react-helmet';
import { StaticRouter } from 'react-router-dom';
import { Provider } from 'react-redux';
import express from 'express';
import compression from 'compression';
import { renderToString } from 'react-dom/server';

import configureStore from './store/configureStore';
import { remoteLoader } from './api/remoteLoader';
import serialize from 'serialize-javascript';

import { Capture } from 'react-loadable';
import { getBundles } from 'react-loadable/webpack';
import stats from '../build/react-loadable.json';

import { IS_PRODUCTION } from './components/shared/constants';

const assets = require(process.env.RAZZLE_ASSETS_MANIFEST);

const server = express();
server.use(compression());

if (!IS_PRODUCTION) {
    server.set('cache', false);
}

server
    .disable('x-powered-by')
    .use(express.static(process.env.RAZZLE_PUBLIC_DIR, { Expires: '30d' }))
    .get('/*', (req, res) => {
        //Ensures clients with old css paths are served the current file
        if (req.path.indexOf('/static/css') > -1 && assets.client.css) {
            const currentCssFile = `${process.env.RAZZLE_PUBLIC_DIR}${assets.client.css}`;
            return res.sendFile(currentCssFile);
        }

        remoteLoader(apiResult => {
            const responseCode = typeof apiResult.status === 'undefined' ? 404 : apiResult.status;

            if (responseCode === 301) {
                return res.redirect(responseCode, apiResult.headers.location);
            }

            // Compile an initial state
            const initialState = {
                remote: {
                    cms: {
                        result: apiResult ? apiResult.data : false,
                        loading: false
                    },
                    myDrewberry: {
                        searchResults: null,
                        loading: false,
                        failed: false
                    }
                }
            };
            // Create a new Redux store instance
            const store = configureStore(initialState);

            const context = {};
            const modules = [];
            const markup = renderToString(
                <Capture report={moduleName => modules.push(moduleName)}>
                    <StaticRouter context={context} location={req.url}>
                        <Provider store={store}>
                            <App />
                        </Provider>
                    </StaticRouter>
                </Capture>
            );
            const helmet = Helmet.renderStatic();

            if (context.url) {
                res.redirect(context.url);
            } else {
                const bundles = getBundles(stats, modules);
                const chunks = bundles.filter(bundle => bundle.file.endsWith('.js'));

                res.status(responseCode).send(
                    `<!doctype html>
                    <html ${helmet.htmlAttributes.toString()}>
                    <head>

                        ${assets.client.css ? `<link rel="stylesheet" href="${assets.client.css}">` : ''}
                        ${helmet.title.toString()}
                        ${helmet.meta.toString()}
                        ${helmet.link.toString()}
                        <link rel="icon" type="image/png" href="/favicon16.png" sizes="16x16"/>
                        <link rel="icon" type="image/png" href="/favicon32.png" sizes="32x32"/>
                        <link rel="icon" type="image/png" href="/favicon96.png" sizes="96x96"/>
                        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/> <!--320-->
                        <meta http-equiv="expires" content="0">
                    </head>
                    <body class="drewberry-preload">

                        <!-- Google Tag Manager -->
                            <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
                            new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
                            j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
                            'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
                            })(window,document,'script','dataLayer','GTM-TKPXWB');</script>
                        <!-- End Google Tag Manager -->

                        <div id="root">${markup}</div>
                        <script>
                            window.__PRELOADED_STATE__ = ${serialize(initialState)}
                        </script>
                        ${
                            IS_PRODUCTION
                                ? `<script src="${assets.client.js}"></script>`
                                : `<script src="${assets.client.js}" crossorigin></script>`
                        }
                          ${chunks
                              .map(chunk =>
                                  IS_PRODUCTION
                                      ? `<script src="/${chunk.file}"></script>`
                                      : `<script src="http://${process.env.HOST}:${parseInt(process.env.PORT, 10) + 1}/${
                                            chunk.file
                                        }"></script>`
                              )
                              .join('\n')}
                          <script>window.main();</script>
                    </body>
                </html>`
                );
            }
        }, req.path);
    });

export default server;

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

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЙрдкрд░реЛрдХреНрдд рдореЗрдВ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ?

рдпрд╣ рдЗрд╕ рд╕рдордп рдПрдХ рдЬрдВрдЧрд▓реА рд╣рдВрд╕ рдХрд╛ рдкреАрдЫрд╛ рдХрд░рдиреЗ рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ! :-)

рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ (рдФрд░ рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) server.js , client.js , App.js , рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЬрд┐рддрдирд╛ рд╣реЛ рд╕рдХреЗ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рд╣реИ рдЖрдкрдХреЗ рд░реИрдЬрд╝рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб" рдЬреИрд╕реЗ рд░рд╛рдЬреНрдп рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд╡реЗрдмрдкреИрдХ рдХреЗ рдкрд╣рд▓реВ рдУрд╡рд░рд░рд╛рдЗрдб (рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╣реИ)ред рдореИрдВ рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реИрдЬрд╝рд▓ рдХреЗ рдПрдЪрдЯреАрдПрдордПрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдЕрдкрдиреА server.js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ рд╕рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдареАрдХ рд╕реЗ рд▓реЛрдб рд╣реЛ рдЧрдИ рд╣реИрдВред рдПрдХ рдмрд╛рд░ рдЬрдм рдпрд╣ рдЪрд▓ рд░рд╣рд╛ рд╣реЛ, рддреЛ рдХреНрд░реЛрдо рджреЗрд╡ рдЯреВрд▓реНрд╕ рдЦреЛрд▓реЗрдВ рдФрд░ "рдкреНрд░рджрд░реНрд╢рди" рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВ, "рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ" рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЛ рдЪреЗрдХ рдХрд░реЗрдВ, рдлрд┐рд░ рд░реАрдлреНрд░реЗрд╢ рдЖрдЗрдХрди рджрдмрд╛рдПрдВред рдиреАрдЪреЗ рдЬреАрдЖрдИрдПрдл рджреЗрдЦреЗрдВред

kapture 2019-02-05 at 8 33 42

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

рдЖрдкрдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ Google рдЯреИрдЧ рдкреНрд░рдмрдВрдзрдХ рд╕рд╛рдордЧреНрд░реА, рдЖрдкрдХреЗ рд╕рднреА рд╕реАрдПрд╕рдПрд╕, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЖрдк рдЬреЛ рднреА рдХреЛрдб-рд╡рд┐рднрд╛рдЬрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реВрдВрдЧрд╛ред рдмрд╕ рдЗрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдФрд░ рдкреАрдЫреЗ рдХреА рдУрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, Redux рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдлрд┐рд░ рд╡рд╛рдкрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд╣реЗрд▓рдореЗрдЯ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдлрд┐рд░, рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рд╕рд╣реА рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рд▓рд╛рдЗрдЯрд╣рд╛рдЙрд╕ рдкрд░реАрдХреНрд╖рдг (рдСрдбрд┐рдЯ рдЯреИрдм) рдХрд░рдХреЗ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рдЗрд╕ рд░рд╛рдЬреНрдп рдХреЛ рдПрдХ рдирдИ рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдк рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛ рд╕рдХреЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рдЕрдкрдиреА рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рдЕрдВрдд рдореЗрдВ, рдХреЛрдб-рд╡рд┐рднрд╛рдЬрди рдХреЛ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рдиреЛрдЯ: рдпрджрд┐ рдЖрдк рдЕрдкрдирд╛ рд╕реАрдПрд╕рдПрд╕ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдореЗрдВ рд░реИрдЬрд╝рд▓ рдХреЗ рд╕рд╛рде рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдПрдлрдУрдпреВрд╕реА рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд░реИрдЬрд╝рд▓ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рд╕рд░реНрд╡рд░ рдкрд░ .css рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рд╕рд┐рд░реНрдл рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рдЖрдк .css рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдк рд╕реНрдЯрд╛рдЗрд▓ рд╣рд╛рдЗрдбреНрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдЙрдЪрд┐рдд SSR рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд░реИрдЬрд╝рд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкреНрд░реЛрдбрдХреНрд╢рди рд╕рд░реНрд╡рд░ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдкрдиреЗ HTML рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдареАрдХ рд╣реИ, рд░реИрдЬрд╝рд▓ рдХреЗ рд╕рд╛рде рд╢рд╛рдирджрд╛рд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдм рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдСрдбрд┐рдЯ рдХрд░рдиреЗ рдФрд░ рд╡рд╛рдкрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

рдмреЗрд╢рдХ, рдХрд┐рд╕реА рднреА "рдЦрд╛рд▓реА" (рд░рд┐рдХреНрдд рдирд╣реАрдВ, рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ) рдПрд╕рдИрдУ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдЪреАрдЬрд╝ рд╣реИ: рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдкреГрд╖реНрда рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП componentDidMount рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЬрд▓реНрджреА рд╕реЗ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк curl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдЖрдкрдХреЛ рдкреНрд░реАрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП After.js рдЬреИрд╕рд╛ рдХреБрдЫ рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ рдЖрдк рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдЯреИрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдмрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрджрд┐ 1000ms рдХреЗ рдирд┐рд╢рд╛рди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рдЦрд╛рд▓реА рдкреГрд╖реНрда рд╣реИ? рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдПрдХ рдЖрдЗрдХрди рдлрд╝реЙрдиреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛ рд░рд╣реА рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдпрд╣ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд▓реЛрдб рдкрд░ рдЗрди рдЦрд╛рд▓реА рдЦрд╛рд▓реА рд╡рд░реНрдЧреЛрдВ рдХреЛ рджрд┐рдЦрд╛рддреА рд╣реИ ...

screen shot 2019-02-11 at 9 57 30 am

рдЖрд╣, рдореЗрд░реЗ рд╕рднреА рдХрд╕реНрдЯрдо рдлреЛрдВрдЯ рдмрд╣реБрдд рдмрд╛рдж рдореЗрдВ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдЕрдкрдиреЗ рдлреЛрдВрдЯ рдХреЛ CSS'@font-face {} рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

@font-face {
  font-family: 'SFProText';
  font-display: auto;
  src: url('fonts/SFPro/SF-Pro-Display-Regular.otf') format('truetype');
  font-weight: normal;
  font-style: normal;
}

@jaredpalmer рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореЗрд░реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреЗрдЬ рдореЗрдВ рдлрд╝реЙрдиреНрдЯреНрд╕ рдФрд░ рдПрд╕реЗрдЯ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВред

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрдЕрдк рдореЗрдВ рдХреЛрдИ webpack.config рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдЬреЛрдбрд╝реА рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд░реЗрдкреЛ рд╕реЗ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдЕрднреА рдЖрдкрдХреЗ рд░реЗрдкреЛ рд╕реЗ рдХреЙрдкреА рд▓реА рд╣реИ рдФрд░ рдПрдирдкреАрдПрдо рдореЙрдбреНрдпреВрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдлрд┐рд░ рдореИрдВрдиреЗ рдПрдирдкреАрдПрдо рд╕реНрдЯрд╛рд░реНрдЯ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдХрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред
рдХреБрдЫ рднреА рдЬреЛ рдореИрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рд╕реЗ рдЪреВрдХ рдЧрдпрд╛ рдпрд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдирдИ рд╡реЗрдмрдкреИрдХ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░реЗрдВред

рдореЗрд░реА App.css рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ ..
@рдлреЙрдиреНрдЯ рдлрд╝реЗрд╕ {
рдлрд╝реЙрдиреНрдЯ-рдкрд░рд┐рд╡рд╛рд░: 'рд░реЛрдмреЛрдЯреЛ-рдорд╛рдзреНрдпрдо';
src: url(./static/fonts/Roboto-Medium-webfont.eot");
src: url(./static/fonts/Roboto-Medium-webfont.eot?#iefix") format("embedded-opentype"), url(./static/fonts/Roboto-Medium-webfont.woff") format("woff"), url(./static/fonts/Roboto-Medium-webfont.ttf") format("truetype"); }

@рдлреЙрдиреНрдЯ рдлрд╝реЗрд╕ {
рдлрд╝реЙрдиреНрдЯ-рдкрд░рд┐рд╡рд╛рд░: 'рд░реЛрдмреЛрдЯреЛ-рдирд┐рдпрдорд┐рдд';
src: url(./static/fonts/roboto-regular-webfont.eot");
src: url(./static/fonts/roboto-regular-webfont.eot?#iefix") format("embedded-opentype"), url(./static/fonts/roboto-regular-webfont.woff") format("woff"), url(./static/fonts/roboto-regular-webfont.ttf") format("truetype"); }

рдзрдиреНрдпрд╡рд╛рдж рдЗрдирдбрд╡реЗрди :)

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

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

MaxGoh picture MaxGoh  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jcblw picture jcblw  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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

sebmor picture sebmor  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ