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

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдЙрди рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЖрдзреБрдирд┐рдХ рддрдХрдиреАрдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдирдХреА рдХреНрд╖рдорддрд╛ рдЪреМрдЦрдЯреЗ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рд╕реЗ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред рд╡реИрд╕реЗ, рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк, рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрддреНрдпрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдврд╛рдВрдЪреЗ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЕрдиреНрдп рдмреБрдирд┐рдпрд╛рджреА рд╡реЗрдм рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╡реЗ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рджрд╛рдпрд░реЗ рддрдХ рд╕реАрдорд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╡реНрдпрд╛рдкрд╛рд░ рдореЗрдВ рдЙрддрд░реЗрдВ, рд╣рдо рдЙрди рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
тЦН рдПрдкреНрд▓реАрдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдкреНрд░рдпреЛрдЬреНрдп рдХреА рдЙрдЪреНрдЪ рдЧрддрд┐ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
- рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдРрдк рд╢реЗрд▓ред
- PRPL рдкреИрдЯрд░реНрди (рдкреБрд╢, рд░реЗрдВрдбрд░, рдкреНрд░реА-рдХреИрд╢, рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ)ред
System рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо
рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рд╣рдореЗрдВ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдПрдХ рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреНрд░рдгрд╛рд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рд╡реЗрдмрдкреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВрдЧреЗ:
- ES6 рдФрд░ рдЧрддрд┐рд╢реАрд▓ рд╕рдВрд╕рд╛рдзрди рдЖрдпрд╛рдд рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред
- рдПрд╕рдПрдПрд╕рдПрд╕ рдФрд░ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдердиред
- рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдСрдкрд░реЗрд╢рди рдХрд╛ рдЕрд▓рдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиред
- рд╕реЗрд╡рд╛ рдХрд░реНрдорд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред
тЦН рдЙрдиреНрдирдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рд╣рдо рдЖрдзреБрдирд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдиреНрдпреВрдирддрдо рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╣рдореЗрдВ рд╡рд╣ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╕рд╡рд╛рд▓ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:
- рдореЙрдбреНрдпреВрд▓ред
- рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЗ (рдСрдмреНрдЬреЗрдХреНрдЯ рд╢рд╛рдмреНрджрд┐рдХ, рдХрдХреНрд╖рд╛рдПрдВ)ред
- рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рддред
- рддреАрд░ рдХрд╛рд░реНрдпред
- рдЦрд╛рдХрд╛ рд╢рд╛рдмреНрджрд┐рдХред
рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП, рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛
рдкреНрд░рдЧрддрд┐рд╢реАрд▓ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ (PWA) рдХреЗ рдЖрдЧрдорди рдиреЗ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдирдП рд╡рд╛рд╕реНрддреБ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рдЖрдЧрдорди рдореЗрдВ рдпреЛрдЧрджрд╛рди рджрд┐рдпрд╛ рд╣реИред рдЗрд╕рдиреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреЗрдЬреА рд╕реЗ рд▓реЛрдб рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рдРрдк рд╢реЗрд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рдкреАрдЖрд░рдкреАрдПрд▓ рдкреИрдЯрд░реНрди рдХрд╛ рд╕рдВрдпреЛрдЬрди рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдирд┐рдпрдорд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╕рдорд╛рди рддреЗрдЬ рдФрд░ рдЙрддреНрддрд░рджрд╛рдпреА рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред
тЦН App Shell рдФрд░ PRPL рдХреНрдпрд╛ рд╣реИ?
рдРрдк рд╢реЗрд▓ рдПрдХ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рдкреИрдЯрд░реНрди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреАрдбрдмреНрд▓реНрдпреВрдП рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд╛рдЗрдЯ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдПрдХ рдиреНрдпреВрдирддрдо рд░рд╛рд╢рд┐ рд╕рд╛рдЗрдЯ рдХреЗ рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред рдЗрди рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдЖрд╡реЗрджрди рдХреЗ рдкрд╣рд▓реЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рд╕рдВрд╕рд╛рдзрди рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рднреА рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо PRPL рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
- рдкреБрд╢ - рд╕реНрд░реЛрдд рдорд╛рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрд╕рд╛рдзрди рднреЗрдЬрдирд╛ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, HTTP / 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред
- рд░реЗрдВрдбрд░ - рдореВрд▓ рдорд╛рд░реНрдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред
- рдкреНрд░реА-рдХреИрд╢ - рд╢реЗрд╖ рдорд╛рд░реНрдЧреЛрдВ рдпрд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдХреИрд╢рд┐рдВрдЧред
- рдЖрд▓рд╕реА рд▓реЛрдб - "рдЖрд▓рд╕реА" рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░)ред
рдХреЛрдб рдореЗрдВ рдРрдк рд╢реИрд▓ рдФрд░ PRPL рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдРрдк рд╢реЗрдк рдФрд░ рдкреАрдЖрд░рдкреАрдПрд▓ рдкреИрдЯрд░реНрди рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рд╡реЗрдм рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЙрдиреНрдирдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдХреЛрдб рд╢реЗрд▓ рдкреИрдЯрд░реНрди рдХреНрдпрд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <style> html { box-sizing: border-box; } *, *:after, *:before { box-sizing: inherit; } body { margin: 0; padding: 0; font: 18px 'Oxygen', Helvetica; background: #ececec; } header { height: 60px; background: #512DA8; color: #fff; display: flex; align-items: center; padding: 0 40px; box-shadow: 1px 2px 6px 0px #777; } h1 { margin: 0; } .banner { text-decoration: none; color: #fff; cursor: pointer; } main { display: flex; justify-content: center; height: calc(100vh - 140px); padding: 20px 40px; overflow-y: auto; } button { background: #512DA8; border: 2px solid #512DA8; cursor: pointer; box-shadow: 1px 1px 3px 0px #777; color: #fff; padding: 10px 15px; border-radius: 20px; } .button { display: flex; justify-content: center; } button:hover { box-shadow: none; } footer { height: 40px; background: #2d3850; color: #fff; display: flex; align-items: center; padding: 40px; } </style> <title>Vanilla Todos PWA</title> </head> <body> <body> <header> <h3><font color="#3AC1EF">тЦН<a class="banner"> Vanilla Todos PWA </a></font></h3> </header> <main id="app"></main> <footer> <span>┬й 2019 Anurag Majumdar - Vanilla Todos SPA</span> </footer> <script async src="<%= htmlWebpackPlugin.files.chunks.main.entry %>"></script> <noscript> This site uses JavaScript. Please enable JavaScript in your browser. </noscript> </body> </body> </html>
рдЗрд╕ рдХреЛрдб рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдРрдк рд╢реЗрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ "рд╢реЗрд▓" рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЗрд╕рдХрд╛ "рдХрдВрдХрд╛рд▓" рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдиреНрдпреВрдирддрдо рдорд╛рд░реНрдХрдЕрдк рд╣реИред рд╣рдо рдЗрд╕ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ (рдмрд╛рдж рдореЗрдВ, рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдЬреЛ рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рджреМрд░рд╛рди рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╣реИрдВ, рдЬреИрд╕реЗ
<!-- тДЦ1 -->
)ред
- рдЯреБрдХрдбрд╝рд╛ рдирдВред резред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ HTML рдкреЗрдЬ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп CSS рдХреЛрдб рдХреЛ рд╕реАрдзреЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
- рдЯреБрдХрдбрд╝рд╛ рдирдВрдмрд░ реиред рдпрд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ "рд╢реЗрд▓" рд╣реИред рдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдмрд╛рдж рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛
app
( <main id="app"></main>
) рдХреЗ рд╕рд╛рде main
рдЯреИрдЧ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реИред - рдЯреБрдХрдбрд╝рд╛ рдирдВрдмрд░ рейред рдпрд╣рд╛рдВ рдкрдЯрдХрдерд╛рдПрдВ рдЖрддреА рд╣реИрдВред
async
рд╡рд┐рд╢реЗрд╖рддрд╛ рдЖрдкрдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдкрд╛рд░реНрд╕рд░ рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░рдиреЗ рджреЗрддреА рд╣реИред
рдЖрд╡реЗрджрди рдХреЗ рдКрдкрд░ "рдХрдВрдХрд╛рд▓" PRPL рдкреИрдЯрд░реНрди рдХреЗ рдкреБрд╢ рдФрд░ рд░реЗрдВрдбрд░ рдЪрд░рдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреГрд╖реНрда рдХрд╛ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП HTML рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЬрд▓реНрджреА рд╕реЗ рдЙрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЦреЛрдЬ рд▓реЗрддрд╛ рд╣реИ рдЬреЛ рдкреГрд╖реНрда рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЧрдИ рд╣реИрдВ (рдЦрдВрдб рд╕рдВрдЦреНрдпрд╛ 3), рдЬреЛ рдбреЛрдо (рд░реЗрдВрдбрд░ рдХрджрдо рдкрд░) рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдХреЗ рдореВрд▓ рдорд╛рд░реНрдЧ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ "рд╢реЗрд▓" рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдкреЗрдЬ рдХреЛ рд░реАрд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рд▓рд╛рдн рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ рдПрдХ рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдХрдВрдХрд╛рд▓ рдФрд░ рдЖрд╡реЗрджрди рдХреЗ рд╕рднреА рд╕реНрдерд┐рд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
var staticAssetsCacheName = 'todo-assets-v3'; var dynamicCacheName = 'todo-dynamic-v3';
рдЖрдЗрдП рдЗрд╕ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред
- рдЯреБрдХрдбрд╝рд╛ рдирдВред резред рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреА
install
рдШрдЯрдирд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рд╕реЗ рд╕реНрдереИрддрд┐рдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИред рдпрд╣рд╛рдВ рдЖрдк рдкрд╣рд▓реЗ рдорд╛рд░реНрдЧ ("рдХрдВрдХрд╛рд▓" рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЕрдиреБрд╕рд╛рд░) рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди (рд╕реАрдПрд╕рдПрд╕, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЪрд┐рддреНрд░, рдФрд░ рдЗрд╕реА рддрд░рд╣) рдХреЗ "рдХрдВрдХрд╛рд▓" рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдХреИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдмрди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рдирд╛ рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдХрд╛рдо рдХрд░ рд╕рдХреЗред рд╕рдВрд╕рд╛рдзрди рдХреИрд╢рд┐рдВрдЧ, рдХрдВрдХрд╛рд▓ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛, PRPL рдкреИрдЯрд░реНрди рдХреЗ рдкреНрд░реА-рдХреИрд╢ рдХрджрдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред - рдЯреБрдХрдбрд╝рд╛ рдирдВрдмрд░ реиред рдПрдХ
activate
рдШрдЯрдирд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдкреНрд░рдпреБрдХреНрдд рдХреИрд╢ activate
ред - рдЯреБрдХрдбрд╝рд╛ рдирдВрдмрд░ рейред рдХреЛрдб рдХреА рдпреЗ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдХреИрд╢ рд╕реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рддреА рд╣реИрдВ рдпрджрд┐ рд╡реЗ рд╡рд╣рд╛рдВ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпрджрд┐ рд╕рдВрд╕рд╛рдзрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрд╕рд╛рдзрди рдЕрднреА рддрдХ рдХреИрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрд╕рд╛рдзрди рдХреЛ рдирдП рдЕрд▓рдЧ рдХреИрд╢ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреИрд╢ рдбрд╛рдпрдиреЗрдорд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ рдХреЛ рдорджрдж рдХрд░рддреА рд╣реИред
рдЖрдЬ рддрдХ, рд╣рдордиреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рд╕рдорд╛рдзрд╛рдиреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдЕрднреА рддрдХ рдмрд╛рдд рдирд╣реАрдВ рдХреА рд╣реИ рд╡рд╣ рд╣реИ PRPL рдкреИрдЯрд░реНрди рдХрд╛ рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ рдЪрд░рдгред рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдгрд╛рд▓реА
рдПрдХ рдЕрдЪреНрдЫрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЕрдХреЗрд▓реЗ, рдПрдХ рд╕рднреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд┐рдирд╛, рдПрдХ рдЧреБрдгрд╡рддреНрддрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ Webpack рдХрд╛рдо рдореЗрдВ рдЖрддрд╛ рд╣реИред рдирд┐рд░реНрдорд╛рдг рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ (рдмрдВрдбрд▓рд░реНрд╕) рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдЙрдкрдХрд░рдг рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП - рдкрд╛рд░реНрд╕рд▓ рдФрд░ рд░реЛрд▓рдЕрдкред рд▓реЗрдХрд┐рди рд╡реЗрдмрдкреИрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рдо рдЬреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ, рд╡рд╣ рдЕрдиреНрдп рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЬрд┐рди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд╣рдо рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рд╡реЗ рд╡реЗрдмрдкреИрдХ рдХреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рдпрд╣ рдЖрдкрдХреЛ рд╣рдорд╛рд░реЗ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рд░ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдмрдВрдбрд▓ рдФрд░ рдЙрд╕рдХреЗ рдЙрдЪрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ-рдЗрди рдХрд╛ рдЪрдпрди рдПрдХ рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрджрдо рд╣реИред рдЗрди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред
рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рд╡реЗрдмрдкреИрдХ рдЬреИрд╕реЗ рдЯреВрд▓ рдХреЛ рдЯреНрдпреВрди рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рд╛рде рдореЗрдВ рдХреБрдЫ рдЕрдЪреНрдЫреА рдорджрдж рдХрд░рдирд╛ рд╕рд╣рд╛рдпрдХ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЧрд╛рдЗрдб, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд╕рдВрдмрдВрдзрд┐рдд рднрд╛рдЧ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛,
рдпрд╣ рд▓реЗрдЦ рдерд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рд╡реЗрдмрдкреИрдХ рдореЗрдВ рдХреЛрдИ рдХрдард┐рдирд╛рдИ рд╣реИ - рддреЛ рдЙрд╕рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВред рдЕрдм рд╣рдо рдЙрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдкреНрд░рдгрд╛рд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╣реА рдмрд╛рдд рдХреА рдереАред
тЦНSupport ES6 рдФрд░ рдЧрддрд┐рд╢реАрд▓ рд╕рдВрд╕рд╛рдзрди рдЖрдпрд╛рдд рдХреНрд╖рдорддрд╛рдПрдВ
рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯрд░, рдмреИрдмреЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ ES6 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ ES5 рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмреЗрдмреЗрд▓ рдХреЛ рд╡реЗрдмрдкреИрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
@babel/core
@babel/plugin-syntax-dynamic-import
@babel/preset-env
babel-core
babel-loader
babel-preset-env
рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред
.babelrc
рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП
.babelrc
рдлрд╝рд╛рдЗрд▓:
{ "presets": ["@babel/preset-env"], "plugins": ["@babel/plugin-syntax-dynamic-import"] }
рдмрд╛рдмреЗрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╕рдордп, рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреА
presets
рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ ES6 рдХреЛ ES5 рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдмрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░
plugins
рд▓рд╛рдЗрди рддрд╛рдХрд┐ рд╡реЗрдмрдкреИрдХ рдореЗрдВ рдбрд╛рдпрдирд╛рдорд┐рдХ рдЖрдпрд╛рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдЗрд╕ рддрд░рд╣ рд╕реЗ
webpack.config.js
рд╕рд╛рде рдмреИрдмреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣рд╛рдВ
webpack.config.js
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдПрдХ рд╕реНрдирд┐рдкреЗрдЯ рд╣реИ -
webpack.config.js
):
module.exports = { entry: {
рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ
rules
рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЯреНрд░рд╛рдВрд╕рдлрд╝рд┐рд▓реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдмрд▓
babel-loader
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
тЦНSASS рдФрд░ рд╕реАрдПрд╕рдПрд╕ рд╕рдорд░реНрдерди
рд╣рдорд╛рд░реЗ SASS рдФрд░ CSS рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
sass-loader
css-loader
style-loader
MiniCssExtractPlugin
рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╡реЗрдмрдкреИрдХ рд╕реЗрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдХреИрд╕реА рджрд┐рдЦрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрди рдкреНрд▓рдЧ рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
module.exports = { entry: {
рд▓реЛрдбрд░
rules
рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╣рдо CSS рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП
plugins
рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рджрд░реНрдЬ рдХреА рдЬрд╛рддреА рд╣реИред
And рд╡рд┐рдХрд╛рд╕ рдореЛрдб рдФрд░ рдЖрд╡реЗрджрди рдХреЗ рдЕрд╕рд▓реА рдХрд╛рдо рдХреА рдЕрд▓рдЧ рд╕реЗрдЯрд┐рдВрдЧ
рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд┐рд▓реНрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдПрдХ рдЕрддреНрдпрдВрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рддреЗ рд╕рдордп, рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рдХреЗ рдЙрддреНрдкрд╛рджрди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдЙрди рдкреИрдХреЗрдЬреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ рдЬреЛ рдпрд╣рд╛рдВ рдХрд╛рдо рдЖрддреЗ рд╣реИрдВ:
clean-webpack-plugin
: dist
рдлреЛрд▓реНрдбрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПредcompression-webpack-plugin
: dist
рдлреЛрд▓реНрдбрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПредcopy-webpack-plugin
: рд╕реНрдереИрддрд┐рдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓реЗрдВ, рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рддрдХредhtml-webpack-plugin
: dist
рдлреЛрд▓реНрдбрд░ рдореЗрдВ index.html
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПредwebpack-md5-hash
: dist
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИрд╢рд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдПредwebpack-dev-server
: рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдерд╛рдиреАрдп рд╕рд░реНрд╡рд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдпрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдореА
webpack.config.js
рдлрд╝рд╛рдЗрд▓ рдХреИрд╕реА рджрд┐рдЦрддреА рд╣реИ:
const path = require('path'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const WebpackMd5Hash = require('webpack-md5-hash'); const CleanWebpackPlugin = require('clean-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const CompressionPlugin = require('compression-webpack-plugin'); module.exports = (env, argv) => ({ entry: { main: './src/main.js' }, devtool: argv.mode === 'production' ? false : 'source-map', output: { path: path.resolve(__dirname, 'dist'), chunkFilename: argv.mode === 'production' ? 'chunks/[name].[chunkhash].js' : 'chunks/[name].js', filename: argv.mode === 'production' ? '[name].[chunkhash].js' : '[name].js' }, module: { rules: [ { test: /\.js$/, exclude: /node_modules/, use: { loader: 'babel-loader' } }, { test: /\.scss$/, use: [ 'style-loader', MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader' ] } ] }, plugins: [ new CleanWebpackPlugin('dist', {}), new MiniCssExtractPlugin({ filename: argv.mode === 'production' ? '[name].[contenthash].css' : '[name].css' }), new HtmlWebpackPlugin({ inject: false, hash: true, template: './index.html', filename: 'index.html' }), new WebpackMd5Hash(), new CopyWebpackPlugin([
рдкреВрд░реЗ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рджреЛ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИред рдпрд╣рд╛рдБ
argv
рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдЬрдм
webpack
рдпрд╛
webpack-dev-server
рдХрдорд╛рдВрдб
webpack
рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐
package.json
рдореЗрдВ рдЗрди рдХрдорд╛рдВрдбреНрд╕ рдХрд╛ рд╡рд┐рд╡рд░рдг рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ
package.json
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓:
"scripts": { "build": "webpack --mode production && node build-sw", "serve": "webpack-dev-server --mode=development --hot", },
рдирддреАрдЬрддрди, рдЕрдЧрд░ рд╣рдо
npm run build
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрддреНрдкрд╛рджрди рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдк
npm run serve
рдХрдорд╛рдВрдб
npm run serve
, рддреЛ рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЖрд╡реЗрджрди рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдЧрд╛ред
рдЙрдкрд░реЛрдХреНрдд рдлрд╝рд╛рдЗрд▓ рдХреЗ
plugins
рдФрд░
devServer
рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдФрд░ рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрд╡рд░ рдХреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред
new CopyWebpackPlugin
рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рдЖрдк рдЙрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрд░реЛрдд рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдХреЙрдкреА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
ред рд╕реЗрд╡рд╛ рдХрд░реНрдореА рдХрд╛ рдЪрдпрди рдХрд░рдирд╛
рд╣рдо рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдЙрдмрд╛рдК рдХрд╛рд░реНрдп рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЕрд╕реЗрдВрдмрд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬреЛ
dist
рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдвреВрдВрдврддреА рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд░реНрд╡рд┐рд╕ рд╡рд░реНрдХрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдХреИрд╢ рдХрдВрдЯреЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рддреА рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕рд░реНрд╡рд┐рд╕ рд╡рд░реНрдХрд░ рдлрд╛рдЗрд▓ рдХреЛ
dist
рдлреЛрд▓реНрдбрд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡реЗ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдмрд╛рдд рдХреА рдереА рдЬрдм рд╕реЗрд╡рд╛ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣рд╛рдБ
build-sw.js
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╣реИ:
const glob = require('glob'); const fs = require('fs'); const dest = 'dist/sw.js'; const staticAssetsCacheName = 'todo-assets-v1'; const dynamicCacheName = 'todo-dynamic-v1';
рдЖрдЗрдП рдЗрд╕ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред
- рдЯреБрдХрдбрд╝рд╛ рдирдВред резред рдпрд╣рд╛рдВ
staticAssetsCacheFiles
рдлреЛрд▓реНрдбрд░ рдХреА рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА staticAssetsCacheFiles
рдРрд░реЗ рдореЗрдВ рд░рдЦреА рдЧрдИ рд╣реИред - рдЯреБрдХрдбрд╝рд╛ рдирдВрдмрд░ реиред рдпрд╣ рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдмрд╛рдд рдХреА рд╣реИред рддреИрдпрд╛рд░ рдХреЛрдб рдмрдирд╛рддреЗ рд╕рдордп, рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо
dist
рдлрд╝реЛрд▓реНрдбрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЙрд╕рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдордп рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддреА рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдирд┐рд░рдВрддрд░ stringFileCachesArray
ред - рдЯреБрдХрдбрд╝рд╛ рдирдВрдмрд░ рейред рдпрд╣рд╛рдВ,
serviceWorkerScript
рд╕реНрдерд┐рд░рд╛рдВрдХ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╡рдирд┐рд░реНрдорд┐рдд рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛрдб рдХреЛ dist/sw.js
рдкрд░ рд╕реНрдерд┐рдд рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП,
node build-sw
рдХрдорд╛рдВрдб
node build-sw
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
webpack --mode production
рдХрдорд╛рдВрдб рдХреЗ
webpack --mode production
рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддреБрдд рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдкрдЯрдХрдерд╛ рдлрд╝рд╛рдЗрд▓ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддреА рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЖрд╡реЗрджрди рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдХрд╛рд░реНрдпрд╢реАрд▓ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдСрдлрд╝рд▓рд╛рдЗрди рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╡рд┐рд╢реЗрд╖ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ
рд╡рд░реНрдХрдмреЙрдХреНрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░
рдбрд╛рд▓реЗрдВ ред рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рдЕрдиреБрдХреВрд▓рди рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╣реИрдВред
Used рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди
рдпрд╣рд╛рдВ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛
package.json
рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдк рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
{ "name": "vanilla-todos-pwa", "version": "1.0.0", "description": "A simple todo application using ES6 and Webpack", "main": "src/main.js", "scripts": { "build": "webpack --mode production && node build-sw", "serve": "webpack-dev-server --mode=development --hot" }, "keywords": [], "author": "Anurag Majumdar", "license": "MIT", "devDependencies": { "@babel/core": "^7.2.2", "@babel/plugin-syntax-dynamic-import": "^7.2.0", "@babel/preset-env": "^7.2.3", "autoprefixer": "^9.4.5", "babel-core": "^6.26.3", "babel-loader": "^8.0.4", "babel-preset-env": "^1.7.0", "clean-webpack-plugin": "^1.0.0", "compression-webpack-plugin": "^2.0.0", "copy-webpack-plugin": "^4.6.0", "css-loader": "^2.1.0", "html-webpack-plugin": "^3.2.0", "mini-css-extract-plugin": "^0.5.0", "node-sass": "^4.11.0", "sass-loader": "^7.1.0", "style-loader": "^0.23.1", "terser": "^3.14.1", "webpack": "^4.28.4", "webpack-cli": "^3.2.1", "webpack-dev-server": "^3.1.14", "webpack-md5-hash": "0.0.6" } }
рдЕрдЧрд░ рд╣рдо рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡реЗрдмрдкреИрдХ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдЙрдкрдХрд░рдг рдЕрдХреНрд╕рд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЕрдХреНрд╕рд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдирдП рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬрдм рдпрд╣ рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдирдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рди рдХрд┐ рд╕реНрд╡рдпрдВ рдкреИрдХреЗрдЬреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рд▓реЗрдХрд┐рди рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рддрдереНрдп рдХреА рдмрд╛рдд рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдКрдкрд░ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдпрд╛ рд╡рд╣ рдкреИрдХреЗрдЬ рдирд┐рднрд╛рддрд╛ рд╣реИред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдзреБрдирд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддрд╛ рд╣реИ - рдЪрд╛рд╣реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ, рд░реВрдЯрд┐рдВрдЧ, рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдпрд╛ рдореМрдЬреВрджрд╛ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬреИрд╕реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦрдирд╛ рд╣реЛред
рдЕрдм рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдиреНрдпреВрдирддрдо рддрдХрдиреАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдореМрдЬреВрджрд╛ рдЪреМрдЦрдЯреЗ рдпрд╛ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЗ рдЗрд╕ рд╕реЗрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
тЦН рдореЙрдбреНрдпреВрд▓
рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ ES6 рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддреЗ рд╣реБрдП, рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ES6 рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрдХреНрд╕рд░ рд▓реЛрдХрдкреНрд░рд┐рдп рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдЬреИрд╕реЗ рдХрд┐ рдХреЛрдгреАрдп рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореМрдЬреВрдж рд╡реЗрдмрдкреИрдХ рдХреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдпрд╣
app.js
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
import { appTemplate } from './app.template'; import { AppModel } from './app.model'; export const AppComponent = {
рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЗ
рдШрдЯрдХ рдирд┐рд░реНрдорд╛рдг рд╣рдорд╛рд░реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдпрд╣рд╛рдВ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдЬреИрд╕реЗ рдХреБрдЫ рдЖрдзреБрдирд┐рдХ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рд╛рдзрд╛рд░рдг рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдпрд╛ рддреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╢рд╛рдмреНрджрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛ рд╡рд░реНрдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ ES6 рдорд╛рдирдХ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ ред
рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рд╕ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВред рдЪреАрдЬреЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдордЬрдмреВрддреА рд╕реЗ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╣рд╛рдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрд╣рд╛рдБ
app.js
рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рдЙрдирдХрд╛ рдЖрд╡реЗрджрди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
import { appTemplate } from './app.template'; import { AppModel } from './app.model'; export const AppComponent = { init() { this.appElement = document.querySelector('#app'); this.initEvents(); this.render(); }, initEvents() { this.appElement.addEventListener('click', event => { if (event.target.className === 'btn-todo') { import( './todo/todo.module') .then(lazyModule => { lazyModule.TodoModule.init(); }) .catch(error => 'An error occurred while loading Module'); } }); document.querySelector('.banner').addEventListener('click', event => { event.preventDefault(); this.render(); }); }, render() { this.appElement.innerHTML = appTemplate(AppModel); } };
рдпрд╣рд╛рдВ рд╣рдо
AppComponent
рдШрдЯрдХ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЖрдк рддреБрд░рдВрдд рдЖрд╡реЗрджрди рдХреЗ рдЕрдиреНрдп рднрд╛рдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдк рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдИрдПрд╕ 6 рдХрдХреНрд╖рд╛рдУрдВ рдпрд╛ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдПрдХ рд╢реИрд▓реА рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдШреЛрд╖рдгрд╛ рдХреЗ рдХрд░реАрдм рд╣реИред рдпрд╣рд╛рдВ, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
тЦН рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐, PRPL рдкреИрдЯрд░реНрди рдХреА рдмрд╛рдд рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЕрднреА рддрдХ рдЗрд╕рдХреЗ рдЙрд╕ рднрд╛рдЧ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рдкрд╛рдП рд╣реИрдВ, рдЬреЛ L (рд▓реЗрдЯрд░ рд▓реЛрдбрд┐рдВрдЧ) рдЕрдХреНрд╖рд░ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ? рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рд╡рд╣ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдШрдЯрдХреЛрдВ рдпрд╛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реЗрд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ PRPL рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдЙрд╕рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ "рдХрдВрдХрд╛рд▓" рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбрд╛рдпрдиреЗрдорд┐рдХ рдЖрдпрд╛рдд рдХреЗ рджреМрд░рд╛рди, рд╕рдВрд╕рд╛рдзрди рдХреИрд╢ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдирд╣реАрдВред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рд╣рдордиреЗ рдХреЗрд╡рд▓ рдРрдк рд╢реЗрд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╢реЗрд╖ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдВрд╕рд╛рдзрди, рдЕрд░реНрдерд╛рдд,
chunks
рдлрд╝реЛрд▓реНрдбрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреИрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдбрд╛рдпрдирд╛рдорд┐рдХ рд░рд┐рд╕реЛрд░реНрд╕ рдЖрдпрд╛рдд рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ
AppComponent
рдШрдЯрдХ рдХреЗ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдмрдЯрди рдХреЗ рдХреНрд▓рд┐рдХ рдЗрд╡реЗрдВрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд╣рдо
initEvents()
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред рдЕрд░реНрдерд╛рддреН, рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
btn-todo
рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ
btn-todo
рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдПрдХ рдирд┐рдпрдорд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдП рдЧрдП рдШрдЯрдХреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред
рддреАрд░ рдХрд╛рд░реНрдп рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╢рд╛рдмреНрджрд┐рдХ
рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВ, рдЬрдм рдЖрдкрдХреЛ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддреАрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЖрдкрдХреЛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдЬреЛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИред рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
export const appTemplate = model => ` <section class="app"> <h3><font color="#3AC1EF">тЦН ${model.title} </font></h3> <section class="button"> <button class="btn-todo"> Todo Module </button> </section> </section> `;
appTemplate
рдлрд╝рдВрдХреНрд╢рди
appTemplate
рдПрдХ рдореЙрдбрд▓ (
model
рдкреИрд░рд╛рдореАрдЯрд░) рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ HTML рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореЙрдбрд▓ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЧрдарди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╢рд╛рдмреНрджрд┐рдХ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрди рдмрд╣реБрд╕реНрддрд░реАрдп рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИредрдпрд╣рд╛рдВ рдШрдЯрдХреЛрдВ рдХрд╛ рдЦрд╛рдХрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдПрдХ рддреНрд╡рд░рд┐рдд рдЯрд┐рдк рджреА рдЧрдИ рд╣реИред рдЗрд╕рдореЗрдВ reduce()
HTML рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рдгреА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ : const WorkModel = [ { id: 1, src: '', alt: '', designation: '', period: '', description: '' }, { id: 2, src: '', alt: '', designation: '', period: '', description: '' },
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдХреЛрдб рдХреЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХреЛ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдЗрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣рд╛рдВ рдЙрдиреНрд╣реАрдВ рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрдзреБрдирд┐рдХ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИрдВредрдЖрдЗрдП рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ:model
. тАФ , reduce()
, .model.reduce
, HTML-, , . , , , тАФ .
. , , тАФ .
Todo-, . .
.
. , , , .
-
-, , -, . , , . , JavaScript -, .
, .
-. Lighthouse.
рдкрд░рд┐рдгрд╛рдо
, , JavaScript, . , , , .
рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! -, ?
