рдореЛрдмрд╛рдЗрд▓ рджреНрд╡реАрдк рдХреНрдпрд╛ рд░рд╣рддрд╛ рд╣реИ

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░ред рдореЗрд░рд╛ рдирд╛рдо рдореИрдХреНрд╕ рдбрд┐рдЧрдЯрд░реЗрд╡ рд╣реИ (рдореЗрд░рд╛ рдпрд╣рд╛рдВ рдХреЛрдИ рдЦрд╛рддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдореЗрд░рд╛ рдЯреНрд╡рд┐рдЯрд░ рд╣реИ: @suprMax рдФрд░ рд╕рд╛рдЗрдЯ maxdegterev.name )ред рд╣рдордиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореЛрдмрд╛рдЗрд▓ рд╕рд╛рдЗрдЯ рдХрд╛ рдПрдХ рдирдпрд╛ рд╢рд╛рдВрдд рд╕рдВрд╕реНрдХрд░рдг рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рд╣реИред рдЕрдм рдореИрдВ рдЖрдкрдХреЛ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛








рдореБрдЦреНрдп рдЖрдзрд╛рд░


рдПрдХ рдирдИ рдореЛрдмрд╛рдЗрд▓ рд╕рд╛рдЗрдЯ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП, рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреБрд░рд╛рдиреЗ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдерд╛ред рдЗрди рдкрддреНрд░реЛрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдпрд╣ рдЕрднреА рднреА http://ostrovok.ru/m рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХрдм рддрдХ рдЪрд▓реЗрдЧрд╛ред рдкреБрд░рд╛рдиреА рд╕рд╛рдЗрдЯ рдиреЗ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд╛рдо рд▓рд┐рдпрд╛ред рд╡рд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдУрдЯреАрдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдПрдХ рд╣реА рдмреИрдХ-рдПрдВрдб (Django), рдПрдХ рдорд╛рдирдХ рдореАрдбрд┐рдпрд╛ рдЬрдирд░реЗрдЯрд░, рд╕рд░рд▓ HTML рдЯреЗрдореНрдкрд▓реЗрдЯ (рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб), рдЕрдВрдбрд░рд╕реНрдХреЛрд░, SCSS рдФрд░ рдирд┐рдпрдорд┐рдд JavaScipt рдкрд░ рдХреБрдЫ JavaScipt рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рдо рд╕рдм рд╕реМ рдмрд╛рд░ рдЗрд╕ рд╕реЗ рдЧреБрдЬрд░реЗ, рдпрд╣ рд╕рдм рдмрд╣реБрдд рдЙрдмрд╛рдК рд╣реИред

рдирдИ рд╕рд╛рдЗрдЯ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдереЗ:

рдпрд╣ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рд╣реБрдЖ рд╣реИ рдХрд┐ рд╕рд╛рдЗрдЯ рдХреЛ рд╣рдореЗрд╢рд╛ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдЗрд╕ рдкрд░ рд░реЛрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдРрд╕рд╛ рдкреНрд░рдпреЛрдЧ рд▓рдЧрддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдВ рдбрд┐рдЬрд╛рдЗрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдпрд╛ рдерд╛, рд╕рдкрд╛рдЯ (рдЖрдИрдУрдПрд╕ 7 рд╢реИрд▓реА, рдлреИрд╢рдиреЗрдмрд▓!)ред рдЗрд╕рд▓рд┐рдП, рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рди рд╣реЛрдВ рдХрд┐ рд░рдВрдЧ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрд╕реНрдерд┐рддрд┐, рджреНрд╡реАрдк рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИред

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

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




рдореБрдЭреЗ рд╕рдВрдкрддреНрддрд┐ рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХрд░рдиреА рдкрдбрд╝реАред рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рд╢рд╛рдВрдд рд╣реЛ рдЬрд╛рдП, рдЬреИрд╕реЗ рд░реЗрд▓ рдкрд░ред рдПрд╕реЗрдЯ-рд░реИрдХ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд▓рд╛, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреЗрдПрд╕, рд╕реАрдПрд╕рдПрд╕ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬреЗрдб рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рдХрд╛рдо рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╡рд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рддреА рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдореИрдВрдиреЗ app.templates рдЪреБрдирд╛)ред рд╡рд╣ рдкреВрд░реНрд╡-рд╕рдВрдХрд▓рди рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд┐рд░рджрд░реНрдж рдХреЛ рднреА рд▓реЗрддрд╛ рд╣реИ, 2 рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рд╕реНрдиреИрдХреНрд╕ (Sprockets) рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рд╕рд┐рдХ NodeJS рд╕рдВрд╕реНрдХрд░рдг (Browserify)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, NodeJS рдПрдХ рдирдИ рдмрд╛рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ:

рдЙрдк-рдпреЛрдЧ:


рдХрд╛рд░реНрдп рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлреИрд╢рдиреЗрдмрд▓, рдпреБрд╡рд╛ рдФрд░ рдордЬрд╝реЗрджрд╛рд░ рдерд╛, рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛


рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреИрд╕реЗ рдЖрдпреЛрдЬрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ред рдПрдХ рддрд╕реНрд╡реАрд░ рдПрдХ рд╣рдЬрд╛рд░ рд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ:


рдореИрдВ рдмреИрдХрдмреЛрди рдФрд░ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ред рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдЬрд╛рд░реЛрдВ рд▓реЗрдЦ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдореИрдВ рдореЙрдбреНрдпреВрд▓ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд┐рдпрд╛, рддрд╛рдХрд┐ рдкрд╛рдЧрд▓ рди рд╣реЛред

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

рдЕрдВрдд рдореЗрдВ, рдпрд╣ рдореЗрд░реА рдореБрдЦреНрдп app.cfi рдлрд╝рд╛рдЗрд▓ рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рд╣реИ:
  #= require ../../data/app.config.js #= require ../helpers.js #= require app.utils.js #= require_tree modules #= require router.coffee #= require_tree models #= require_tree collections #= require_tree views app = _.extend(@app, Backbone.Events) # ... # Layout modules app.size = new app.modules.Size() # Data modules app.geo = new app.modules.Geo() app.user = new app.modules.User() app.analytics = new app.modules.Analytics() # Modals and extra views app.overlay = new app.modules.Overlay() app.modal = new app.modules.Modal() # Router relies heavily on stuff above app.router = new app.Router() # ... Backbone.history.start(pushState: true, hashChange: false) 

рдпрд╣рд╛рдБ helpers.js рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреИрдХ-рдПрдВрдб рдкрд░ рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЛрдбрд┐рдВрдЧ рдСрд░реНрдбрд░ рдЗрд╕рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреГрд╢реНрдп) рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреЛрдИ рдХрд╛рдо рдирд╣реАрдВ рдерд╛, рдФрд░ рдЬрдм рддрдХ рдореИрдВрдиреЗ Backbone.history.start рдХреЛ рдлреЛрди рдХрд┐рдпрд╛, рддрдм рддрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдФрд░ рдШрдЯрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрдореЛрд░реА рдореЗрдВ рдереЗ, рдЗрд╕рд▓рд┐рдП рд░рд╛рдЙрдЯрд░ рдЕрдкрдирд╛ рдХрд╛рдо, рдХреЙрд▓ рд╡реНрдпреВ рдЖрджрд┐ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред

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

  .my-awesome-block width: 100px height: 100px margin: (@width / 2) auto line-height: @height 

рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рд╡рд┐рдХреНрд░реЗрддрд╛ рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ? рд╣рдо рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХреА рдПрдХ рднрдпрд╛рдирдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

  .my-awesome-block box-sizing: border-box transition: all .2s ease 

рд╕реНрдЯрд╛рдЗрд▓рд╕ рд╕реНрд╡рдпрдВ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд╢реНрд░рдг рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рд╕рдорд╛рди рдирд╛рдо рдХреЗ рд╕рд╛рде рдЧреБрдг рдкрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд░рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдм рд╡рд┐рдХреНрд░реЗрддрд╛ рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХреЛ рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реАрдорд╛-рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рд▓рд┐рдП (рдЬреЛ, рд╡реИрд╕реЗ, рд╕рдЪ рд╣реИ), рддреЛ рдЖрдк рдмрд╕ рдПрдХ рдорд┐рдХреНрд╕рд┐рди рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рднреА рдирд╣реАрдВ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд▓рдЧрднрдЧ рд╕реМ рдмрд╛рд░ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИред рдЦреИрд░, рдореЗрд░рд╛ app.styl рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг:

  @import 'config' @import 'includes/reset.css' @import 'includes/fonts.css' @import 'includes/mixins' @import 'plugins/iswipe' @import 'plugins/zepto.sidebarify' @import 'plugins/zepto.calendar.css' @import 'plugins/zepto.input.numselect.css' @import 'plugins/zepto.listselect.css' @import 'plugins/zepto.textarea_autogrow' @import 'partials/partial_date' @import 'partials/partial_spinner' // ... 

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдорд┐рд╢реНрд░рд┐рдд рдЖрдпрд╛рдд рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕рдордп рдПрдХрдорд╛рддреНрд░ рджреЛрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдорд┐рдХреНрд╕рд┐рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдХреЙрд▓ рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рд╣реИ:

  html, body // lol! noselect plz body, select, input, button, textarea color: #4b5c66 font: normal 14px Helvetica, Arial, sans-serif line-height: 1.4em //... 

рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╣рдореЗрд╢рд╛ рд╕рд┐рде рдХреА рдмреБрд░реА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЛ рд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ ред 146% рдЧрд╛рд░рдВрдЯреА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрдХреНрд╖рд╛рдПрдВ рдХрднреА рднреА рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдВрдЧреА, рдореИрдВрдиреЗ SMACSS рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдареАрдХ рд╣реИ, рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИред рд╡рд╣ рд╕рдм рдХреБрдЫ рдЬреЛ рдкреГрд╖реНрда рдХреА рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдФрд░ рд╕рдВрдХреНрд░рдордг рдХреЗ рджреМрд░рд╛рди рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдЙрдкрд╕рд░реНрдЧ l (рд▓реЗрдЖрдЙрдЯ) рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореЗрд░реЗ рдкрд╛рд╕ p (рдкреЗрдЬ), b рдХреЗ рдЕрдВрджрд░ рдмреНрд▓реЙрдХ (рдмреНрд▓реЙрдХ) рдкреЗрдЬ рдЖрджрд┐ рд╣реИрдВред рдпрджрд┐ рдХрд┐рд╕реА рддрддреНрд╡ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдирд┐рд╣рд┐рдд рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рд╡рд░реНрдЧ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдирд╛рдо рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рджреЗрдЧрд╛ред рдпрд╣ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓ рд╡рд░реНрдЧ рд╣рдореЗрд╢рд╛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдпрд╣рд╛рдБ рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

  .p-awesomepage .pa-header // styles .pah-soopermenulink color: hotpink .pa-content // styles .pa-loading // styles .pa-title // styles 

рдЗрд╕ рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд▓рд┐рдП:
  .p-awesomepage header.pa-header wow, header! .pa-content .pa-title my awesome title .pa-loading .pa-title loading is being loaded 

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

рдЬреЗрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рдирд╛ рд╣реИред рдпрд╣ рдПрдХ рдЦрд╛рдХрд╛ рдЗрдВрдЬрди рд╣реИред рдЬрд┐рд╕рдиреЗ рд╕реНрд▓рд┐рдо рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╡рд╣реА рд╣реИред рд╕рдорд░реНрдерди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдЖрдВрд╢рд┐рдХ рд╣реИред рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рд╣реЗрд▓реНрдкрд░реНрд╕ рдХреЛ рдЬрдирд░рд▓ рд╣реЗрд▓реНрдкрд░реНрд╕.рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ред рдпрджреНрдпрдкрд┐ рдЖрдк рдЕрдкрдирд╛ рдкрдВрдЬреАрдХрд░рдг рдХрд░рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА: рдорд╛рд░реНрдХрдбрд╛рдЙрдиред

рдереЛрдбрд╝рд╛ рддреИрдирд╛рддреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


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

  task 'update', '[VPS]: Update current state with new from repo', -> console.log('[Cake]: Pulling updates from repo') exec('git pull', (error, stdout, stderr) -> unless error console.log('[Cake]: Installing npm packages') exec('npm install', (error, stdout, stderr) -> unless error console.log('[Cake]: Restarting forever') # exec('forever restartall') exec('killall forever') exec('killall nodejs') console.log('[Cake]: Cleaning up old assets') exec('find ./public/assets -regextype posix-egrep -regex ".*\.(js|css|gz|gzip)$" -delete') exec('cake forever') sendMail() else console.warn("[Cake]: Installation failed with error: #{error}") ) else console.warn("[Cake]: Update failed with error: #{error}") ) task 'deploy', '[DEV]: Deploy current repo state to dev VPS', -> console.log('[Cake]: Connecting to VPS mobota@mobota-dev.ostrovok.ru && running update') exec('ssh mobota@mobota-dev.ostrovok.ru \'cd /var/www/mobota && cake update\'', (error, stdout, stderr) -> if error console.warn("[Cake]: Deploy failed with error: #{error}") else console.log('[Cake]: Deployed!') ) 

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

рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рд╛рд╣рд╛-рд╕рд╛рдордиреЗ рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдмрд╣реБрдд рдЖрд▓рд╕реАред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдереЗ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдПрдкреАрдЖрдИ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдореЛрдЪрд╛ + рдЪреЗрдЬ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗред рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫрд╛ рд░рд┐рдкреЛрд░реНрдЯрд░:

(рдореИрдВ рдкрд╛рд░реНрдХ рдореЗрдВ рдмреИрдард╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реБрдкрд░ рдлрд╛рд╕реНрдЯ рдирд╣реАрдВ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЧрд┐рд░ рдЧрдП рд╣реИрдВ)

рдпрд╣ рд╕рдм рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЛрдмрд╛рдЗрд▓ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛рдВ рд╣реИред


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

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


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

рдбреЗрд╕реНрдХрдЯреЙрдк, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╡рд┐рдкрд░реАрдд рдореЛрдмрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╛рд╕ рдмреЛрдирд╕:


рдирд┐рд╖реНрдХрд░реНрд╖


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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ GitHub рдкрд░ рд╕рд╛рдЗрдЯ рд╕реЗ рдХреБрдЫ рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛, рдЗрд╕реЗ рдЕрдкрдиреЗ рджрдо рдкрд░ рджреЗрдЦрдирд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рд╕рднреА рдХреЛ рд╢реБрднрдХрд╛рдордирд╛рдПрдБред

Source: https://habr.com/ru/post/In183746/


All Articles