рдХреЛрдб рдбрд┐рдЬрд╛рдЗрди, рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдЬрд╛рдБрдЪ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЕрдиреБрдХреВрд▓рди

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЬреАрддрдиреЗ рдХреА рд╢реИрд▓реА



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

рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рддрднреА рдмреЗрд╣рддрд░ рд╣реЛрдЧреА рдЬрдм рдкреВрд░реА рдЯреАрдо рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╢реИрд▓реА рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдЧреАред рдХреБрдЫ рдирд┐рдпрдореЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИред

рдкрд╛рдпрдерди рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд┐рд╕рдХреЗ рдкрд╛рд╕ "рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдб рдлреЙрд░ рдкрд╛рдпрдерди рдХреЛрдб" рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рдПрдХрд▓ рд╕реЗрдЯ рд╣реИ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдореЗрдВ рд╕реЗ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП 6 рд▓реЛрдХрдкреНрд░рд┐рдп рдЧрд╛рдЗрдб рд╣реИрдВ:



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

рдкрдВрдЬреАрдХрд░рдг


рдорд╛рдВрдЧрдкрддреНрд░



рддрд░реНрдХреЛрдВ рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмреАрдЪ рдХрд╛ рд╕реНрдерд╛рди



рдХрдИ рдЧрд╛рдЗрдб рдЖрдкрдХреЛ рдпрд╣ рднреА рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ рдХрд┐ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреЛрдИ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИ (рд░рд┐рдХреНрдд рд╕реНрдерд╛рди)

рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ



рд╕реЗрдореАрдХреЛрд▓рди



рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:



рдЙрджреНрдзрд░рдг



рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдШреЛрд╖рдгрд╛



рдХреЛрд╖реНрдардХ



рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░



рдирд╛рдо



рдЪрд░



рд╕реНрдерд┐рд░рд╛рдВрдХ




рдХрд╛рд░реНрдпреЛрдВ



рд╕рд░рдгрд┐рдпреЛрдВ



рд╡рд╕реНрддреБрдУрдВ рдФрд░ рд╡рд░реНрдЧреЛрдВ



рдЕрдиреНрдп

рдХрдИ рдХрдВрдкрд╛рдЙрдВрдб рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рднреА рдирд┐рдЪрд▓реЗ-рд╣рд╛рдЗрдлрд╝рди-рд╕реАрдПрд╕рдПрд╕-рдХреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: npm

JSHint рдФрд░ .jshintrc рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


JSHint рдПрдХ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ред рдпрд╣ рдХрдИ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкрд╛рда рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИред рдпрд╣ рд╢реИрд▓реАрдЧрдд рдПрдХрддрд╛ рдФрд░ рдХреЛрдб рдЕрдЦрдВрдбрддрд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдиреАрдЪреЗ рд╣рдорд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдг .jshintrc рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬреЛ рдКрдкрд░ рджреА рдЧрдИ рд╕рднреА рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦреЗрдВ, рдФрд░ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ JSHint рдкреНрд▓рдЧрдЗрди рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рд╕рдВрдкрд╛рджрдХ рдЕрдм рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ред

 { "camelcase" : true, "indent": 2, "undef": true, "quotmark": "single", "maxlen": 80, "trailing": true, "curly": true } 


рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХреА рдЧрдИ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ, рдЬреЛрдбрд╝реЗрдВ:

 /* jshint browser:true, jquery:true */ 


Node.js рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ, рдЬреЛрдбрд╝реЗрдВ:

 /*jshint node:true */ 


рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА JS рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ, рдЬреЛрдбрд╝рдирд╛ рднреА рдмреЗрд╣рддрд░ рд╣реИ:

 'use strict'; 


рдпрд╣ JSHint рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИрдВрдбрд▓рд░ рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛, рдЬреЛ рдХрдо рддреНрд░реБрдЯрд┐ рд╕рд╣рд┐рд╖реНрдгреБ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред 'рд╕рдЦреНрдд рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ' (рдмрд╛рд╣рд░реА рд▓рд┐рдВрдХ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВ

Git рдХрдорд┐рдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ JSHint рдХреЛрдб рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪрдирд╛


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

 #!/bin/bash # Pre-commit Git hook to run JSHint on JavaScript files. # # If you absolutely must commit without testing, # use: git commit --no-verify filenames=($(git diff --cached --name-only HEAD)) which jshint &> /dev/null if [ $? -ne 0 ]; then echo "error: jshint not found" echo "install with: sudo npm install -g jshint" exit 1 fi for i in "${filenames[@]}" do if [[ $i =~ \.js$ ]]; then echo jshint $i jshint $i if [ $? -ne 0 ]; then exit 1 fi fi done 


psред
рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЛрдВ (рдореВрд▓ рд▓реЗрдЦ) рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░, рдПрдХ Git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдИ рдЧрдИ рдереА, рдХреЛрдИ рднреА .jshintrc рдпрд╛ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

рдореВрд▓ рд▓реЗрдЦ: (http://seravo.fi/2013/javascript-the-winning-style)

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


All Articles