
рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рд╕реЗ рдкрд╣рд▓реЗ
рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ
, рдореИрдВрдиреЗ рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЛ рд╕рд╣реА рд░реВрдк рд╕реЗ рджреЗрдЦрд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЕрдм рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдСрдЯреЛ рд▓реЛрдбрд░ (рдЗрд╕рдХреЗ рдмрд╛рдж рдПрдЖрд░) рдХрд╣реВрдВрдЧрд╛ред рдореИрдВ рд▓реЗрдЦ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХрд╛ рд╢реАрд░реНрд╖рдХ рдЗрддрд┐рд╣рд╛рд╕ рдХреЗ рд▓рд┐рдП рдкреБрд░рд╛рдирд╛ рд░рдЦреВрдВрдЧрд╛ред
рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдЗрд╕ рд╕рд░рд▓рддрдо рд▓реЛрдбрд░ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ 2 рд╕рдкреНрддрд╛рд╣ рдмрд╛рдж, рдореИрдВ рд╡реЗрдмрдкреИрдХ рдФрд░ рд╡реЗрдмрдкреИрдХ-рджреЗрд╡-рд╕рд░реНрд╡рд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рдЬрд┐рд╕реЗ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдореЗрд░реА "рдмрд╛рдЗрдХ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкреВрд░реНрдг рдЗрдирдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рдирдИ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рддреЗ рд╕рдордп, рдореИрдВрдиреЗ "рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдкреБрд░рд╛рдиреЗ, рдЧрд╛рд░рдВрдЯреАрдХреГрдд рдХрд╛рд░реНрдпрд╢реАрд▓ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЖрдк рдХрднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХреНрдпрд╛ рд╣реИред"
рдкреБрд░рд╛рдиреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЖрдпрд╛рдд / рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдпрд╣ рддрдереНрдп рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕реНрддрд░ рдкрд░ рд╕рднреА .js рдлрд╛рдЗрд▓реЗрдВ рдмреЙрдбреА рдХреЗ рдЕрдВрджрд░ index.html рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд░реНрдХ рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рд╕рднреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИрдВред
рдЙрд╕реА рд╕рдордп, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛, рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рд╛рдл-рд╕реБрдерд░реЗ рд▓рд┐рдмрд╛рд╕ рдбреИрдбреА рдореЗрдВ рд╣реИрдВред
Package.json рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рдЕрд╡рдореВрд▓реНрдпрди (рд╕рд╛рде рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ) рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд▓рдЧрднрдЧ рд╢реБрджреНрдз рдереАред рдХреЗрд╡рд▓ рд╡реНрдпрдХреНрдд, рдПрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдХреЗрдЬ рдФрд░ рдореЗрд░рд╛ рдЬреЛрдбрд╝рд╛ рд╕реЙрдХреЗрдЯ .io рдФрд░ рдиреЛрдб-рд╡реЙрдЪред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреБрд░рд╛рдиреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд╛рдлреА рд╕рд░рд▓ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдПрдХ рдирдпрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдХреБрд▓ рдФрд░ рдЙрдирдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдЦреЛрдЬ рд╕реЗ рдЬрдЯрд┐рд▓ рдерд╛ред
рдирддреАрдЬрддрди, рд▓рдХреНрд╖реНрдп рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде package.json рдХреЛ рдЖрдмрд╛рдж рдХрд┐рдпрд╛, webpack рдЗрдирдкреБрдЯ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ entry.js рдФрд░ entry.html рдмрдирд╛рдпрд╛ред .Js рдореЗрдВ, рдореИрдВрдиреЗ рдЙрди рд╕рднреА
рдЪреАрдЬреЛрдВ рдХреЗ рд╕рднреА-рд╕рднреА рдЖрдпрд╛рдд рдХрд┐рдП
рдЬреЛ рдореИрдВ рд╕рдмрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдХреЗ
рд▓рд┐рдП рдкрд╣реБрдВрдЪ рдЧрдпрд╛ , рдФрд░ entry.html рдХреЗрд╡рд▓ index.html рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ProvPlugin рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдореИрдВрдиреЗ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╡реЗрдмрдкреИрдХ рд╕рд╣реА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ "рдорд╛рдВрдЧ рдкрд░" рд╕реНрдерд╛рдирд╛рдкрдиреНрди рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЦреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрдпрд╛рдд рдХреА рдХрдореА рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдФрд░ рдореВрд▓ рд╕реВрдЪрдХрд╛рдВрдХ рд░рдЦрд╛ред
рдпрд╣ рд╕рд┐рджреНрдзрд╛рдВрдд рдореБрдЭреЗ рдкреБрд░рд╛рдиреЗ рдХрд▓реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рдерд╛ рдФрд░ - рдЬреЛ рдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ - рдореЗрд░реЗ рдСрдЯреЛ рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдореБрдЭреЗ рдПрдХ рдЬрдЧрд╣ рдорд┐рд▓реА рдЬрд╣рд╛рдБ рдирд┐рд░реНрдпрд╛рдд рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рд╣рдорд╛рд░рд╛ рдПрдХ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдорд┐рдиреА-рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдареАрдХ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдмрдкреИрдХ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ; рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреБрд░рд╛рдиреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП, index.html рдореЗрдВ рдмрд╕ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЦреИрд░, рдХреБрдЫ рднреА рдирд╣реАрдВ, рдореИрдВ рдЗрд╕реЗ рдХреЛрдгреАрдп рдХреА рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реВрдВред рдХреЙрдкреА + рдЕрддреАрдд + рдЫреЛрдЯреЗ рдмрджрд▓рд╛рд╡ рдФрд░ - рд╡реЙрдЗрд▓рд╛ - рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
рдореИрдВ рдПрдХ рдирдИ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ - рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрд░рдорд╢рдГ рд╡реЗрдмрдкреИрдХ-рджреЗрд╡-рд╕рд░реНрд╡рд░, рднреАред
рдореИрдВ рдЕрдкрдиреЗ рдСрдЯреЛ рд▓реЛрдбрд░ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ - рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
рдХреИрдл!
рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рдЦрддреНрдо рд╣реЛ рдЧрдИ рд╣реИ, рдЖрдЧреЗ рдмрдврд╝реЗрдВред
рдХрдерд╛рдирдХред
рд╡реЗрдмрдкреИрдХ-рджреЗрд╡-рд╕рд░реНрд╡рд░ рдкрд░ рдХреБрдЫ рджрд┐рдиреЛрдВ рддрдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЕрднреА рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рд▓рдВрдмрд╛ рд╣реИред
рдФрд░ рд╡рд╣ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬ рд╣реИ, рдмрдЪрдд рдХреЗ рдмрд╛рдж 3-4 рд╕реЗрдХрдВрдб рд╕рдЪрдореБрдЪ рд░рд┐рдмреВрдЯ рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрд░реЗ рдПрдЖрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЕрд╕реЗрдВрдмрд▓реА рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг, ctrl + s рдХреЗ рдмрд╛рдж рд░рд┐рдмреВрдЯ рд╣реЛрддрд╛ рд╣реИред
рдирддреАрдЬрддрди, рдкрд╣рд▓реЗ рддреЛ рдореИрдВ рджреЛрдиреЛрдВ рдЙрдкрдХрд░рдг рдЪрд╛рд▓реВ рд░рдЦрддрд╛ рд╣реВрдВ, рдФрд░ рдлрд┐рд░ рдореИрдВ рдХреЗрд╡рд▓ рдПрдЖрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВред
рдЕрдкрдиреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ 4 рдХрд╛рд░рдгреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреА:
1. рдПрдЖрд░ рддреЗрдЬ рд╣реИред
2. рдпрд╣ рдЙрд╕рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрдкреВрд░реНрдг рддреНрд░реБрдЯрд┐ рд╕реНрдЯреИрдХ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдПрдХ wds рдмрдВрдбрд▓ рдЯреВрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
3. рдЬрдм рдореИрдВ HTML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп HTML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рдкрд░ Wds рдкреБрдирдГ рдЖрд░рдВрдн рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдореЗрд░рд╛ - рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдпрд╣ рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдкреБрдирдГ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ - рдкреБрдирдГ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ wds рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдкреИрд░ рдореЗрдВ рд╣реА рдЧреЛрд▓реА рдорд╛рд░рддрд╛ рд╣реИред
4. рдЦреИрд░, рд╡реНрдпрдХреНрддрд┐рдкрд░рдХред рдореБрдЭреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рд░реНрд╡рд░реЛрдВ рд╕реЗ рдЕрдХреНрд╕рд░ рдкреАрдЫреЗ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреЛрд░реНрдЯ рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓рд╛рдПрдВред AR рдХреА рд╕рд░реНрд╡рд┐рд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП 1 рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ
тАЬexampleтАЭ: тАЬnode ./server.jsтАЭ
рдЬреЛ рдЪрд▓рддрд╛ рд╣реИ
npm run example 1.100 9001
рдпрд╛
npm run example 1.101 9002
рдЬрд╣рд╛рдВ 1.101 рд╕рд░реНрд╡рд░, рдФрд░ рдореЗрд░реА рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 9001 рдкреЛрд░реНрдЯ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ, рдЖрдкрдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдирд╛рдореЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рд▓рд┐рдЦреЗрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред
рдЪрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВред рдЖрд░рдЬреАрд╡реАрд╡реА рдФрд░ рдореИрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрдиреНрд╣реЗрдВ рд╕рд░реНрд╡рд░ рдХреЗ рдЕрдВрджрд░ рдЦреБрдж рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реВрдВред рдЬреЗрдПрд╕
рдЬреИрд╕рд╛ рдХрд┐ wds рдХреЗ рд▓рд┐рдП, рдЕрдм рддрдХ рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛, рдореБрдЭреЗ рдореБрдЦреНрдп рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдкрдбрд╝реЗред рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореЗрд░реЗ рд▓рд┐рдП рд▓рд┐рдЦрд┐рдд рдмрд╛рдЗрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдЦреИрд░, рдЪреВрдВрдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред
рд╡рд┐рдХрд▓реНрдк рдХреНрдпрд╛ рд╣реИрдВ?
1. рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп, рдкреГрд╖реНрда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд░реЛрд▓ рдХрд░реЗрдВред
2. рдЗрд╕реА рддрд░рд╣, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА .html
3. js рдХреЗ рд▓рд┐рдП location.reload () рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
4. 1-2 рдХреЗ рд╕рдорд╛рди, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА .js
5. рджреЛрдиреЛрдВ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ рдХреА рдУрд░ index.html + entry.html рд╕реЗ рджреВрд░ рд╣реЛ рдЬрд╛рдУред рдпрд╛рдиреА рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдирд╛ рдЬрд╣рд╛рдВ рд╡реЗрдмрдкреИрдХ рдкрд░ рдЬрд╛рдирд╛ рдореЗрд░реЗ рдПрдЖрд░ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
6. рд╕реНрдХреЗрди рд╕рдорд░реНрдерди рдХреЛ рдХрд╕ рд▓реЗрдВ
рд╕реАрдПрд╕рдПрд╕ рд╢рд╛рдВрдд рд╣реИ, рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдПред
HTML рднреА рдордЬреЗрджрд╛рд░ рд╣реИ, рдмрд╕ рдЖрдкрдХреЛ рдЬреЛ рдЪрд╛рд╣рд┐рдПред
рд╕реНрдерд╛рди .reload ()ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдЦрд░рд╛рдм рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрд▓рдмреНрдз рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред
рдЬреЗрдПрд╕ - рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдореИрдВ рдХрд┐рддрдирд╛ рдкреНрд░рдпрд╛рд╕ рдЦрд░реНрдЪ рдХрд░реВрдВрдЧрд╛, рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИ?
5 рдФрд░ 6 - рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреА рд╕реНрдореИрдХ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЧрддрд┐ рдХреЗ рдЬрд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖: рдЖрдЗрдЯрдо 4 - 6 рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдЖрдЗрдЯрдо 1 - 2, рдЖрдЗрдЯрдо 3 рдХрд░реВрдВрдЧрд╛ рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реВрдВрдЧрд╛ред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдХрд╛рд░реНрдп рдХрдард┐рди рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдмрдЯреБрдХ рдореЗрдВ рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реВрдВ! рдореИрдВ рдЗрд╕реЗ рддреЛрдбрд╝рддрд╛ рд╣реВрдВ рдФрд░ рдЪрд░рдгреЛрдВ рдореЗрдВ рдЬрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрдмрдХрд┐ рдореИрдВ рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдЪрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ (рд╣рд╛рдВ, рдареАрдХ рд╣реИ! рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА html рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЦреНрдп рдФрд░ рдореБрдЦреНрдп)
рдореБрдЦреНрдп рднрд╛рдЧред
рд╕реАрдПрд╕рдПрд╕ред
рдХрд╛рд░реНрдп рдореЗрдВ рджреЛ рдЙрдк-рдХрд╛рд░реНрдп рд╣реЛрддреЗ рд╣реИрдВ:
рд╕рдВрд╢реЛрдзрд┐рдд рдлрд╝рд╛рдЗрд▓ 1.Findред
2. рдкреГрд╖реНрда рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░реЗрдВред
рдореИрдВ рджреВрд╕рд░реЗ рд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВред рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдЬреЛ рдореИрдВ Google рдкрд░ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЖрдо рддреМрд░ рдкрд░ рдмрд┐рдирд╛ рдкреГрд╖реНрда рдкреБрдирдГ рд▓реЛрдб рдХрд┐рдП рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдХреИрд╕реЗ рдкреБрдирдГ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдХрдИ рд▓реЗрдЦреЛрдВ рдХреЗ рдмреАрдЪ рдЖрддрд╛ рд╣реВрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ
рдпрд╣ рдореБрдЭреЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддрд╛ рд╣реИ
рд▓реЛрдЧ рд╕реАрдПрд╕рдПрд╕ рд╕реЗ рд╕рд┐рд░ рддрдХ рд╕рднреА рд▓рд┐рдВрдХ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдПрдЪрдЖрд░рдИрдЖрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдПрдХ рдирдП рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ рдЙрдирдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдФрд░ рдореЗрд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред
рдореЗрд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА 2 рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВред
server.js рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рд░реНрд╡рд░ + рдЕрдкрд╡рд╛рдж рдЬрд╛рдБрдЪ + рдкрд░рд┐рд╡рд░реНрддрди рдЯреНрд░реИрдХрд┐рдВрдЧ рд▓реЙрдЬрд┐рдХ + рд╕реЙрдХреЗрдЯ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рд╡рд░реНрддрди рднреЗрдЬрдирд╛ рд╣реИред
watch.js - рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ред рд╕рд░реНрд╡рд░ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрджреЗрд╢ + location.reload () рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЕрдм watch.js рдореЗрдВ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ css рдФрд░ css рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдирд╛рдо рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХрд╛ рддрд░реНрдХ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдореБрдЭреЗ рдмрд╣реБрдд рдХреЛрдб рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдЗрд╕ рддрд░рд╣ рдирд┐рдХрд▓рд╛:
server.js const express = require('express'), http = require('http'), watch = require('node-watch'), proxy = require('http-proxy-middleware'), app = express(), server = http.createServer(app), io = require('socket.io').listen(server), exeptions = ['git', 'js_babeled', 'node_modules', 'build', 'hotreload'], // , , backPortObj = { /* , back*/ }, address = process.argv[2] || /* back*/, localHostPort = process.argv[3] || 9080, backMachinePort = backPortObj[address] || /* back */, isHotReload = process.argv[4] || "y", // "n" || "y" target = `http://192.168.${address}:${backMachinePort}`, str = `Connected to machine: ${target}, hot reload: ${isHotReload === 'y' ? 'enabled' : 'disabled'}.`, link = `http://localhost:${localHostPort}/`; server.listen(localHostPort); app .use('/bg-portal', proxy({ target, changeOrigin: true, ws: true })) .use(express.static('.')); if (isHotReload === 'y') { watch('./', { recursive: true }, (evt, name) => { let include = false; exeptions.forEach(item => { if (`${name}`.includes(item)) include = true; }) if (!include) { console.log(name); io.emit('change', { evt, name, exeptions }); }; }); }; console.log(str); console.log(link);
watch.js const socket = io.connect(); const makeCorrectName = name => name.replace('\\','\/'); const findCss = (replaced) => { const head = document.getElementsByTagName('head')[0]; const cssLink = [...head.getElementsByTagName('link')] .filter(link => { const href = link.getAttribute('href'); if(href === replaced) return link; }) return cssLink[0]; }; const replaceHref = (cssLink, replaced) => { cssLink.setAttribute('href', replaced); return true; }; const tryReloadCss = (name) => { const replaced = makeCorrectName(name); const cssLink = findCss(replaced); return cssLink ? replaceHref(cssLink, replaced) : false; }; socket.on('change', ({ evt, name, exeptions }) => { const isCss = tryReloadCss(name); if (!isCss) location.reload(); });
рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдиреЛрдб-рд╡реЙрдЪ рдкреИрдХреЗрдЬ рдореБрдЭреЗ рд╕рдВрд╢реЛрдзрд┐рдд рдлрд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдлреЙрд░реНрдо рдкрде \ _ рдореЗрдВ \ file.css рдкрд░ рднреЗрдЬрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ href рдореЗрдВ рдкрде рдХреЛ рдкрде / / to.css рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрд╕рдХреЗ рдкреВрд░реНрдг рдирд╛рдо рд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ; рдореБрдЭреЗ рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рд╕реНрд▓реИрд╢ рдХреЛ рд░рд┐рд╡рд░реНрд╕ рдореЗрдВ рдмрджрд▓рдирд╛ рдкрдбрд╝рд╛ред
рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
рд╣рд╛рд▓рд╛рдВрдХрд┐, 3 рд╕рдорд╕реНрдпрд╛рдПрдВ рдмрдиреА рд╣реБрдИ рд╣реИрдВред
1. рдСрдкреНрд╢рди рдХреНрд░реЛрдо рдХреЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрдврд╝рдд рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддреБрдореНрд╣реЗрдВ рдЦреЛрджрдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рд░ рднреА, рдорд▓реНрдЯреА-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдмрд╣реБрдд рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рдФрд░ рдпрд╣ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИ рдЬреЛ рдПрдХ рд╕реБрдзрд╛рд░ рд╣реИ), рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрднрд╡рддрдГ 2 рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рд╣реИред
2. рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реНрдорд╛рд░реНрдЯ рд╣реИ: рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреИрд╢ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рдмрджрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрджрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЙрд╕реА рдирд╛рдо рд╕реЗ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕рд╕реЗ рд▓рдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЛрдЧ рд╣рд░ рдмрд╛рд░ рдЕрдкрдирд╛ рдирд╛рдо рдмрджрд▓рддреЗ рд╣реИрдВред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмрд┐рдирд╛ рдХреНрд░реЛрдо рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
3. рдПрдХ рдирд╛рдо рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдпреЛрдЧ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╛рдиреА рдпрджрд┐ рдЖрдк рд▓рд┐рдВрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкрде рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ /ред), рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдореИрдЪ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред
./path/to/file! рдореЗрд░реЗ рдХреЛрдб рдХреЗ рддрд░реНрдХ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрде! рдФрд░ рдЗрд╕реЗ рднреА рдареАрдХ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореБрдЭреЗ рд╣рд░ рдмрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЛрдИ рдХреИрд╢рд┐рдВрдЧ рди рд╣реЛред
рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рд▓рд┐рдВрдХ рдХреА href рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ css рдлрд╝рд╛рдЗрд▓ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдпрд╣рд╛рдБ рдФрд░ рдкрдврд╝реЗрдВ
редрдКрдкрд░ рд▓рд┐рдВрдХ рдкрд░ рд▓реЛрдЧ рдмрд╣реБрдд рд╣реА рд╢рд╛рди рд╕реЗ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВ рдЙрдирдХрд╛ рд╡рд┐рдХрд▓реНрдк рд▓реЗрддрд╛ рд╣реВрдВ:
cssLink.setAttribute('href', `${hrefToReplace}?${new Date().getTime()}`);
рдЕрдЧрд▓рд╛ рдореБрдЭреЗ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐ 1 рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди рдорд┐рд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (рдЕрднреА рддрдХ рдЙрдирдХрд╛ рдЕрдзреНрдпрдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ):
const makeCorrectName = (name) => name .replace('\\', '/') .split('?')[0];
рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
рдЕрдЧрд▓рд╛, рдореБрдЭреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдореИрдВ рдирд┐рд░рдкреЗрдХреНрд╖, рд╕рд╛рдкреЗрдХреНрд╖ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдкрде рдХреЗ рдЬрд╛рджреВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ред рдореБрджреНрджреЗ рдХреА рдХреБрдЫ рдЧрд▓рддрдлрд╣рдореА рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рдареАрдХ рд╣реИред
Href рдХрд░рдиреЗ рдХрд╛ рдкрде 'ред', '/' рдпрд╛ рддреБрд░рдВрдд рдирд╛рдо рд╕реЗ рд╢реБрд░реВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ред
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ - index.html (рдФрд░ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ред Html) - рд╣рдореЗрд╢рд╛ (рдЖрдорддреМрд░ рдкрд░) рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдЬреБрдбрд╝реА рд╕реАрдПрд╕рдПрд╕ рдлрд╛рдЗрд▓реЗрдВ рд╣рдореЗрд╢рд╛ (рдЖрдорддреМрд░ рдкрд░) рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдХрд╣реАрдВ рднреА рд╣реЛрддреА рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░ - рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ - рдкрде рд╣рдореЗрд╢рд╛ рд╕рдорд╛рди рд╣реЛрдЧрд╛ (рдлрд╝реЛрд▓реНрдбрд░ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо), рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рд╡рд░реНрдг рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди рдХреЗ рд╕рд╛рде рднрд╛рдЧ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЗрди рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА '/' рдореЗрдВ, рдлрд┐рд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд╣рд▓реЗ рдмрд┐рдВрджреБ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рд╕рд░рдгреА рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореИрдВ рдПрдХ рд╕рдЯреАрдХ рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рддреБрд▓рдирд╛ рдХрд░реВрдВрдЧрд╛ред
рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
const findFullPathString = (path) => path .split('/') .filter((item) => item !== '.') .filter((item) => item) .join('');
рдореИрдВ рдХреЛрдб рдЪрд▓рд╛рддрд╛ рд╣реВрдБ, рдЪреАрдпрд░реНрд╕, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
рдПрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рдФрд░ рдПрдЬ рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЫрд┐рдкреА рдирд╣реАрдВ рдереА рдХрд┐ рдЗрд╕реЗ рдХрд╣рд╛рдВ рдЦреЛрдЬрд╛ рдЧрдпрд╛ рдерд╛ред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореЗрд░рд╛ рд╕реАрдПрд╕рдПрд╕ рдХреЛрдб рдПрдЬ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рдФрд░ рдореЗрд░реА рд▓рд╛рдкрд░рд╡рд╛рд╣реА рдХреЗ рдХрд╛рд░рдг, рдореИрдВрдиреЗ рдЕрднреА рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ред
рд╕рдорд╕реНрдпрд╛ рдбреЛрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдореЗрдВ рдЫрд┐рдкреА рд╣реБрдИ рдереАред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, DOM рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╕рд░рдгреА рдирд╣реАрдВ рд╣реИ; рддрджрдиреБрд╕рд╛рд░, рд╕рд░рдгреА рд╡рд┐рдзрд┐рдпрд╛рдБ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, рдХреБрдЫ рдХрд╛рдо, рдХреБрдЫ рдирд╣реАрдВ)ред
рдореИрдВ рдпрд╣ рдХрд░рддрд╛ рдерд╛:
const cssLink = [...head.getElementsByTagName('link')]
рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ рдПрдЬ рдЗрд╕ рдмрд╛рдд рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рдерд╛ред
рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ рдФрд░ рдЕрдм рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
const cssLink = Array.from(head.getElementsByTagName('link'))// special for IE
рднрд╛рдЧреЛ, рдЪреЗрдХ рдХрд░реЛ, рдХрд╛рдо рдХрд░реЛ!

рдЪрд┐рддреНрд░ рдЫреЛрдЯрд╛ рд╣реИ, рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реИред
рд╡рд╛рдо рдХреНрд░реЛрдо, рдХреЗрдВрджреНрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕, рд░рд╛рдЗрдЯ рдПрдЬред рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрдирдкреБрдЯ рдореЗрдВ рдПрдХ рдорд╛рди рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдпрд╣ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдкреГрд╖реНрда рдкреБрдирдГ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╕реАрдПрд╕рдПрд╕ рд▓рдЧрднрдЧ рддреБрд░рдВрдд рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рджреЗрд░реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмреАрдЪ рджреЗрд░реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред
рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, chromeDevTools рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рддреЗрдЬ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдКрдкрд░ / рдиреАрдЪреЗ рддреАрд░ рдХреЗ рд╕рд╛рде рдорд╛рд░реНрдЬрд┐рди рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд╕реАрдПрд╕рдПрд╕ рдПрдХ рд╕рдВрдкрд╛рджрдХ рд╕реЗ рднреА рддреЗрдЬ рдФрд░ рд╕рднреА рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдбреЗрдЯ рд╣реЛрддреА рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд▓реЗрдЦ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд╕рдордп рдореИрдВ рдЕрдкрдиреА рдмрд╛рдЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рд░рдВрддрд░ рдЖрдзрд╛рд░ рдкрд░ рд▓рдЧрднрдЧ 2 рд╕рдкреНрддрд╛рд╣ рддрдХ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрд╢реЛрдзрди рдХреЗ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ wds рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ devTools рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕реАрдПрд╕рдПрд╕ рдХреА рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ!
рдХреБрд▓, server.js рд╣реА рд░рд╣рддрд╛ рд╣реИ, рдФрд░ watch.js рдирд┐рдореНрди рд░реВрдк рд▓реЗрддрд╛ рд╣реИ:
watch.js const socket = io.connect(); const findFullPathString = (path) => path .split('/') .filter((item) => item !== '.') .filter((item) => item) .join(''); const makeCorrectName = (name) => name .replace('\\', '/') .split('?')[0]; const findCss = (hrefToReplace) => { const head = document.getElementsByTagName('head')[0]; const replacedString = findFullPathString(hrefToReplace); const cssLink = Array.from(head.getElementsByTagName('link'))// special for IE .filter((link) => { const href = link.getAttribute('href').split('?')[0]; const hrefString = findFullPathString(href); if (hrefString === replacedString) return link; }); return cssLink[0]; }; const replaceHref = (cssLink, hrefToReplace) => { cssLink.setAttribute('href', `${hrefToReplace}?${new Date().getTime()}`); return true; }; const tryReloadCss = (name) => { const hrefToReplace = makeCorrectName(name); const cssLink = findCss(hrefToReplace); return cssLink ? replaceHref(cssLink, hrefToReplace) : false; }; socket.on('change', ({ name }) => { const isCss = tryReloadCss(name); if (!isCss) location.reload(); });
рдмреНрдпреВрдЯреА!
рдЙрдкрд╕рдВрд╣рд╛рд░ред
рдЕрдЧрд▓рд╛ рдЪрд░рдг рдореИрдВ HTML рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдореЗрд░реА рджреГрд╖реНрдЯрд┐ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИред рдЪреЗрддрд╛рд╡рдиреА рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдгреАрдпрдЬ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рдЕрдкрдиреА рдЫреЛрдЯреА рд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд╕рд╛рде рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдФрд░ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЦреБрд╢реА рд╣реЛрдЧреА, рд╕рд╛рде рд╣реА HTML рдХреЗ рд╕рд╛рде рд╡рд┐рд╖рдп рдкрд░ рд╕реБрдЭрд╛рд╡ рдФрд░ рд▓реЗрдЦ рднреАред