рдЕрдореВрд░реНрдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ

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



рдХрдЯреМрддреА рдХреЗ рддрд╣рдд - рд╣реЛрд▓реАрдЬрд╕ 2018 рдкрд╛рдЗрдЯрд░ рд╕рдореНрдореЗрд▓рди рд╕реЗ рдХрд┐рд░рд┐рд▓ рдЪреЗрд░рдХреИрд╢рд┐рди ( z6Dabrata ) рдХреА рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рдПрдХ рд╡реАрдбрд┐рдпреЛ рдФрд░ рдкрд╛рда рдкреНрд░рддрд┐рд▓реЗрдЦред


рд▓реЗрдЦрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рд╕рд┐рд░рд┐рд▓ рдХрд╛ рдЬрдиреНрдо рдореЙрд╕реНрдХреЛ рдореЗрдВ рд╣реБрдЖ рдерд╛, рдЬреЛ рдЕрдм рдиреНрдпреВрдпреЙрд░реНрдХ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдлрд╛рдпрд░рдмреЗрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рди рдХреЗрд╡рд▓ Google, рдмрд▓реНрдХрд┐ рджреБрдирд┐рдпрд╛ рднрд░ рдореЗрдВ рдХреЛрдгреАрдп рд╕рд┐рдЦрд╛рддрд╛ рд╣реИред рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдХреЛрдгреАрдп рдореНрдпреВрдЯреИрдк рдХрд╛ рдЖрдпреЛрдЬрдХ AngularNYC (рд╕рд╛рде рд╣реА VueNYC рдФрд░ ReactNYC) рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реЗ рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ, рд╡рд╣ рдЯреИрдВрдЧреЛ, рдкреБрд╕реНрддрдХреЛрдВ рдФрд░ рд╕реБрдЦрдж рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рдХреЗ рд╢реМрдХреАрди рд╣реИрдВред

Hacksaw рдпрд╛ рд▓рдХрдбрд╝реА?


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

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

 function findConsoleLog(code) { return !!code.match(/console.log/); } 

рдореИрдВрдиреЗ 17 рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗ, рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдпрд╣ рд╕реВрдЪреА рдкреВрд░реНрдг рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред



рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рд╛ рдкрд╛рд╕ рд╣реБрдИред
рдФрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЗрд╕рдХреЗ рдирд╛рдо рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ" рд╣реИ?

 function findConsoleLog(code) { return !!code.match(/\bconsole.log/); } 

рдПрдХ рд╡рд░реНрдг рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╢рдмреНрдж рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ console.log рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред



рдХреЗрд╡рд▓ рджреЛ рдкрд░реАрдХреНрд╖рдг рд╣реБрдП, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реБрдЖ рдЕрдЧрд░ console.log рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╣реИ рдФрд░ рдЙрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ?

рд╣рдо рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкрд╛рд░реНрд╕рд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕реНрдкрд░реНрд╢ рди рдХрд░реЗрдВред

 function findConsoleLog(code) { return !!code   .replace(/\/\/.*/)   .match(/\bconsole.log/); } 



рд╣рдо "рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ" рдХреЛ рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рддреЗ рд╣реИрдВ:

 function findConsoleLog(code) { return !!code   .replace(/\/\/.*|'.*'/, '')   .match(/\bconsole.log/); } 



рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдФрд░ рдЕрдиреНрдп рд╡рд░реНрдг рд╣реИрдВ рдЬреЛ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ:



рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╡рд┐рдЪрд╛рд░ рдХрд╛рдлреА рд╕рд░рд▓ рдирд╣реАрдВ рдерд╛, рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА 17 рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдорд╛рдзрд╛рди рдХреЛрдб рджрд┐рдЦреЗрдЧрд╛:

 function findConsoleLog(code) { return code   .replace(/\/\/.*|'.*?[^\\]'|".*?"|`[\s\S]*`|\/\*[\s\S]*\*\//)   .match(/\bconsole\s*.log\(/); } 


рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдмрдирд╛рдП рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдПрдПрд╕рдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдкреЗрдбрд╝ рдХреИрд╕реЗ рдЙрдЧрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ?


рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╛рд░реНрд╕рд░ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрдореВрд░реНрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Parser @ babel / рдкрд╛рд░реНрд╕рд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ console.log('holy') , рдЗрд╕реЗ рдкрд╛рд░реНрд╕рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВред

 import { parse } from 'babylon'; parse("console.log('holy')"); 

рдЙрдирдХреЗ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд▓рдЧрднрдЧ 300 рд▓рд╛рдЗрдиреЛрдВ рдХреА рдПрдХ JSON рдлрд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред рд╣рдо рд╕реЗрд╡рд╛ рд╕реВрдЪрдирд╛ рдХреЗ рд╕рд╛рде рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рд░реЗрдЦрд╛рдУрдВ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд╢рд░реАрд░ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдореЗрдЯрд╛-рдЗрдирдлреЙрд░реНрдореЗрд╢рди рдореЗрдВ рд╣рдорд╛рд░реА рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИред рдкрд░рд┐рдгрд╛рдо рд▓рдЧрднрдЧ 100 рд▓рд╛рдЗрдиреЗрдВ рд╣реИред рдПрдХ рдмреЙрдбреА рд╡реИрд░рд┐рдПрдмрд▓ (рд▓рдЧрднрдЧ 300 рд▓рд╛рдЗрди) рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд░ рдХрд┐рд╕ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рд╣реИред

рдЖрдЗрдП рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╡реГрдХреНрд╖ рдореЗрдВ рдХреЛрдб рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╢рд╛рдмреНрджрд┐рдХ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:



рдпрд╣ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдиреНрдпреВрдореЗрд░рд┐рдХ рд▓рд┐рдЯрд░рд▓ рд╣реИ, рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╢рд╛рдмреНрджрд┐рдХ рд╣реИред



рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрдВрд╕реЛрд▓ .log рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ред рдпрд╣ рдПрдХ рд╡рд╕реНрддреБ рд╣реИ рдХрд┐ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИред



рдпрджрд┐ рд▓реЙрдЧ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рд╣реИ, рддреЛ рд╡рд┐рд╡рд░рдг рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ: рдПрдХ рдХреЙрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ, рдЗрд╕рдореЗрдВ рддрд░реНрдХ рд╣реИрдВ - рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╢рд╛рдмреНрджрд┐рдХред рдЙрд╕реА рд╕рдордп, рдХреЙрд▓рд┐рдВрдЧ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рдПрдХ рдирд╛рдо рд╣реИ - рд▓реЙрдЧред

рд╕рд╛рд╣рд┐рддреНрдп рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рд╕рдВрдЦреНрдпрд╛, рддрд╛рд░, рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐, рдмреВрд▓рд┐рдпрди, рдЕрд╢рдХреНрддред
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ рдХреЙрд▓ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ



рдпрд╣ рдПрдХ рдХреЙрд▓ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореЗрдВрдмрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рд╣реИред рдЗрд╕рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХрдВрд╕реЛрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рд▓реЙрдЧ рдирд╛рдордХ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИред

рдПрдПрд╕рдбреА рдмрд╛рдИрдкрд╛рд╕


рдЕрдм рдХреЛрдб рдореЗрдВ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рдкреЗрдбрд╝ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдмрд▓-рдЯреНрд░рд╛рд╡рд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред

рд╡рд╣реА 17 рдкрд░реАрдХреНрд╖рдг рджрд┐рдП рдЧрдП рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдХреЗ рдФрд░ "рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ" рдХреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 function traverseConsoleLog(code, {babylon, babelTraverse, types, log}) { const ast = babylon.parse(code); let hasConsoleLog = false; babelTraverse(ast, {   MemberExpression(path){     if (       path.node.property.type === 'Identifier' &&       path.node.property.name === 'log' &&       path.node.object.type === 'Identifier' &&       path.node.object.name === 'console' &&       path.parent.type === 'CallExpression' &&       path.Parentkey === 'callee'     ) {       hasConsoleLog = true;     }   } }) return hasConsoleLog; } 

рдпрд╣рд╛рдВ рдЬреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред const ast = babylon.parse(code); рдХреЛрдб рдореЗрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЪрд░ рдореЗрдВ рд╣реИрдВред рдЖрдЧреЗ рд╣рдо рдЗрд╕ рдкреЗрдбрд╝ рдХреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдмреИрдмрд▓-рдкрд╛рд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреЗрддреЗ рд╣реИрдВред рд╣рдо рдХреЙрд▓ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЗ рдЕрдВрджрд░ рдирд╛рдо рдорд┐рд▓рд╛рди рдХреЗ рд╕рд╛рде рдиреЛрдбреНрд╕ рдФрд░ рдкреНрд░реЙрдкрд░реНрдЯреАрдЬ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдиреЛрдбреНрд╕ рдФрд░ рдЙрдирдХреЗ рдирд╛рдореЛрдВ рдХрд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдпреЛрдЬрди рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ hasConsoleLog рдЪрд░ рдХреЛ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред

рд╣рдо рдкреЗрдбрд╝ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдо рд╕рдХрддреЗ рд╣реИрдВ, рдиреЛрдбреНрд╕ рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рдВрд╢рдЬ рд╣реИрдВ, рдЙрдирдХреЗ рдкрд╛рд╕ рдХреНрдпрд╛ рддрд░реНрдХ рдФрд░ рдЧреБрдг рд╣реИрдВ, рдЗрди рдЧреБрдгреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рджреЗрдЦреЗрдВ, рдкреНрд░рдХрд╛рд░ - рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдПрдХ рдЕрдкреНрд░рд┐рдп рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИ рдЬрд┐рд╕реЗ рдмреИрдмрд┐рд▓-рдкреНрд░рдХрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЧрд▓рдд рдирд╛рдо рдХреЗ рдХрд╛рд░рдг рдкреЗрдбрд╝ рдореЗрдВ рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, path.parent.type === 'CallExpression' рдмрдЬрд╛рдп рдЖрдкрдиреЗ рдЧрд▓рддреА рд╕реЗ path.parent.type === 'callExpression' , path.parent.type === 'callExpression' -рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдк рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ :

 // Before path.node.property.type === 'Identifier' path.node.property.name === 'log' // with babel types import {isIdentifier} from 'babel-types'; isIdentifier(path.node.property, {name: log}) //         ,  ,    isIdentifier,      

рд╣рдо рдкрд┐рдЫрд▓реЗ рдХреЛрдб рдХреЛ рдмрд╛рдмреЗрд▓-рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
 function traverseConsoleLogSolved2(code, {babylon, babelTraverse, types}) { const ast = babylon.parse(code); let hasConsoleLog = false; babelTraverse(ast, {   MemberExpression(path) {     if (       types.isIdentifier(path.node.object, { name: 'console'}) &&       types.isIdentifier(path.node.property, { name: 'log'}) &&       types.isCallExpression(path.parent) &&       path.parentKey === 'callee'     ) {       hasConsoleLog = true;     }   } }); return hasConsoleLog; } 

рдПрд╕реЗрд▓ рдХреЛ рдмреЗрдмрд▓-рдЯреНрд░реИрд╡рд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрджрд▓рдирд╛


рд╢реНрд░рдо рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ console.log рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреЛрдб рд╕реЗ рддреБрд░рдВрдд рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ console.log - рдПрдХ рд╕рдВрдХреЗрдд рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рдХреЛрдб рдореЗрдВ рд╣реИред

рдЪреВрдБрдХрд┐ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ hasConsoleLog = true; рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛, hasConsoleLog = true; рд╣рдо path.parentPath.remove(); рд▓рд┐рдЦрддреЗ рд╣реИрдВ path.parentPath.remove(); ред

removeConsoleLog рдлрд╝рдВрдХреНрд╢рди рд╕реЗ, рд╣рдо рдЕрднреА рднреА рдПрдХ рдмреВрд▓рд┐рдпрди рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕рдХреЗ рдЙрддреНрдкрд╛рджрди рдХреЛ рдЙрд╕ рдХреЛрдб рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмреЗрдмрд▓-рдЬрдирд░реЗрдЯрд░ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛:
hasConsoleLog => babelGenerator(ast).code

рдмреИрдмрд▓-рдЬрдирд░реЗрдЯрд░ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдЕрдореВрд░реНрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдХреЛрдб рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИ, рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ console.log рдХреЗ рдмрд┐рдирд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд┐рдд рдХреЛрдб рд╣реЛрддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдпрджрд┐ рд╣рдо рдПрдХ рдХреЛрдб рдореИрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП sourceMaps рд╕рдВрдкрддреНрддрд┐ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред

рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЛ рдбрд┐рдмрдЧрд░ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?


рдЗрд╕ рдмрд╛рд░ рд╣рдо рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ASTexplorer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдбреАрдмрдЧрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреАрдмрдЧрд░ рдХрдерди рдиреЛрдб рд╣реИред рд╣рдореЗрдВ рдкреВрд░реА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдиреЛрдб рд╣реИ, рдмрд╕ рдбрд┐рдмрдЧрд░ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдвреВрдВрдвреЗрдВред рд╣рдо ESLint (ASTexplorer рдкрд░) рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦреЗрдВрдЧреЗред

ASTexplorer рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рдмрд╛рдИрдВ рдУрд░ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рджрд╛рдИрдВ рдУрд░ рдЖрдкрдХреЛ рддреИрдпрд╛рд░ ASD рдорд┐рд▓рддрд╛ рд╣реИред рдЖрдк рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: JSON рдпрд╛ рдЯреНрд░реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВред



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

 export default function(context) { return {   DebuggerStatement(node) { // ,     console.log    path,    -  ,     path         context.report(node, 'LOL Debugger!!!'); //   ESLint ,   debugger, node     ,    ,    debugger   } } } 

рдПрдХ рд▓рд┐рдЦрд┐рдд рдкреНрд▓рдЧрдЗрди рдХреЗ рдХрд╛рдо рдХреА рдЬрд╛рдБрдЪ:



рдЗрд╕реА рддрд░рд╣, рдЖрдк рдбрд┐рдмрдЧрд░ рдХреЛ рдХреЛрдб рд╕реЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдПрдПрд╕рдбреА рдХреНрдпрд╛ рд╣реИрдВ


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

рддреЛ:

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

рдмреИрдмрд▓ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ


  1. рд╕рднреА рдмреИрдмрд▓ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рдЗрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: рдкреНрд▓рдЧрдЗрдиреНрд╕ рдФрд░ рдкреНрд░реАрд╕реЗрдЯ ред
  2. ECMAScript рдореЗрдВ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ Babel рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рд▓реЛрдЧ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХреЗрдВред рдпрджрд┐ рдЖрдк рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдПрдПрд╕рдбреА рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрд╛рд░реНрдХрд┐рдХ-рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ-рдСрдкрд░реЗрдЯрд░ ред
  3. рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╕рдордп рдмреИрдмрд▓ рдЬреЗрдирд░реЗрдЯрд░ рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ рдЦреЛ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдПрд╕рдбреА рд╕реЗ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЕрдкрдиреЗ рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ рдХреЛ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдЯреВрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд░реАрдХрд╛рд╕реНрдЯ рдпрд╛ рдмреИрдмреЗрд▓ рдХреЛрдбрдореЙрдб ред
  4. рдЗрд╕ рд▓рд┐рдВрдХ рд╕реЗ рдЖрдк рдмреЗрдмреЗрд▓ рд╡рд┐рд╕реНрдордпрдХрд╛рд░реА рдмрд╛рдмреЗрд▓ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
  5. рдмреИрдмреЗрд▓ рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдФрд░ рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХреЛрдВ рдХреА рдПрдХ рдЯреАрдо рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИред рдЖрдк рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рддреАрди рддрд░реАрдХреЗ рд╣реИрдВ: рд╡рд┐рддреНрддреАрдп рд╕рд╣рд╛рдпрддрд╛, рдЖрдк patreon рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рд╣реЗрдирд░реА рдЭреВ, рдЬреЛ рдмреИрдмреЗрд▓ рдХреЗ рдкреНрд░рдореБрдЦ рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, opencollective.com/babel рдкрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдмреЛрдирд╕


рдХреЛрдб рдореЗрдВ рд╣рдо рдФрд░ рдХреИрд╕реЗ рдЕрдкрдирд╛ console.log рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдЕрдкрдиреА рдЖрдИрдбреАрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ! рдХреЛрдб рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЦреЛрдЬ рдФрд░ рдмрджрд▓реЗрдВ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
Intellij IDEA рдореЗрдВ рдПрдХ "рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдЦреЛрдЬ" рдЯреВрд▓ рднреА рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рд╕рд╣реА рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╡реИрд╕реЗ, рдпрд╣ рдПрдХ рдПрдПрд╕рдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

24-25 рдирд╡рдВрдмрд░ рдХреЛ, рдХрд┐рд░рд┐рд▓ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдПрдХ рдкреНрд░рд╕реНрддреБрддрд┐ рджреЗрдЧрд╛ * LOVES * рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдореЙрд╕реНрдХреЛ рд╣реЛрд▓реНрдЬрд╕ рдкрд░ : рд╣рдо рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдбреЗрдЯрд╛ рд╕реНрддрд░ рддрдХ рдиреАрдЪреЗ рдЬрд╛рдПрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ * .gif рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░реЗрдВ, рдФрд░ рдкреНрд░реЛрдЯреЙрдмреЙрдл рдпрд╛ рдереНрд░рд┐рдлреНрдЯ рдЬреИрд╕реЗ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдЧреБрдгреЛрдВ рд╕реЗ рдирд┐рдкрдЯреЗрдВ ред рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдмрд╛рдж, рд╕рд┐рд░рд┐рд▓ рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдмреНрдпрд╛рдЬ рдХреЗ рд╕рднреА рдореБрджреНрджреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

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


All Articles