Prettier, ESLint, рдХрд░реНрдХрд╢, рд▓рд┐рдВрдЯ-рдордВрдЪрд┐рдд, рдФрд░ EditorConfig: рд▓реЗрдЦрди рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг

рдЖрдк рдиреАрдЯ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ ... рдЖрдкрдиреЗ рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдб рдкрдврд╝реЗ, рдЬреИрд╕реЗ 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 --dev prettier 

рдЗрд╕ рдЖрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдПрдХ 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 , рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЦрд░рд╛рдм рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рд╣реИред

рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░реЗрдВ? рдЦрд░рд╛рдм рд╕реНрд╡рд░реВрдкрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВ:

  1. рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рдХреЛрдб рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░реЗрдВред
  2. рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
  3. рдЗрд╕реЗ рд╡реИрд╕реЗ рд╣реА рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВ (рдореИрдВ рдЖрдкрд╕реЗ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдирд╣реАрдВ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ)ред

рдореИрдВ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдЕрдм рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ, рдФрд░, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, 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-prettier prettier - 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 --dev husky 

рдЙрд╕рдХреЗ рдмрд╛рдж, package.json рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 "husky": {     "hooks": {         "pre-commit": "YOUR_COMMAND_HERE",    "pre-push": "YOUR_COMMAND_HERE"    } }, 

рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЛ рдЬрдиреНрдо рджреЗрдЧрд╛ рдХрд┐ commit рдпрд╛ push рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдкрд░реАрдХреНрд╖рдг рдпрд╛ рд╕реНрд╡рд░реВрдкрдг рдХрд░рддрд╛ рд╣реИред

рд╣реБрд╕реНрдХреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдБ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡реГрдХреНрд╖ рдордВрдЪрди


рд▓рд┐рдВрдЯ-рд╕реНрдЯреЗрдЬреНрдб рдкреИрдХреЗрдЬ рдЖрдкрдХреЛ рд▓рд┐рдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

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

рд▓рд┐рдВрдЯ-рд╕реНрдЯреЗрдЬреНрдб рдЖрдкрдХреЛ рдЦреЛрдЬ рдкреИрдЯрд░реНрди рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рдЧрдИ рдЕрдиреБрдХреНрд░рдорд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рдордирдорд╛рдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

Lint-staged рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 yarn add --dev lint-staged 

рдлрд┐рд░, 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 .

рдкрд░рд┐рдгрд╛рдо


, , , . , , .

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! ? ?

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


All Articles