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

рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓реЗрдЦрдХ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЬреЛ рдЕрднреА рдкреВрдЫреЗ рдЧрдП рдкреНрд░рд╢реНрди рдХреЗ рдкреНрд░рддрд┐ рд╕рдорд░реНрдкрд┐рдд рд╣реИрдВред рд╡рд╣ рдЬреЛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдердХрд╛ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рдФрд░ рдердХрд╛рдК рд╣реИред рдпрд╣рд╛рдВ рд╡рд╣ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рд╣реА рдЖрд╡реЗрджрди рд╣рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЕрд░реНрдерд╛рддреН, рдпрд╣рд╛рдБ рд╣рдо Prettier, ESLint, Husky, Lint-Staged, EditorConfig рдЬреИрд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╕реНрд╡рд░реВрдкрдг рдФрд░ рдХреЛрдб рд▓рд╛рдЗрдирд┐рдВрдЧ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд░рд┐рдПрдХреНрдЯ рд╡рд┐рдХрд╛рд╕ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рд╡реЗрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред 
рдпрд╣рд╛рдБ рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реИ рдЬрд╣рд╛рдБ, рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдБ рдЬреЛ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ рд╡рд╣ рд╕рдВрдХрд▓рд┐рдд рд╣реИред
рдЦреВрдмрд╕реВрд░рдд
рдкреНрд░реЗрдЯрд┐рдпрд░ рдПрдХ рдХреЛрдб рд╕реНрд╡рд░реВрдкрдг рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдареЛрд░-рдХреЛрдбрд┐рдд рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдХреЛрдб рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
рдкреНрд░реАрдЯреАрдпрд░ рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП рдХреЛрдб рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рддрд╛ рд╣реИIer Prettier рдХреА рддрд╛рдХрдд
рдпрд╣рд╛рдВ рдкреНрд░реАрдЯрд┐рдпрд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдЗрд╕ рдЙрдкрдХрд░рдг рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ:
- рдореМрдЬреВрджрд╛ рдХреЛрдб рдЖрдзрд╛рд░ рдХреЛ рдмрд╛рдВрдзрдирд╛ред рдкреНрд░реАрдЯреАрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рдХреЗ рдореИрдиреБрдЕрд▓ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдХреА 20,000 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╢реНрд░рдо рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВред
- Prettier рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдкреНрд░реЗрдЯрд┐рдпрд░ рдХреЛрдб рдХрд╛ рдкреНрд░рд╛рд░реВрдкрдг рдХрд░рддреЗ рд╕рдордп рд╢реИрд▓реА рдХреЗ рд▓рд┐рдП "рдФрд╕рдд", рдХрдо рд╕реЗ рдХрдо рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╣реИ, рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рдЗрд╕рдореЗрдВ рдпреЛрдЧрджрд╛рди рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдмрдирд╛рдпрд╛ рд╣реИ рдФрд░ рддреЗрдЬ рдХреЛрдиреЛрдВ рдХреЛ рд╕реБрдЪрд╛рд░реВ рдХрд┐рдпрд╛ рд╣реИред
- Prettier рдЖрдкрдХреЛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ, рди рдХрд┐ рдЗрд╕реЗ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВред рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрддрд╛ рд╣реА рдирд╣реАрдВ рдЪрд▓рддрд╛ рдХрд┐ рдХреЛрдб рдХреЛ рдлреЙрд░реНрдореЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рдФрд░ рдореЗрд╣рдирдд рд▓рдЧрддреА рд╣реИред рдкреНрд░реАрдЯреАрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдкреНрд░рд╛рд░реВрдкрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдп рдХреБрд╢рд▓рддрд╛, рдкреНрд░реАрдЯреАрдпрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, 10% рдХреА рд╡реГрджреНрдзрд┐ рд╣реБрдИред
- Prettier рд╢реБрд░реБрдЖрддреА рдорджрдж рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЧрдВрднреАрд░ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдЯреАрдо рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╢реБрд░реБрдЖрддреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ, рдФрд░ рдЖрдк рдЙрдирдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдЦрд┐рд▓рд╛рдл рдпреЛрдЧреНрдп рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рд┐рдЯрд┐рдпрд░ рдЖрдкрдХреА рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред
тЦНConfiguring Prettier
рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдирдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреНрд░реАрдЯрд┐рдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред 
app рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ, рдФрд░ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЬрд╛рдХрд░, рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ:
 npm init -y 
рдЗрд╕ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, 
npm package.json рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред
рдореИрдВ, рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ, 
yarn рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЖрдк 
npm рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Prettier рдХреЛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡рд┐рдХрд╛рд╕ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ 
prettier рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
 yarn add  
рдЗрд╕ рдЖрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдПрдХ 
package.json рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ 
package.json рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 { "name": "react-boiler-plate", "version": "1.0.0", "description": "A react boiler plate", "main": "src/index.js", "author": "Adeel Imran", "license": "MIT", "scripts": {   "prettier": "prettier --write src/**/*.js" }, "devDependencies": {   "prettier": "^1.14.3" } } 
рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ 
"prettier": "prettier тАФ write src/**/*.js" рд▓рд╛рдЗрди рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ 
"prettier": "prettier тАФ write src/**/*.js" рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рджред рдЗрд╕ рдмреАрдЪ, 
app рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ 
src рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВред рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, 
index.js рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЖрдк рдЗрд╕реЗ рдЬреЛ рдЪрд╛рд╣реЗрдВ рдирд╛рдо рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ (рдЗрд╕ рднрджреНрджреЗ рд░реВрдк рдореЗрдВ) рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВрдЧреЗ:
 let person =                     { name: "Yoda",               designation: 'Jedi Master '               };             function trainJedi (jediWarrion) { if (jediWarrion.name === 'Yoda') { console.log('No need! already trained'); } console.log(`Training ${jediWarrion.name} complete`)             } trainJedi(person)             trainJedi({ name: 'Adeel',             designation: 'padawan' }); 
рддреЛ, рдЗрд╕ рд╕рдордп рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 
src/app/index.js , рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЦрд░рд╛рдм рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рд╣реИред
рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░реЗрдВ? рдЦрд░рд╛рдм рд╕реНрд╡рд░реВрдкрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВ:
- рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рдХреЛрдб рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░реЗрдВред
- рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- рдЗрд╕реЗ рд╡реИрд╕реЗ рд╣реА рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВ (рдореИрдВ рдЖрдкрд╕реЗ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдирд╣реАрдВ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ)ред
рдореИрдВ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдЕрдм рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ, рдФрд░, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, 
package.json рдлрд╝рд╛рдЗрд▓ рдХреЗ 
scripts рдЕрдиреБрднрд╛рдЧ рдореЗрдВ Prettier рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╣рдо рдХреЛрдб рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 
app рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ prettier.config.js рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдкреНрд░реАрдпрд░рд┐рдпрд░ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо рдЬреЛрдбрд╝реЗрдВ:
 module.exports = { printWidth: 100, singleQuote: true, trailingComma: 'all', bracketSpacing: true, jsxBracketSameLine: false, tabWidth: 2, semi: true, }; 
рдЖрдЗрдП рдЗрди рдирд┐рдпрдореЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ:
- printWidth: 100- рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ 100 рдЕрдХреНрд╖рд░реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
- singleQuote: true- рд╕рднреА рджреЛрд╣рд░реЗ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЛ рдПрдХрд▓ рдЙрджреНрдзрд░рдг рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП Airbnb рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдб рджреЗрдЦреЗрдВред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдкрд╕рдВрдж рд╣реИ, рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВред
- trailingComma: 'all'- рд╡рд╕реНрддреБ рдХреА рдЕрдВрддрд┐рдо рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдмрд╛рдж рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рд╣реИред
- bracketSpacing: true- рд╡рд╕реНрддреБ рдХреЗ рд╢рд░реАрд░ рдХреЗ рдмреАрдЪ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдФрд░ рд╡рд╕реНрддреБ рд╢рд╛рдмреНрджрд┐рдХ рдореЗрдВ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ред рдпрджрд┐ рдпрд╣ рд╕рдВрдкрддреНрддрд┐- true, рддреЛ рд╡рд╕реНрддреБ рд╢рд╛рдмреНрджрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рд╡рд╕реНрддреБрдПрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреА:- { foo: bar }ред рдпрджрд┐- falseрд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛- false, рддреЛ рдРрд╕реЗ рдирд┐рд░реНрдорд╛рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдВрдЧреЗ:- {foo: bar}ред
- jsxBracketSameLine: false- рдЗрд╕ рдирд┐рдпрдо рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдмрд╣реБ-рдкрдВрдХреНрддрд┐ JSX рддрддреНрд╡реЛрдВ рдореЗрдВ рдкреНрд░рддреАрдХ рдХреЛ рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдкрд░ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдпрд╣ рдирд┐рдпрдо- trueрд╣реИ, рддреЛ рдХреЛрдб рдРрд╕рд╛ рджрд┐рдЦрддрд╛- true:
 <button className="prettier-class" id="prettier-id" onClick={this.handleClick}> Click Here </button> 
рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЕрдЧрд░ рдпрд╣ 
false :
 <button className="prettier-class" id="prettier-id" onClick={this.handleClick} > Click Here </button> 
- tabWidth: 2- рд╕рдВрд░реЗрдЦрдг рд╕реНрддрд░ рдкреНрд░рддрд┐ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
- semi: true- рдпрджрд┐ рдпрд╣ рдирд┐рдпрдо рд╕рд╣реА рдкрд░ рд╕реЗрдЯ- true, рддреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рд╕рднреА рдкреНрд░рд┐рдЯрд┐рдпрд░ рдирд┐рдпрдо рдЦреЛрдЬреЗрдВред
рдЕрдм рдЬрдм рдирд┐рдпрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рддреЛ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ:
 "prettier": "prettier  тАФ write src/**/*.js" 
рдЗрд╕ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдкреНрд░реАрдЯреАрдпрд░ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ 
src рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рднреА 
.js рдлрд╛рдЗрд▓реЗрдВ рдвреВрдВрдврддрд╛ рд╣реИред - 
--write рдзреНрд╡рдЬ рдЙрд╕реЗ рд╕реНрд╡рд░реВрдкрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рдкрд╛рдИ рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреЛ рд╕рд╣реА рдХрд░рддреЗ рд╣реИрдВред
рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБ:
 yarn prettier 
рдЗрд╕рдХреЗ рдмрд╛рдж рдРрд╕рд╛ рд╣реБрдЖ рд╣реИ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдЦрд░рд╛рдм рдлреЙрд░реНрдореЗрдЯ рдХреЛрдб рдХреЗ рд╕рд╛рдеред
Prettier рдХреЗ рд╕рд╛рде рдХреЛрдб рд╕реНрд╡рд░реВрдкрдг рдХрд╛ рдкрд░рд┐рдгрд╛рдордЗрд╕ рдкрд░ рд╣рдо рдорд╛рдиреЗрдВрдЧреЗ рдХрд┐ рдкреНрд░реАрдЯреАрдпрд░ рдХреЗ рд╕рд╛рде рд╣рдордиреЗ рд╕реЛрдЪрд╛ рдерд╛ред рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рд▓рд┐рдВрдЯрд░ рдХреАред
ESLint
рд▓рд╛рдЗрдирд┐рдВрдЧ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реНрдЯреИрдЯрд┐рдХ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╣реИ рдЬреЛ рдЕрдХреНрд╕рд░ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдпрд╛ рдХреЛрдб рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рд╢реИрд▓реА рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд▓рд┐рдВрдЯрд░ рд╣реИрдВ, рдХрднреА-рдХрднреА рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдХреЛрдбрд┐рдВрдЧ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд▓рд╛рдЗрдирд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИред рд▓рд╛рдЗрдирд┐рдВрдЧ рдХреА рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд╛ рдУрдкрди рд╕реЛрд░реНрд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ 
рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рдУрдкрди рд╕реЛрд░реНрд╕ рдЗрдВрдлреЙрд░реНрдореЗрд╢рди 
рдкреЗрдЬ рд╕реЗ рд▓реА рдЧрдИ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред
тЦН рдореБрдЭреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдирд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?
рдЪреВрдВрдХрд┐ 
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдордЬреЛрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рд▓рд┐рдЦрд╛ рдХреЛрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЧрдИ рднрд╛рд╖рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдб рдореЗрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рдЕрдиреНрдп рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рдХреЛрдб рдХреЗ рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдкрддрд╛ рдЪрд▓рддреА рд╣реИрдВред
ESLint рдЬреИрд╕реЗ 
рд▓рд┐рдВрдЯрд░ , рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд┐рдП рдмрд┐рдирд╛ рдХреЛрдб рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
Int ESLint рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдХрд░рдг рдХреНрдпреЛрдВ рд╣реИ?
рдЗрд╕ рдЦрдВрдб рдХреЗ рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╢реНрди рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдБ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ ESLint рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рддреЛ, рдХреЛрдб рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдо рдПрдХ рдЕрдЦрдВрдб рдкреИрдХреЗрдЬ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреА рдЬрд░реВрд░рдд рдХреА рд╣рд░ рдЪреАрдЬ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдЬреБрдбрд╝реА рд╣реЛ рд╕рдХрддреА рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд▓рд┐рдВрдЯ рдирд┐рдпрдо рд╕реНрд╡рд╛рдпрддреНрдд рд╣реИ, рдЗрд╕реЗ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЪрд╛рд▓реВ рдпрд╛ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдо рдХреЛ рдбреЗрд╡рд▓рдкрд░ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдЕрд▓рд░реНрдЯ рд╕реНрддрд░ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдпрд╣ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА (рдЪреЗрддрд╛рд╡рдиреА) рдпрд╛ рдПрдХ рддреНрд░реБрдЯрд┐ (рддреНрд░реБрдЯрд┐) рд╣реЛ рд╕рдХрддреА рд╣реИред
ESLint рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓рди рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреА рд╕рдордЭ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рд╣реА рдХреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд▓рди рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдХрд┐рд╕ рд╕реЗрдЯ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореМрдЬреВрджрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢реИрд▓реА рдЧрд╛рдЗрдбреЛрдВ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИрдВ:
рдореИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, Airbnb рд╢реИрд▓реА рдЧрд╛рдЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдореБрдЭреЗ рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреНрд╡рд╛рд░рд╛ рдХрдВрдкрдиреА рдореЗрдВ рдореЗрд░реЗ рдкреНрд░рдмрдВрдзрдХ рджреНрд╡рд╛рд░рд╛ рд╕рд▓рд╛рд╣ рджреА рдЧрдИ, рдЬрд╣рд╛рдВ рдореЗрд░рд╛ рдкреЗрд╢реЗрд╡рд░ рдХрд░рд┐рдпрд░ рд╢реБрд░реВ рд╣реБрдЖ, рдФрд░ рдореИрдВ рдЗрд╕ рд╢реИрд▓реА рдЧрд╛рдЗрдб рдХреЛ рдЕрдкрдиреА рд╕рдмрд╕реЗ рдореВрд▓реНрдпрд╡рд╛рди рд╕рдВрдкрддреНрддрд┐ рдорд╛рдирддрд╛ рд╣реВрдВред
рдЗрд╕ рдЧрд╛рдЗрдб рдХреЛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдмрдирд╛рдП рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ - GitHub рдкрд░ рдЗрд╕рдХреЗ 
рднрдВрдбрд╛рд░ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдпрд╣рд╛рдВ рдореИрдВ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рдпрдореЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
рдЕрдм рдЪрд▓рд┐рдП 
package.json рдлрд╝рд╛рдЗрд▓ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдХреБрдЫ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдЬреЛрдбрд╝реЗрдВ:
 { "name": "react-boiler-plate", "version": "1.0.0", "description": "A react boiler plate", "main": "src/index.js", "author": "Adeel Imran", "license": "MIT", "scripts": {   "lint": "eslint --debug src/",   "lint:write": "eslint --debug src/ --fix",   "prettier": "prettier --write src/**/*.js" }, "husky": {   "hooks": {     "pre-commit": "lint-staged"   } }, "lint-staged": {   "*.(js|jsx)": ["npm run lint:write", "git add"] }, "devDependencies": {   "babel-eslint": "^8.2.3",   "eslint": "^4.19.1",   "eslint-config-airbnb": "^17.0.0",   "eslint-config-jest-enzyme": "^6.0.2",   "eslint-plugin-babel": "^5.1.0",   "eslint-plugin-import": "^2.12.0",   "eslint-plugin-jest": "^21.18.0",   "eslint-plugin-jsx-a11y": "^6.0.3",   "eslint-plugin-prettier": "^2.6.0",   "eslint-plugin-react": "^7.9.1",   "husky": "^1.1.2",   "lint-staged": "^7.3.0",   "prettier": "^1.14.3" } } 
рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЙрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ 
package.json рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВред 
package.json ред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдХреБрдЫ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддреБрдд рдкреИрдХреЗрдЬреЛрдВ рдХреА рднреВрдорд┐рдХрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ:
- babel-eslint- рдЖрдкрдХреЛ- babel-eslintрдХреЛ рджреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП- babel-eslintрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдЖрдк рдлреНрд▓реЛ рдпрд╛ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд┐ ESLint рдЕрднреА рддрдХ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
- eslintрдХреЛрдб рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдореБрдЦреНрдп рдЙрдкрдХрд░рдг рд╣реИред
- eslint-config-airbnb-- eslint-config-airbnbрдирд┐рдпрдореЛрдВ рдХреЛ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- eslint-plugin-babelрдПрдХ ESLint рдкреНрд▓рдЧрдЗрди рд╣реИ, рдЬреЛ- babel-eslintрдкреВрд░рдХ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдиреЗ рдЙрди рдирд┐рдпрдореЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЬреЛ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп- babel-eslintрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рдХрд░рддреЗ рд╣реИрдВред
- eslint-plugin-import- рдпрд╣ рдкреИрдХреЗрдЬ рддрд╛рдЬрд╛- import/exportрд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдкрдереЛрдВ рдХреА рдЧрд▓рдд рд╡рд░реНрддрдиреА рдФрд░ рдЖрдпрд╛рддрд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рдирд╛рдореЛрдВ рд╕реЗ рдЬреБрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд░реЛрдХрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
- eslint-plugin-jsx-a11y- рд╡рд┐рдХрд▓рд╛рдВрдЧ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП- eslint-plugin-jsx-a11yрддрддреНрд╡реЛрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рдпрдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╡реЗрдм рдкрд╣реБрдБрдЪ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
- eslint-plugin-prettierprettier - ESLint рдФрд░ Prettier рдХреЛ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: рдЬрдм рдкреНрд░реАрдЯреАрдпрд░ рдХреЛрдб рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдИрдПрд╕рдПрд▓рдЖрдИрдЯреА рдирд┐рдпрдореЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред
- eslint-plugin-react- рдЗрд╕рдореЗрдВ рдПрдХреНтАНрд▓рд┐рдВрдЯ рдХреЗ рдирд┐рдпрдо рдЕрднрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рд╣реИрдВ
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдХреЛрдб рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдКрдкрд░ рдХреЗ 
package.json рдореЗрдВред 
Jest / Enzyme рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реИрдВред рдЕрдм, рдпрджрд┐ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рдкреИрдХреЗрдЬреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдгред
- eslint-config-jest-enzyme- рдпрд╣ рдкреИрдХреЗрдЬ рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрдм рдЖрдк- jest-environment-enzymeрдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдПрдВрдЬрд╛рдЗрдо рдЪрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, ESLint рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
- eslint-plugin-jest тАФрдЬреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП ESlint рдкреНрд▓рдЧрдЗрдиред
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рдФрд░ рдкреИрдХреЗрдЬ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ, рд╕реНрд╡рдЪрд╛рд▓рди рдореБрджреНрджреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред рдпрд╣ 
husky рдФрд░ 
lint-staged ред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рд╣рдо рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред
app рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ 
.eslintrc.js рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ:
 module.exports = {   env: {       es6: true,       browser: true,       node: true,   },   extends: ['airbnb', 'plugin:jest/recommended', 'jest-enzyme'],   plugins: [       'babel',       'import',       'jsx-a11y',       'react',       'prettier',   ],   parser: 'babel-eslint',   parserOptions: {       ecmaVersion: 6,       sourceType: 'module',       ecmaFeatures: {           jsx: true       }   },   rules: {       'linebreak-style': 'off', //    Windows.       'arrow-parens': 'off', //   prettier       'object-curly-newline': 'off', //   prettier       'no-mixed-operators': 'off', //   prettier       'arrow-body-style': 'off', //  -   ?       'function-paren-newline': 'off', //   prettier       'no-plusplus': 'off',       'space-before-function-paren': 0, //   prettier       'max-len': ['error', 100, 2, { ignoreUrls: true, }], // airbnb           'no-console': 'error', // airbnb         'no-alert': 'error', // airbnb         'no-param-reassign': 'off', //  -   ?       "radix": "off", // parseInt, parseFloat  radix .    .       'react/require-default-props': 'off', // airbnb           'react/forbid-prop-types': 'off', // airbnb           'react/jsx-filename-extension': ['error', { extensions: ['.js'] }], // airbnb  .jsx       'prefer-destructuring': 'off',       'react/no-find-dom-node': 'off', //           'react/no-did-mount-set-state': 'off',       'react/no-unused-prop-types': 'off', //            'react/jsx-one-expression-per-line': 'off',       "jsx-a11y/anchor-is-valid": ["error", { "components": ["Link"], "specialLink": ["to"] }],       "jsx-a11y/label-has-for": [2, {           "required": {               "every": ["id"]           }       }], //     htmlFor  label       'prettier/prettier': ['error'],   }, }; 
рдЕрдм 
app рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ 
.eslintignore рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ:
 /.git /.vscode node_modules 
рдЕрдм рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ 
.eslintrc.js рдлрд╝рд╛рдЗрд▓ рдХреИрд╕реЗ 
.eslintrc.js , рдФрд░ рдЗрд╕рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЗ рдЕрд░реНрде рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред
рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рд╕рдВрд░рдЪрдирд╛ рд╣реИ:
 module.exports = {  env:{},  extends: {},  plugin: {},  parser: {},  parserOptions: {},  rules: {}, }; 
рд╕рдВрдмрдВрдзрд┐рдд рдирд╛рдореЛрдВ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдИ рдЧрдИ рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЗ рдмреНрд▓реЙрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
- env- рдЖрдкрдХреЛ рдЙрди рдкрд░рд┐рд╡реЗрд╢реЛрдВ рдХреА рд╕реВрдЪреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдЖрдк рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд╣рд╛рдБ- es6,- browserрдФрд░- nodeрдЧреБрдг- trueрдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░ рд░рд╣реЗ- trueред- es6рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ ES6 рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде (рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрдЯ рд╣реЛрддреА рд╣реИ,- parserOptionsрдмреНрд▓реЙрдХ рдореЗрдВ,- ecmaVersionрдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ- 6)ред- browserрдкреИрд░рд╛рдореАрдЯрд░- WindowsрдЬреИрд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЪрд░ рдХреЛ- browserрдХрд░рддрд╛ рд╣реИред- nodeрдкреИрд░рд╛рдореАрдЯрд░ рд╡реИрд╢реНрд╡рд┐рдХ Node.js рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдФрд░ рд╕реНрдХреЛрдк рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,- globalред рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
- extends- рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрдиреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдкрд┐рдЫрд▓реЗ рдПрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрддрд╛ рд╣реИред Airbnb- airbnbрдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ- airbnbрдХрд┐рдпрд╛ рдЬрд╛рддрд╛- airbnb, рдЬреЛ рдХрд┐- jestрд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░- jest-enzymeрд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
- plugins- рдпрд╣рд╛рдБ рд▓рд╛рдЗрдирд┐рдВрдЧ рдирд┐рдпрдо рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо рдирд┐рдпрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ,- import,- jsx-a11y,- react,- jsx-a11y, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдмрд╛рдд рдХреА рдереАред
- parser- ESLint рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрд╕реНрдкреНрд░реА- parserрдХрд╛ рдЙрдкрдпреЛрдЧ- parserрд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╣рдо рдмреИрдмреЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдмреИрдмрд▓-рдИрдПрд╕рдПрд▓рдЖрдИрдПрдирдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- parserOptions- рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдорд╛рдирдХ рдкрд╛рд░реНрд╕рд░ рдХреЛ- babel-eslintрдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕ рдмреНрд▓реЙрдХ рдореЗрдВ рдЧреБрдг рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред- 6рдХреЛ рд╕реЗрдЯ рдХреА рдЧрдИ- ecmaVersionрд╕рдВрдкрддреНрддрд┐- ecmaVersionрдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ ES6 рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рдПрдЧреАред рдЪреВрдВрдХрд┐ рд╣рдо- EcmaScriptрдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ,- sourceTypeрдЧреБрдг- moduleрд╕реЗрдЯ рд╣реИред рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЪреВрдВрдХрд┐ рд╣рдо рд░рд┐рдПрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдЬреЗрдПрд╕рдПрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЬреЛ рдХрд┐- ecmaFeaturesрдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ- trueрдЬреЛ рдХрд┐- ecmaFeaturesрд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
- rules- рдореБрдЭреЗ- .eslintrc.jsрдХрд╛ рдпрд╣ рднрд╛рдЧ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ ESLint рдирд┐рдпрдореЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдпрд╛ рдЬреЛрдбрд╝реЗ рдЧрдП рд╕рднреА рдирд┐рдпрдореЛрдВ рдХреЛ рдмрджрд▓рд╛ рдпрд╛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣- rulesрдмреНрд▓реЙрдХ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрд╛рда рдореЗрдВ рдирд┐рдпрдореЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╣реИрдВред
рдЕрдм рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ 
.eslintignore рдлрд╛рдЗрд▓ рдХреАред рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЙрди рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд░рд╛рд╕реНрддреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рдЬрд┐рдирдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ ESLint рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рддреАрди рдлрд╝реЛрд▓реНрдбрд░ рдпрд╣рд╛рдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ:
- /.git- рдореБрдЭреЗ Git рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ESLint рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
- /.vscode- рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдпрд╣ рдлрд╝реЛрд▓реНрдбрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рд╡реАрдПрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣рд╛рдВ рд╕рдВрдкрд╛рджрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд▓рд┐рдВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рднреА рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- node-modules- рдирд┐рд░реНрднрд░рддрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рднреА рдПрдХ рд▓рд┐рдВрдЯрд░ рдХреЗ рд╕рд╛рде рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЕрдм рдЖрдЗрдП 
package.json рдореЗрдВ рдХреБрдЫ рдирдИ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред рдпрд╣рд╛рдБ рд╡реЗ рд╣реИрдВ:
 "lint": "eslint --debug src/" "lint:write": "eslint --debug src/ --fix" 
рдпрджрд┐ рдЖрдк рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, 
yarn lint рдпрд╛ 
npm run lint рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд▓рд┐рдВрдЯрд░ рдХреЛ 
src рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреА рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд╛рдИ рдЧрдИрдВред рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд▓рд┐рдВрдЯ рд▓рд┐рдкрд┐ рдЪрд▓ рд░рд╣реА рд╣реИрдпрджрд┐ рдЖрдк рджреВрд╕рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ ( 
yarn lint:write ) рдкрд░ рдЕрдорд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдИрдПрд╕рд▓рд┐рдВрдЯ рд╡рд╣реА рдЪреЗрдХ рдХрд░реЗрдЧрд╛ рдЬреЛ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореЛрдб рдореЗрдВ, рд╕рд┐рд╕реНрдЯрдо рдкрддрд╛ рдХреА рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛, рдХреЛрдб рдХреЛ рд╕рдмрд╕реЗ рд╕рднреНрдп рд░реВрдк рдореЗрдВ рд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ред
рд╡реАрдПрд╕ рдХреЛрдб рдХреЗ рд▓рд┐рдП ESLint рдПрдХреНрд╕рдЯреЗрдВрд╢рди
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Prettier рдФрд░ ESLint рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЕрд░реНрдерд╛рддреН, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рдХрд╛ рдкреНрд░рд╛рд░реВрдкрдг рдФрд░ рд▓рд╛рдЗрдирд┐рдВрдЧ рд╕рдВрдкрд╛рджрдХ рджреНрд╡рд╛рд░рд╛ рдлрд╛рдЗрд▓ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдХрдорд┐рдЯрд┐рдВрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдбрд┐рдВрдЧ рдХреА рд▓рд╛рдЗрдирд┐рдВрдЧ рдФрд░ рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рд╣рдо, рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╡реАрдПрд╕ рдХреЛрдб рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ VS рдХреЛрдб рдХреЗ рд▓рд┐рдП 
ESLint рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк VS рдХреЛрдб рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреИрдирд▓ ( 
ctrl+shift+x ) рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ, рдЦреЛрдЬ рдлрд╝реАрд▓реНрдб рдореЗрдВ, 
eslint рджрд░реНрдЬ 
eslint ред рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдПрдХ рд╕реВрдЪреА рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рд╣рдореЗрдВ рдХреНрдпрд╛ рд░реБрдЪрд┐рдХрд░ рд╣реИ рдЬрд┐рд╕рдХреА рдбреЗрд╡рд▓рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдбрд┐рд░реНрдХ рдмрд╛рдПрдорд░ рд╣реИред рдЗрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдВрдкрд╛рджрдХ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред
рдЕрдм, рдкреНрд░реЛрдЬреЗрдХреНрдЯ ( 
app ) рдХреЗ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ 
.vscode рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ (рдирд╛рдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдбреЙрдЯ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ)ред рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ 
settings.json рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
 { "editor.formatOnSave": false, "eslint.autoFixOnSave": true, } 
рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
- editor.formatOnSaveрдкреНрд░реЙрдкрд░реНрдЯреА- falseрдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рд░реВрдкрдг рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ ESLint рдФрд░ Prettier рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
- eslint.autoFixOnSaveрдЧреБрдг рдХреЛ- trueрд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛- true, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЗрдВрд╕реНрдЯреЙрд▓ рдХреА рдЧрдИ рдкреНрд▓рдЧ-рдЗрди рд╣рд░ рдмрд╛рд░ рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж рдЖрдЧ рд▓рдЧ рдЬрд╛рдПред рдЪреВрдВрдХрд┐ ESLint рдФрд░ Prettier рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рд╕реЗ рд╕реНрд╡рд░реВрдкрдг рдФрд░ рдХреЛрдб рд▓рд╛рдЗрдирд┐рдВрдЧ рджреЛрдиреЛрдВ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЕрдм, рдЬрдм 
lint:write рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд▓рд╛рдЗрдирд┐рдВрдЧ рдФрд░ рдХреЛрдб рд╕реНрд╡рд░реВрдкрдг рджреЛрдиреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдЧрд╛ред
рдЕрдкрдиреА рднрд╛рд╡рдирд╛рдУрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдпрджрд┐ рдЖрдкрдХреЛ 20,000 рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рдорд┐рд▓рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдЬрд╛рдВрдЪрдирд╛ рдФрд░ рд╕реБрдзрд╛рд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕реЗ рдХрд╛рдо рдореЗрдВ рд╢рд╛рдпрдж рдПрдХ рдорд╣реАрдирд╛ рд▓рдЧреЗрдЧрд╛ред рдФрд░ рдЙрдкрд░реЛрдХреНрдд рд╕реНрд╡рдЪрд╛рд▓рди рдЙрдкрдХрд░рдг рдХреА рдорджрдж рд╕реЗ, рдпрд╣ рд╕рдм рд▓рдЧрднрдЧ рддреАрд╕ рд╕реЗрдХрдВрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдм, рдЖрдкрдХреЛ рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХреА рд╣рд░ рдЪреАрдЬрд╝ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдкрд╛рджрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЯреЗрдХреНрд╕реНрдЯ рдХреА рдЬрд╛рдБрдЪ рдФрд░ рд╕реНрд╡рд░реВрдкрдг рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣рд╛рдБ рд╣рдо VS рдХреЛрдб рд╕рдВрдкрд╛рджрдХ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЖрдкрдХреА рдЯреАрдо рдореЗрдВ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрдкрд╛рджрдХ рдХреЛ рдкрд╕рдВрдж рдХрд░реЗред рдЗрд╕рдореЗрдВ рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдХрд░реНрдХрд╢
рдХрд░реНрдХрд╢ рдкреИрдХреЗрдЬ рдЖрдкрдХреЛ рдЧрд┐рдЯ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХрдорд┐рдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛрдб рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗред
рд╣рд╕реНрдХреА рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
 yarn add  
рдЙрд╕рдХреЗ рдмрд╛рдж, 
package.json рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:
 "husky": {     "hooks": {         "pre-commit": "YOUR_COMMAND_HERE",    "pre-push": "YOUR_COMMAND_HERE"    } }, 
рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЛ рдЬрдиреНрдо рджреЗрдЧрд╛ рдХрд┐ 
commit рдпрд╛ 
push рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдкрд░реАрдХреНрд╖рдг рдпрд╛ рд╕реНрд╡рд░реВрдкрдг рдХрд░рддрд╛ рд╣реИред
рд╣реБрд╕реНрдХреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг 
рдпрд╣рд╛рдБ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ 
рд╣реИ ред
рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡реГрдХреНрд╖ рдордВрдЪрди
рд▓рд┐рдВрдЯ-рд╕реНрдЯреЗрдЬреНрдб рдкреИрдХреЗрдЬ рдЖрдкрдХреЛ рд▓рд┐рдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдХреЛрдбрд┐рдВрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓рд╛рдЗрдирд┐рдВрдЧ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ, рдФрд░ рд╡рд╣рд╛рдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреА рдПрдХреАрдХреГрдд рд╕реНрдЯрд╛рдЗрд▓ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдирд┐рдВрдЧ рдмрд╣реБрдд рд▓рдВрдмрд╛ рдХрд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЕрд░реНрдерд╣реАрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЦрд┐рд░рдХрд╛рд░, рд▓рд┐рдирд┐рдВрдЧ рдХреЛ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВред
рд▓рд┐рдВрдЯ-рд╕реНрдЯреЗрдЬреНрдб рдЖрдкрдХреЛ рдЦреЛрдЬ рдкреИрдЯрд░реНрди рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рдЧрдИ рдЕрдиреБрдХреНрд░рдорд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рдордирдорд╛рдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг 
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ 
рд╣реИ ред
Lint-staged рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
 yarn add  
рдлрд┐рд░, 
package.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:
 "lint-staged": {     "*.(js|jsx)": ["npm run lint:write", "git add"] }, 
рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, 
lint:write рдХрдорд╛рдВрдб рдХреЛ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдирд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдлрд╛рдЗрд▓ рдХреЛ 
git add рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдм рдпрд╣ рдХрдорд╛рдВрдб 
.js рдФрд░ 
.jsx рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рднреА рдпрд╣реА рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рд╕реНрдХреА рдФрд░ рд▓рд┐рдВрдЯ-рдордВрдЪрд┐рдд рд╕рд╛рдЭрд╛рдХрд░рдг
рдПрдХ рдПрдХреНрд╢рди рдЖрд░реЗрдЦ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреЛ рдЕрдЧрд▓реЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХреЛрдб рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕рд┐рд╕реНрдЯрдо 
lint-staged рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, 
lint:write рдЪрд▓рд╛рддрд╛ рд╣реИ 
lint:write рд╕реНрдХреНрд░рд┐рдкреНрдЯ 
lint:write , рдЬреЛ рдХреЛрдб рдХреА рд▓рд╛рдЗрдирд┐рдВрдЧ рдФрд░ рд╕реНрд╡рд░реВрдкрдг рдХрд░рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкреНрд░рддрд┐рдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, 
package.json рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрд╣рд▓реЗ рдкреНрд░рд╕реНрддреБрдд рдХреЛрдб рдореЗрдВ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реИ, рд╣рдордиреЗ рдкрд╣рд▓реЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХреА рдереАред
рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ 
package.json рдХреА рд╕рд╛рдордЧреНрд░реА рдлрд┐рд░ рд╕реЗ рд╣реИ:
 { "name": "react-boiler-plate", "version": "1.0.0", "description": "A react boiler plate", "main": "src/index.js", "author": "Adeel Imran", "license": "MIT", "scripts": {   "lint": "eslint --debug src/",   "lint:write": "eslint --debug src/ --fix",   "prettier": "prettier --write src/**/*.js" }, "husky": {   "hooks": {     "pre-commit": "lint-staged"   } }, "lint-staged": {   "*.(js|jsx)": ["npm run lint:write", "git add"] }, "devDependencies": {   "babel-eslint": "^8.2.3",   "eslint": "^4.19.1",   "eslint-config-airbnb": "^17.0.0",   "eslint-config-jest-enzyme": "^6.0.2",   "eslint-plugin-babel": "^5.1.0",   "eslint-plugin-import": "^2.12.0",   "eslint-plugin-jest": "^21.18.0",   "eslint-plugin-jsx-a11y": "^6.0.3",   "eslint-plugin-prettier": "^2.6.0",   "eslint-plugin-react": "^7.9.1",   "husky": "^1.1.2",   "lint-staged": "^7.3.0",   "prettier": "^1.14.3" } } 
рдЕрдм рдЬрдм рдЖрдк рд╣рд╕реНрдХреА рдФрд░ рд▓рд┐рдВрдЯ-рдордВрдЪрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЧрд┐рдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдЙрдирдХреЗ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрд░реНрдерд╛рддреН, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрджреЗрд╢ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЧрдП рдереЗ:
 $ git add . $ git commit -m "some descriptive message here" 
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, 
.eslintrc.js рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХреА 
.eslintrc.js рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рднрдВрдбрд╛рд░ рдореЗрдВ рдХрднреА рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред
рдЕрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкреНрд░реАрдЯрд┐рдпрд░, ESLint, рд╣рд╕реНрдХреА рдФрд░ рд▓рд┐рдВрдЯ-рд╕реНрдЯреЗрдЬ рдХреЛ рдХреИрд╕реЗ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐ рд╣рдордиреЗ рдКрдкрд░ рдХрд╣рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреА рдЯреАрдо рдХреЗ рд╕рднреА рд╕рджрд╕реНрдп рдореЗрд░реЗ рдкрд╕рдВрджреАрджрд╛ VS рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЙрди рд╕рднреА рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ 
.editorconfig рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
.Editorconfig рдлрд╝рд╛рдЗрд▓
рдЖрдкрдХреА рдЯреАрдо рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рджрд╕реНрдп рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрдкрд╛рджрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рдПрдХ рд╕рдВрдкрд╛рджрдХ рдХреЛ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдВрдбреЗрдВрдЯ рдпрд╛ рд▓рд╛рдЗрди рдлреАрдб рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рд╣рдо рдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред 
editorconfig ред .
, . , , WebStorm, AppCode, Atom, Eclipse, Emacs, BBEdit .
app .editorconfig :
 # EditorConfig -  : http://EditorConfig.org #  EditorConfig   root = true [*.md] trim_trailing_whitespace = false [*.js] trim_trailing_whitespace = true #     Unix       [*] indent_style = space indent_size = 2 end_of_line = lf charset = utf-8 insert_final_newline = true max_line_length = 100 
, :
- trim_trailing_whitespace = falseтАФ- .md- .- .js-- false.
- indent_style = spaceтАФ .
- indent_size = 2тАФ .
- end_of_line = lfтАФ- lf. , , . .
- insert_final_newline = trueтАФ .
- max_line_length = 100тАФ 100 .
рдкрд░рд┐рдгрд╛рдо
, , , . , , .
рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! ? ?