рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрдХреНрддрд┐ рдХреА рдЖрдИрдбреАрдИ рдпрд╛ рд╣рдордиреЗ рдореЛрдирд╛рдХреЛ рдХреЛ рдХреНрдпреЛрдВ рдЪреБрдирд╛

рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдиреЛрдЯ


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


рдХреЛрдб рд╕рдВрдкрд╛рджрдХ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЪреБрдиреЗрдВ?


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

рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП 3 рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ: рдРрд╕ , рдХреЛрдбрдорд┐рд░рд░ рдФрд░ рдореЛрдирд╛рдХреЛ рд╕рдВрдкрд╛рджрдХ ред рдЗрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдкрд╣рд▓рд╛, рдХреЛрдбрдорд┐рд░рд░ , рдмрд░реНрд▓рд┐рдирд░ рдореЗрд░реАрдЬрди рд╣рд╛рд╡реЗрд░реНрдмрдХреЗ рдХреА рдПрдХ рдирд┐рдЬреА рдкрд╣рд▓ рдереА, рдЬрд┐рд╕реЗ рдЕрдкрдиреЗ рдСрдирд▓рд╛рдЗрди рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓, рдПрд▓рдХреНрд╡реЗрдВрдЯреЗрдВрдЯ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рд╡реНрдпрд╛рдпрд╛рдо рдХреЛрдб рд╕рдВрдкрд╛рджрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг 2007 рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред 2010 рдореЗрдВ, рдРрд╕ рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг JSConf.eu рдореЗрдВ рдЙрд╕реА рдмрд░реНрд▓рд┐рди рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ рддрдм Ajax.org рдиреЗ рдЕрдкрдиреЗ рдХреНрд▓рд╛рдЙрдб IDE Cloud9 рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдерд╛ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, Ace рдХрд╛ рдЕрд░реНрде Ajax.org Cloud9 Editor рд╣реИ)ред 2016 рдореЗрдВ, Cloud9 рдХреЛ рдЕрдореЗрдЬрд╝рди рджреНрд╡рд╛рд░рд╛ рдЦрд░реАрджрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЕрдм рдпрд╣ AWS рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдирд╡реАрдирддрдо, рдореЛрдирд╛рдХреЛ рд╕рдВрдкрд╛рджрдХ, рд╡реАрдПрд╕ рдХреЛрдб рдХрд╛ рдПрдХ рдШрдЯрдХ рд╣реИ рдФрд░ 2015 рдХреЗ рдЕрдВрдд рдореЗрдВ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрд╛рджрдХ рдХреА рдЕрдкрдиреА рддрд╛рдХрдд рдФрд░ рдХрдордЬреЛрд░рд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдбрдорд┐рд░рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд░реЛрдо рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд┐рдЯрдХрдмреЗрдЯ рдореЗрдВ рдПрдХ рдЖрдИрдбреАрдИ, рдПрдирдкреАрдПрдо рдореЗрдВ рд░рдирдХрд┐рдЯ рдореЗрдВ; рдРрд╕ - рдХреЛрдбреЗрдХ рдЕрдХрд╛рджрдореА, рдЦрд╛рди рдЕрдХрд╛рджрдореА, MODX рдореЗрдВ; рдореЛрдирд╛рдХреЛ - GitLab IDE рдФрд░ CodeSandbox рдореЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рддреБрд▓рдирд╛ рдЪрд╛рд░реНрдЯ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЙрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЪреБрдирдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИред

рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ
рдРрд╕CodeMirrorрдореЛрдирд╛рдХреЛ
рдбреЗрд╡рд▓рдкрд░Cloud9 IDE (Ajax.org),
рдЕрдм AmazonMozilla рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ
рдорд░рд┐рдЬрди рд╣реИрд╡рд░рдмреЗрдХреЗрдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рд╕рдорд░реНрдердирдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ ^ 3.5
рдХреНрд░реЛрдо
рд╕рдлрд╛рд░реА ^ 4.0
IE ^ 8.0
рдУрдкреЗрд░рд╛ ^ 11.5
рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ ^ 3.0
рдХреНрд░реЛрдо
рд╕рдлрд╛рд░реА ^ 5.2
IE ^ 8.0
рдУрдкреЗрд░рд╛ ^ 9.2
рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ ^ 4.0
рдХреНрд░реЛрдо
рд╕рдлрд╝рд╛рд░реА (v -?)
IE ^ 11.0
рдУрдкреЗрд░рд╛ ^ 15.0
рднрд╛рд╖рд╛ рдХрд╛ рд╕рдорд░реНрдерди
(рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ)
> 120> 100 рд░реБ> реиреж
рдореЗрдВ рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛
рдкрд░ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг
cndjs.com
366 608 (v1.4.3)394,269 (v5.44.0)2,064,949 (v0.16.2)
рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рд╡рдЬрди,
gzip
реи.резрек 2. рдХреЗрдмреАрез.рекрезрез рдХреЗрдмреА10.898 рдХреЗрдмреА
рдкреНрд░рддрд┐рдкрд╛рджрдирдбреЛрдордбреЛрдордбреЛрдо рдФрд░ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ <рдХреИрдирд╡рд╛рд╕>
(рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдФрд░ рдорд┐рдирд┐рдореИрдк рдХреЗ рд▓рд┐рдП)
рдкреНрд░рд▓реЗрдЦрди10 рдореЗрдВ рд╕реЗ 7: рдХреЛрдИ рдЦреЛрдЬ рдирд╣реАрдВ, рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ
рд╡рд╣ рд╡рд┐рдзрд┐рдпрд╛рдВ рд▓реМрдЯрддреА рд╣реИрдВ, рд╕рдВрджреЗрд╣ рд╣реЛрддреЗ рд╣реИрдВ
рдкреВрд░реНрдгрддрд╛ рдФрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдореЗрдВ
(рдбреЙрдХ рдореЗрдВ рд╕рднреА рд▓рд┐рдВрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)
10 рдореЗрдВ рд╕реЗ 6: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрд╛рдЗрдб рдХреЗ рд╕рд╛рде рд╡рд┐рд▓рдп,
Ctrl + F, рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬреЗрдВ
рдкреВрд░реНрдгрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╣ рд╣реИрдВ
10 рдореЗрдВ рд╕реЗ 9: рд╕реБрдВрджрд░, рдЦреЛрдЬ рдХреЗ рд╕рд╛рде рдФрд░
рдкрд╛рд░ рд╕рдВрджрд░реНрдн
-1 рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП рдмрд┐рдВрджреБ
рдХреБрдЫ рдЭрдВрдбреЗ рдЬрд┐рдирдХреЗ рдЖрд╡реЗрджрди
рдирд╛рдо рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ
рдХреНрд╡рд┐рдХрд╕реНрдЯрд╛рд░реНрдЯ рдбреЗрдореЛрдХреИрд╕реЗ, рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкрд╛рда рджрд╕реНрддрд╛рд╡реЗрдЬрд╝,
рдЕрд▓рдЧ рд╕реЗ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдбреЗрдореЛ рд╣реИрдВ
(рд╕рдЪ рд╣реИ, рд╡реЗ рд╡рд┐рднрд┐рдиреНрди рдкреГрд╖реНрдареЛрдВ рдкрд░ рдмрд┐рдЦрд░реЗ рд╣реБрдП рд╣реИрдВ,
рд╣рд░ рдХреЛрдИ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ Google рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдмрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ),
рдПрдХ рдбреЗрдореЛ рд╣реИ рдЬрд╣рд╛рдБ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЫреВ рд╕рдХрддреЗ рд╣реИрдВ,
рд▓реЗрдХрд┐рди UI рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИ
рддреЛ рдлрд┐рд░, рд╣рдореЗрдВ рдЕрднреА рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП
рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП
рдХреИрд╕реЗ-рдХреИрд╕реЗ рдЧрд░реАрдм рд╣реИрдВ
рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдм рдХреБрдЫ рдЧреАрдердм рдкрд░ рдмрд┐рдЦрд░рд╛ рд╣реБрдЖ рд╣реИ
рдФрд░ stackoverflow, рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдбреЗрдореЛ рд╣реИрдВ
рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХреЛрдб
рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрдпреБрдХреНрдд:
рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдФрд░ рдХрдИ рдбреЗрдореЛ, рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рддреБрд░рдВрдд рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВ
рдХрдИ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ
рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдЧрддрд┐рд╡рд┐рдзрд┐рдХреЗрдВрджреНрд░реАрдпрдЙрдЪреНрдЪрдХреЗрдВрджреНрд░реАрдп
рдбреЗрд╡рд▓рдкрд░ рдЧрддрд┐рд╡рд┐рдзрд┐рдХреЗрдВрджреНрд░реАрдпрдХреЗрдВрджреНрд░реАрдпрдЙрдЪреНрдЪ

рдпрд╣ рдЖрдХрд╛рд░ рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдм рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдФрд░ рдХреИрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП: рддреИрдпрд╛рд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд▓реЗрдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд┐рд▓реНрдб (рдЬреЛ рднреА рднрд┐рдиреНрди рд╣реЛ) рдпрд╛ npm рдкреИрдХреЗрдЬ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░реЗрдВред рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдХрд┐рддрдирд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЪрд╛рд╣реЗ рд╕рднреА рд╢реИрд▓рд┐рдпреЛрдВ рдФрд░ рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рдХрд┐рддрдиреЗ рдФрд░ рдХреМрди рд╕реЗ рдРрдб-рдСрди рдФрд░ рдкреНрд▓рдЧ-рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, CodeMirror рдореЗрдВ, рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдореЛрдирд╛рдХреЛ рдФрд░ рдРрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗрд╡рд▓ рдРрдб-рдСрди рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рд╣реИред рддрд╛рд▓рд┐рдХрд╛ CDN рдкрд░ рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЖрджреЗрд╢реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рд╕рдВрдкреАрдбрд╝рд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╡рдЬрди рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИред

рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╕реБрд╡рд┐рдзрд╛рдПрдБ рд╣реИрдВ: рдХреЛрдб рдСрдЯреЛрдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ, рдлреЛрд▓реНрдбрд┐рдВрдЧ рд▓рд╛рдЗрдиреНрд╕, рдХрдЯ / рдХреЙрдкреА / рдкреЗрд╕реНрдЯ, рд╣реЙрдЯ рдХреАрдЬрд╝, рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдФрд░ рдСрд░реНрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЪреЗрдХрд┐рдВрдЧ (рдХреЛрдбрдорд┐рд░рд░ рдореЗрдВ рдХреЗрд╡рд▓ рдРрдб-рдСрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдРрд╕ рдореЗрдВ рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрдм рддрдХред / CoffeeScript / CSS / XQuery), рдЯреВрд▓рдЯрд┐рдкреНрд╕ рдФрд░ рдСрдЯреЛ-рдХрдореНрдкреНрд▓реАрдЯ (рдХреЛрдбрдорд┐рд░рд░ рдореЗрдВ - рдПрдб-рдСрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдПрдбрд╡рд╛рдВрд╕реНрдб рд╕рд░реНрдЪ (рдХреЛрдбрдорд┐рд░рд░ рдореЗрдВ - рдРрдб-рдСрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рдЯреИрдм рдФрд░ рд╕реНрдкреНрд▓рд┐рдЯ-рдореЛрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ, рдЕрдВрддрд░ рдореЛрдб рдФрд░ рдПрдХ рдорд░реНрдЬ рдЯреВрд▓ (CodeMirror рдореЗрдВ) - рдпрд╛ рддреЛ рдПрдХ рдЦрд┐рдбрд╝рдХреА рдореЗрдВ pluses рдФрд░ minuses рдХреЗ рд╕рд╛рде, рдпрд╛ рдПрдХ addon рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЛ-рдкреИрдирд▓, рдРрд╕ - рдЕрд▓рдЧ Lieb)ред рдЗрд╕рдХреА рдЖрдпреБ рдХреЗ рдХрд╛рд░рдг, рдХреЛрдбрдорд┐рд░рд░ рдХреЗ рд▓рд┐рдП рдХрдИ рдРрдб-рдСрди рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рдВрдкрд╛рджрдХ рдХреЗ рд╡рдЬрди рдФрд░ рдЧрддрд┐ рджреЛрдиреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧреАред рдореЛрдирд╛рдХреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдРрд╕ рдФрд░ рдХреЛрдбрдорд┐рд░рд░ рд╕реЗ рдмреЗрд╣рддрд░ рдФрд░ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВред

рд╣рдо рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдореЛрдирд╛рдХреЛ рдореЗрдВ рд░рд╣реЗ:

  1. рд╕рдмрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдЙрдкрдХрд░рдг рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдирд╛:
    • IntelliSense - рдпреБрдХреНрддрд┐рдпрд╛рдВ рдФрд░ рдСрдЯреЛ-рдкреВрд░реНрдг;
    • рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдореЗрдВ рдФрд░ рдиреНрдпреВрдирддрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдорд╛рд░реНрдЯ рдХреЛрдб рдиреЗрд╡рд┐рдЧреЗрд╢рди;
    • рджреЛ-рдкреИрдирд▓ рдЕрдВрддрд░ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдореЛрдбред

  2. рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИред рд╣рдорд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖ Vue + Typescript рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП TS рд╕рдорд░реНрдерди рдорд╣рддреНрд╡рдкреВрд░реНрдг рдерд╛ред рд╡реИрд╕реЗ, рдРрд╕ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЯреАрдПрд╕ рдХрд╛ рд╕рдорд░реНрдерди рднреА рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЬреЗрдПрд╕ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред CodeMirror рдХреЗ рд▓рд┐рдП, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╣реИрдВред
  3. рдЗрд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рд╕рдВрднрд╡рддрдГ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛), рдмрдЧреНрд╕ рдХреЛ рддреЗрдЬреА рд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреВрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд▓рдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдХреЛрдбрдорд┐рд░рд░ рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рдПрдХ рджреБрдЦрдж рдЕрдиреБрднрд╡ рд╣реБрдЖ, рдЬрдм рдмрдЧреНрд╕ рдиреЗ рд╡рд░реНрд╖реЛрдВ рддрдХ рдареАрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдФрд░ рд╣рдордиреЗ рдПрдХ рдмреИрд╕рд╛рдЦреА рдкрд░ рдмреИрд╕рд╛рдЦреА рд▓рдЧрд╛рдИ рдФрд░ рдПрдХ рдмреИрд╕рд╛рдЦреА рдирд┐рдХрд╛рд▓реАред
  4. рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рддрд░реАрдХреЛрдВ рдХреЗ рдмреАрдЪ рдХреНрд░реЙрд╕-рд░реЗрдлрд░реЗрдВрд╕ рдХреЗ рд╕рд╛рде рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдСрдЯреЛ-рдЬрдирд░реЗрдЯ (рдЬреЛ рдЗрд╕рдХреА рдкреВрд░реНрдгрддрд╛ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ) рдкреНрд░рд▓реЗрдЦрдиред
  5. рд╣рдорд╛рд░реЗ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рдпреВрдЖрдИ (рд╢рд╛рдпрдж рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд) рдФрд░ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдПрдкреАрдЖрдИред
  6. рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рджреЛрд╕реНрддреЛрдВ рд╕реЗ рдкреВрдЫрдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рд╕рдВрдкрд╛рджрдХреЛрдВ рдореЗрдВ рд╕реЗ рдХреМрди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рд┐рд░рджрд░реНрдж рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ, рдРрд╕ рдФрд░ рдХреЛрдбрдорд┐рд░рд░ рдиреЗрддрд╛ рдереЗред

рдЕрд▓рдЧ рд╕реЗ, рдпрд╣ рдХрд╛рдо рдХреА рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рд╢реНрд░рдорд┐рдХ рдзрд╛рдЧреЗ рдореЗрдВ рдорд╣рдВрдЧрд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╣реЛрддрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рд╕рднреА рдЧрдгрдирд╛ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдХреЗ рдЖрдХрд╛рд░ рддрдХ рд╕реАрдорд┐рдд рд╣реИрдВ (рд╕рднреА рдкреНрд░рдХрд╛рд░, рд░рдВрдЧ, рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗрд╡рд▓ рдЙрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИрдВ рдЬреЛ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ)ред рдпрд╣ рддрднреА рдмреНрд░реЗрдХ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдХреЛрдб рдореЗрдВ 100,000 рд▓рд╛рдЗрдиреЗрдВ рд╣реЛрддреА рд╣реИрдВ - рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдХрдИ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдРрд╕, рдЬреЛ рднрд╛рд░реА рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╢реНрд░рдорд┐рдХреЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЗрдЬреА рд╕реЗ рдирд┐рдХрд▓рд╛: рд╕рдорд╛рди рд▓рдВрдмрд╛рдИ рдХреЗ рдХреЛрдб рдореЗрдВ, рд╕рдВрдХреЗрдд рд▓рдЧрднрдЧ рддреБрд░рдВрдд рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЬрд▓реНрджреА рд╕реЗ 200,000 рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рддрд╛ рд╣реИ (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдпрд╣ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ 4 рдорд┐рд▓рд┐рдпрди рд▓рд╛рдЗрдиреЗрдВ рднреА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢рд┐рдХрдВрдЬрд╛ рддреНрд╡рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЗрдирдкреБрдЯ рдзреАрдорд╛ рд╣реЛрдиреЗ рд▓рдЧрд╛ рдФрд░ рд╕рдВрдХреЗрдд 1 рдорд┐рд▓рд┐рдпрди рдХреЗ рдмрд╛рдж рдЧрд╛рдпрдм рд╣реЛ рдЧрдП)ред рдХреЛрдбрдорд┐рд░рд░, рдЬрд╣рд╛рдВ рдХреЛрдИ рд╕рдорд╛рдирд╛рдВрддрд░ рдЧрдгрдирд╛ рдирд╣реАрдВ рд╣реИ, рд╢рд╛рдпрдж рд╣реА рдРрд╕реЗ рд╡реЙрд▓реНрдпреВрдо рдХреЛ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ: рдпрд╣ рдЯреЗрдХреНрд╕реНрдЯ рдФрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рджреЛрдиреЛрдВ рдХреЛ рдЭрд┐рд▓рдорд┐рд▓рд╛рд╣рдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ 100,000 рд▓рд╛рдЗрдиреЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рджреБрд░реНрд▓рдн рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЗрд╕ рдкрд░ рдЖрдВрдЦреЗрдВ рдореВрдВрдж рд▓реАрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ 40-50 рд╣рдЬрд╛рд░ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдореЛрдирд╛рдХреЛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореЛрдирд╛рдХреЛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдореВрд▓рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Vue рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг)


рд╕рдВрдмрдВрдз


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

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

рд╣рдордиреЗ рдореЛрдирд╛рдХреЛ-рдПрдбрд┐рдЯрд░ рдФрд░ рдПрдХ рдкреНрд▓рдЧ-рдЗрди рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рд░рдЦрд╛:

npm i -S monaco-editor npm i -D monaco-editor-webpack-plugin 

рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ, рдЬреЛрдбрд╝реЗрдВ:

 const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); module.exports = { // ... plugins: [ // ... new MonacoWebpackPlugin() ] }; 

рдпрджрд┐ рдЖрдк рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Vue рдФрд░ vue-cli-service рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ vue.config.js рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

 const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); module.exports = { // ... configureWebpack: (config) => { // ... config.plugins.push(new MonacoWebpackPlugin()); } }; 

рдпрджрд┐ рдЖрдкрдХреЛ рдмрдВрдбрд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЛрдирд╛рдХреЛ рдХреА рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ MonacoWebpackPlugin рд╕рд╛рде рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 new MonacoWebpackPlugin({ output: '', // ,     languages: ['markdown'], //     ,     features: ['format', 'contextmenu'] //      }) 

рдкреНрд▓рдЧрдЗрди рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдФрд░ рднрд╛рд╖рд╛рдУрдВ рдХреА рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рдпрд╣рд╛рдВ рд╣реИ ред

рдПрдХ рд╕рдВрдкрд╛рджрдХ рдмрдирд╛рдПрдВ рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ


рд╣рдо editor рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ editor.create(el: HTMLElement, config?: IEditorConstructionOptions) , рдЙрд╕ DOM рдПрд▓рд┐рдореЗрдВрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдПрдбрд┐рдЯрд░ рдХреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╕рдВрдкрд╛рджрдХ рдШрдЯрдХ рдореЗрдВ:

 <template> <div ref='editor' class='editor'></div> </template> <script> import {editor} from 'monaco-editor'; import {Component, Prop, Vue} from 'vue-property-decorator'; @Component() export default class Monaco extends Vue { private editor = null; mounted() { this.editor = editor.create(this.$refs.editor); } } </script> <style> .editor { margin: auto; width: 60vw; height: 200px; } </style> 

рд╕рдВрдкрд╛рджрдХ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдКрдВрдЪрд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдпрд╣ рд╢реВрдиреНрдп рди рд╣реЛред рдпрджрд┐ рдЖрдк рдПрдХ рдЦрд╛рд▓реА рдбрд┐рд╡ рдореЗрдВ рд╕рдВрдкрд╛рджрдХ рдмрдирд╛рддреЗ рд╣реИрдВ (рд╢реВрдиреНрдп рдКрдВрдЪрд╛рдИ рдХреЗ рд╕рд╛рде - рдЖрдкрдХрд╛ K.O.), рддреЛ рдореЛрдирд╛рдХреЛ рд╕рдВрдкрд╛рджрдХ рд╡рд┐рдВрдбреЛ рдкрд░ рдЗрдирд▓рд╛рдЗрди рд╢реИрд▓реА рдореЗрдВ рд╕рдорд╛рди рдКрдВрдЪрд╛рдИ рд▓рд┐рдЦреЗрдЧрд╛ред

editor.create рд▓рд┐рдП рджреВрд╕рд░рд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ рд╕рдВрдкрд╛рджрдХ editor.create рд╣реИред рдЗрд╕рдореЗрдВ рд╕реМ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ IEditorConstructionOptions рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рднрд╛рд╖рд╛, рд╡рд┐рд╖рдп рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд╛рда рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд▓рд╛рдЗрди рд░реИрдкрд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВрдЧреЗ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡реЗ рд▓рд┐рдкрдЯреЗ рдирд╣реАрдВ рд╣реИрдВ):

 const config = { value: `function hello() { alert('Hello world!'); }`, language: 'javascript', theme: 'vs-dark', wordWrap: 'on' }; this.editor = editor.create(this.$refs.editor, config); 

Editor.create рдлрд╝рдВрдХреНрд╢рди IStandaloneCodeEditor рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдЖрдк рдЕрдм рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬрд╝ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓рдирд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ:

 //        read-only  this.editor.updateOptions({wordWrap: 'off', readOnly: true}); 

рдЕрдм рджрд░реНрдж рдХреЗ рд▓рд┐рдП: updateOptions рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ IEditorOptions рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ IEditorConstructionOptions рдкрд░ред рд╡реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИрдВ: IEditorConstructionOptions рд╡реНрдпрд╛рдкрдХ рд╣реИ, рдЗрд╕рдореЗрдВ рдЗрд╕ рд╕рдВрдкрд╛рджрдХ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рд▓реЛрдЧреЛрдВ рдХреЗ рдЧреБрдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВред updateOptions рдЧреБрдг updateOptions рдорд╛рдзреНрдпрдо рд╕реЗ рдмрджрд▓реЗ updateOptions , рд╡реИрд╢реНрд╡рд┐рдХ - рд╡реИрд╢реНрд╡рд┐рдХ editor рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдЬреЛ рд▓реЛрдЧ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдмрджрд▓рддреЗ рд╣реИрдВ рд╡реЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдмрджрд▓рддреЗ рд╣реИрдВред рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ theme ред рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╖рдпреЛрдВ рдХреЗ рд╕рд╛рде 2 рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ; рджреЛрдиреЛрдВ рдХрд╛ y рдЖрдЦрд┐рд░реА рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ (рдпрд╣рд╛рдБ рдЕрдВрдзреЗрд░рд╛) рд╣реЛрдЧрд╛ред рд╡реИрд╢реНрд╡рд┐рдХ editor.setTheme('vs') рд╡рд┐рдзрд┐ рднреА рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╖рдп рдХреЛ рдмрджрд▓ рджреЗрдЧреАред рдпрд╣ рдЙрди рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЛ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛ рдЬреЛ рдЖрдкрдХреЗ рдПрд╕рдкреАрдП рдХреЗ рджреВрд╕рд░реЗ рдкреГрд╖реНрда рдкрд░ рд╣реИрдВред рдРрд╕реЗ рдХреБрдЫ рд╕реНрдерд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЙрдирдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

 <template> <div ref='editor1' class='editor'></div> <div ref='editor2' class='editor'></div> </template> <script> // ... this.editor1 = editor.create(this.$refs.editor1, {theme: 'vs'}); this.editor2 = editor.create(this.$refs.editor2, {theme: 'vs-dark'}); // ... </script> 


рд╕рдВрдкрд╛рджрдХ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ


рдЬрдм рдЖрдк рдореЛрдирд╛рдХреЛ рд╡рд┐рдВрдбреЛ рдХреЛ рдирд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ dispose рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рд╕рднреА рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдордВрдЬреВрд░реА рдирд╣реАрдВ рджреА рдЬрд╛рдПрдЧреА рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдж рдмрдирд╛рдИ рдЧрдИ рд╡рд┐рдВрдбреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИрдВ, рдХреБрдЫ рдШрдЯрдирд╛рдУрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реБрдП рдХрдИ рдмрд╛рд░:

 beforeDestroy() { this.editor && this.editor.dispose(); } 

рдЯреИрдм


рдлрд╝рд╛рдЗрд▓ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдЦреБрд▓реЗ рдЯреИрдм рдПрдХ рд╣реА рдореЛрдирд╛рдХреЛ рд╡рд┐рдВрдбреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЙрдирдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, IStandaloneCodeEditor рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдмрдЪрдд рдХреЗ рд▓рд┐рдП setModel рдФрд░ рд╕рдВрдкрд╛рджрдХ рдореЙрдбрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПModelред рдореЙрдбрд▓ рдкреВрд░реНрд╡рд╡рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рда, рдХрд░реНрд╕рд░ рд╕реНрдерд┐рддрд┐, рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЗрддрд┐рд╣рд╛рд╕ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, editor.createModel(text: string, language: string) рд╡реИрд╢реНрд╡рд┐рдХ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдореЙрдбрд▓ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ null рдХреЛ setModel рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдХреЛрдб рджреЗрдЦреЗрдВ
 <template> <div class='tabs'> <div class='tab' v-for="tab in tabs" :key'tab.id' @click='() => switchTab(tab.id)'> {{tab.name}} </div> </div> <div ref='editor' class='editor'></div> </template> <script> import {editor} from 'monaco-editor'; import {Component, Prop, Vue} from 'vue-property-decorator'; @Component() export default class Monaco extends Vue { private editor = null; private tabs: [ {id: 1, name: 'tab 1', text: 'const tab = 1;', model: null, active: true}, {id: 2, name: 'tab 2', text: 'const tab = 2;', model: null, active: false} ]; mounted() { this.editor = editor.create(this.$refs.editor); } private switchTab(id) { const activeTab = this.tabs.find(tab => tab.id === id); if (!activeTab.active) { //    (     )    const model = !activeTab.model && activeTab.text ? editor.createModel(activeTab.text, 'javascript') : activeTab.model; //          this.tabs = this.tabs.map(tab => ({ ...tab, model: tab.active ? this.editor.getModel() : tab.model, active: tab.id === id })); //    this.editor.setModel(model); } } </script> 


рдбрд┐рдл рдореЛрдб


рд╡рд┐рдзрд╛ рдореЛрдб рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдВрдкрд╛рджрдХ рд╡рд┐рдВрдбреЛ рдмрдирд╛рддреЗ рд╕рдордп рдХрд┐рд╕реА рдЕрдиреНрдп editor рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - createDiffEditor :

 <template> <div ref='diffEditor' class='editor'></div> </template> // ... mounted() { this.diffEditor = editor.createDiffEditor(this.$refs.diffEditor, config); } // ... 

рдпрд╣ Editor.create рдХреЗ рд╕рдорд╛рди рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ IDiffEditorConstructionOptions рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдирд┐рдпрдорд┐рдд рд╕рдВрдкрд╛рджрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕рдХрд╛ value рдирд╣реАрдВ рд╣реИред рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдЧреНрд░рдВрдереЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП IStandaloneDiffEditor рджреНрд╡рд╛рд░рд╛ setModel рдХреЗ рдмрд╛рдж рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 this.diffEditor.setModel({ original: editor.createModel('const a = 1;', 'javascript'), modified: editor.createModel('const a = 2;', 'javascript') }); 


рдкреНрд░рд╕рдВрдЧ рдореЗрдиреВ, рдХрдорд╛рдВрдб рдкреИрд▓реЗрдЯ рдФрд░ рд╣реЙрдЯ рдХреА


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

  рдореЛрдирд╛рдХреЛ рд╕рдВрджрд░реНрдн рдореЗрдиреВ 


  рдореЛрдирд╛рдХреЛ рдХрдорд╛рдВрдб рдкреИрд▓реЗрдЯ 


рд╕рдВрджрд░реНрдн рдореЗрдиреВ рдХреЛ addAction рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдпрд╣ IStandaloneCodeEditor рдФрд░ IStandaloneDiffEditor рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ), рдЬреЛ IActionDescriptor рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:

рдХреЛрдб рджреЗрдЦреЗрдВ
 // ... <div ref='diffEditor' :style='{display: isDiffOpened ? "block" : "none"}'></div> // ... //  KeyCode  KeyMod     import {editor, KeyCode, KeyMod} from "monaco-editor"; // ... private editor = null; private diffEditor = null; private isDiffOpened = false; private get activeTab() { return this.tabs.find(tab => tab.active); } mounted() { this.diffEditor = editor.createDiffEditor(this.$refs.diffEditor); this.editor = editor.create(this.$refs.editor); this.editor.addAction({ //  ,     . contextMenuGroupId: '1_modification', //   : 1 - 'navigation', 2 - '1_modification', 3 - '9_cutcopypaste'; //    contextMenuOrder: 3, //       label: 'Show diff', id: 'showDiff', keybindings: [KeyMod.CtrlCmd + KeyMod.Shift + KeyCode.KEY_D], //   // ,     //    run: this.showDiffEditor }); } //      private showDiffEditor() { this.diffEditor.setModel({ original: this.activeTab.initialText, modified: this.activeTab.editedText }); this.isDiffOpened = true; } 


рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрджрд░реНрдн рдХреЗ рдореЗрдиреВ рдореЗрдВ рджрд┐рдЦрд╛рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╢реЙрд░реНрдЯрдХрдЯ рдХреЛ рдХрд┐рд╕реА рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдмрд╛рдБрдзрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ contextMenuGroupId рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ contextMenuGroupId рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдХреЛрдб рджреЗрдЦреЗрдВ
 // ... //   private myActions = [ { contextMenuGroupId: '1_modification', contextMenuOrder: 3, label: <string>this.$t('scenarios.showDiff'), id: 'showDiff', keybindings: [KeyMod.CtrlCmd + KeyMod.Shift + KeyCode.KEY_D], run: this.showDiffEditor }, // ,   Ctrl + C + L      { label: 'Get content length', id: 'getContentLength', keybindings: [KeyMod.CtrlCmd + KeyCode.Key_C + KeyCode.Key_L], run: () => this.editor && alert(this.editor.getValue().length) } ]; mounted() { this.editor = editor.create(this.$refs.editor); this.myActions.forEach(this.editor.addAction); //     } 


рдХрдорд╛рдВрдб рдкреИрд▓реЗрдЯ рдореЗрдВ рд╕рднреА рдЬреЛрдбрд╝реЗ рдЧрдП рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред

рдЯрд┐рдкреНрд╕ рдФрд░ рдСрдЯреЛ-рдкреВрд░реНрдг


рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореЛрдирд╛рдХреЛ IntelliSense рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╢рд╛рдВрдд рд╣реИред рдЖрдк рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдкрд░ рд▓рд┐рдВрдХ рдХреЛ рдкрдврд╝ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╣ рдХрд┐рддрдиреА рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреА рднрд╛рд╖рд╛ рдЕрднреА рддрдХ рд╕реНрд╡рдд: рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ registerCompletionItemProvider рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ JS рдФрд░ TS рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ addExtraLib рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЯреВрд▓рдЯрд┐рдкреНрд╕ рдФрд░ рдСрдЯреЛ-рдкреВрд░реНрдг рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ:

 // ... import {languages} from "monaco-editor"; // ... // ,          private myAddedLib = null; mounted() { // languages     Monaco this.myAddedLib = languages.typescript.javascriptDefaults.addExtraLib('interface MyType {prop: string}', 'myLib'); } beforeDestroy() { //  ,   this.myAddedLib && this.myAddedLib.dispose(); } 

рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ, рд▓рд╛рдЗрди рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ, рджреВрд╕рд░реЗ рдореЗрдВ, рд╡реИрдХрд▓реНрдкрд┐рдХ, рд▓рд┐рдм рдХрд╛ рдирд╛рдоред

рдХрд╕реНрдЯрдо рднрд╛рд╖рд╛ рдФрд░ рд╡рд┐рд╖рдп-рд╡рд╕реНрддреБ


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

рдХреЛрдб рджреЗрдЦреЗрдВ
 // ... //  ,    : private myLanguage = { defaultToken: 'text', //  , brackets: [{ open: '(', close: ')', token: 'bracket.parenthesis' }], // ,   , keywords: [ 'autumn', 'winter', 'spring', 'summer' ], //     tokenizer: { root: [{ regex: /\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}/, action: { token: 'date' } }, { regex: /(boy|girl|man|woman|person)(\s[A-Za-z]+)/, action: ['text', 'variable'] } ] } }; mounted() { //     languages.register({ id: 'myLanguage' }); //      languages.setMonarchTokensProvider('myLanguage', this.myLanguage); // ... } 


рдЖрдк рдЕрдкрдиреЗ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдПрдХ рдереАрдо рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ - IStandaloneThemeData рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ - рдФрд░ рдЗрд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ editor рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

 // ... private myTheme = { base: 'vs', // ,      inherit: true, //       rules: [ {token: 'date', foreground: '22aacc'}, {token: 'variable', foreground: 'ff6600'}, {token: 'text', foreground: 'd4d4d4'}, {token: 'bracket', foreground: 'd4d4d4'} ] }; mounted() { editor.defineTheme('myTheme', this.myTheme); // ... } 

рдЕрдм рд╡рд░реНрдгрд┐рдд рднрд╛рд╖рд╛ рдореЗрдВ рдкрд╛рда рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:


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


рдирд┐рд╖реНрдХрд░реНрд╖


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

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


All Articles