
рд╢реБрдн рджрд┐рди, рдкреНрд░рднрд╛рдордВрдбрд▓! рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдордЪрд╛рди рдкреНрд░рдгрд╛рд▓реА
рдпреЗрдУрдорд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдирд░реЗрдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдереЛрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдерд╛ рдХрд┐ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рд╣рдм рдкрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреЗрд╡рд▓ рджреВрд░ рдХреЗ 2012 рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХреЗ рдЕрд▓рд╛рд╡рд╛:
рдпреЗрдорди.рдЖрдИрдУ ред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдерд╛, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдпреЛрдореЗрди рдЬрдирд░реЗрдЯрд░ рдХреЗ рдЪрд░рдгрдмрджреНрдз рдирд┐рд░реНрдорд╛рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред
рддреБрд░реНрдХ рдЬрдирд░реЗрдЯрд░ (рдЗрд╕рдХреЗ рдмрд╛рдж рдмрд╕ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ) рдПрдХ npm рдкреИрдХреЗрдЬ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рдорджрдж рд╕реЗ рдпреЛрдорди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлреНрд░реЗрдорд╡рд░реНрдХ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ (рдореИрд░рд┐рдпрдирдЯ, рдХреЙрдлрд╝реА, рд╕реИрд╕ + рдХрдореНрдкрд╛рд╕, рдЖрд╡рд╢реНрдпрдХрддрд╛) рдкрд░ рдЙрдкрдпреЛрдЧ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдордЪрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдирд░реЗрдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛
рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ: рд╕реНрдерд╛рдкрд┐рдд
рдиреЛрдбреНрдЬ ,
рдПрдирдкреАрдПрдо ,
рдпреЛрдорди рдФрд░ рдПрдирдкреАрдПрдо-рдкреИрдХреЗрдЬ
рдЬрдирд░реЗрдЯрд░-рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдорд╢реАрдиред
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░рд╛ рдЬрдирд░реЗрдЯрд░ рд╕реНрдерд┐рдд рд╣реЛрдЧрд╛ (рдореИрдВрдиреЗ рдЕрдкрдиреЗ
рдЬрдирд░реЗрдЯрд░-рдкрд┐рдкреЗрдЯреЗрд░ рдХрд╛ рдирд╛рдо рджрд┐рдпрд╛ рд╣реИ)ред
рдпрд╣ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ- рдЙрдкрд╕рд░реНрдЧ , рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреНрдпрдерд╛, рдХрд╛рдо рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдпреЛрдорди рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдЧрд╛ рдЬреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рдЬрдирд░реЗрдЯрд░- <рдЬрдирд░реЗрдЯрд░ рдирд╛рдо> рдкрд░ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЪрд░рдг 1 - рдЬрдирд░реЗрдЯрд░ рдХреЛ рдордЪрд╛рди
рдЬреАрдердм рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдЬрдирд░реЗрдЯрд░ рдХреЗ рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЛ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдмрд╛рдж, рддреБрд░реНрдХ рд╣рдорд╛рд░реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЬрдирд░реЗрдЯрд░ рдХреЗ рдХрдВрдХрд╛рд▓ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рддреБрд░реНрдХ рдиреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рдмрдирд╛рдпрд╛:
рдирд┐рд░реНрджреЗрд╢рдХ:
рдПрдкреНрд▓рд┐рдХреЗрд╢рди - рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬрд╣рд╛рдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд╛рдордЧреНрд░реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣рдорд╛рд░реА рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдВрдЧреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: bower.json, package.json, рд╣рдорд╛рд░реЗ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдЖрджрд┐ред
рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ - рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬреЗрдирд░реЗрдЯрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдкреИрдХреЗрдЬ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рддред рдЬрд╕рди , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЪрд╛рдХ рдпрд╛ рдореЛрдЪрд╛ ред
рдкрд░реАрдХреНрд╖рдг - рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдЭреВрда рд╣реЛрдВрдЧреЗред
рдлрд╛рдЗрд▓реЗрдВ:
.editorconfig - рдПрдХ рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдХреЗ рд▓рд┐рдП рд╡рд┐рдиреНрдпрд╛рд╕
.itattributes - git рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдпрд╛ рдлрд╝рд╛рдЗрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕
.itignore - рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдЬреЛ рдЧрд┐рдЯ рдЗрдВрдбреЗрдХреНрд╕ рдирд╣реАрдВ рдХрд░реЗрдЧреА
.jshintrc - jshint config
package.json - рдЬрдирд░реЗрдЯрд░ рдирд┐рд░реНрднрд░рддрд╛ рдлрд╝рд╛рдЗрд▓
README.md - рдЬреАрдердм рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рд╡рд░рдг рдлрд╝рд╛рдЗрд▓
.travis.yml - CI рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХрд╛ рд╕рдВрдХреЗрдд
рддреЛ, рд╣рдорд╛рд░реЗ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдХрдВрдХрд╛рд▓ рддреИрдирд╛рдд рд╣реИред
рдЪрд░рдг 2 - рд░рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рдВрдкрд╛рджрди
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдЬрдм рдореИрдВ рдПрдХ рдЕрдкрд░рд┐рдЪрд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ, рддреЛ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХрд╣рд╛рдВ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдРрдк рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд index.js рдлрд╝рд╛рдЗрд▓ рд╣реИред рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо package.json рдлрд╝рд╛рдЗрд▓ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВред рдпрджрд┐ --рд╕реНрдХрд╛рдЗрдк-рдЗрдВрд╕реНрдЯреЙрд▓ рдзреНрд╡рдЬ рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдмрд╛рдж, рдкреИрдХреЗрдЬ.рдЬреЙрди рдФрд░ рдмреЛрд╡рд░.рдЬреЗрд╕рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рдПрдВрдЧреАред рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд╣реИ рдирд╛? рдЕрдм рд╣рдо scaffolder рдХреЗ рдорд╛рдирдХ UI рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ AskFor рд╡рд┐рдзрд┐ рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ - рдпрд╣ рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдмрд╛рдж рдкрд╣рд▓рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдорддрджрд╛рди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ (рдФрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ ASCII рдХрд▓рд╛ рднреА рдЦреАрдВрдЪрддрд╛ рд╣реИ)ред рдпрд╣ рд╡рд┐рдзрд┐
рдЗрдВрдХреНрд╡рд╛рдпрд░рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░рд╢реНрди рдмрдирд╛рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЖрдЗрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдЖрд╡реЗрджрди рдХрд╛ рдирд╛рдо:
рд╕реНрд░реЛрдд рдХреЛрдб:
var prompts = [{ type: 'confirm', name: 'someOption', message: 'Would you like to enable this option?', default: true }]; this.prompt(prompts, function (props) { this.someOption = props.someOption; done(); }.bind(this));
рд╕рдВрдкрд╛рджрд┐рдд рдХреЛрдб:
var prompts = [{ type: 'prompt', name: 'appName', message: 'Could you tell me the name of your new project?', }]; this.prompt(prompts, function (answers) { this.appName = answers.appName; done(); }.bind(this));
рдЖрдк
рдЙрдирдХреЗ рднрдВрдбрд╛рд░ рдореЗрдВ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ
, рдЙрджрд╛рд╣рд░рдг рдкреГрд╖реНрда рдкрд░ ред рдпрд╣рд╛рдВ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╡рд╣ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк "рдЖрдЙрдЯ рдСрдл рдж рдмреЙрдХреНрд╕" рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛, рд╕рднреА рдЪрд░ рдЬрдирд░реЗрдЯрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ - рдмрд╛рдж рдореЗрдВ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЪрд░рдг 3 - рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдордЪрд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рд▓рд┐рдЦрдирд╛
рдЕрдм рдЖрдЗрдП рдРрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджреЗрдЦреЗрдВ, рд╣рдорд╛рд░реЗ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рджрд┐рд▓ред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдврд╛рдВрдЪреЗ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:
app: function () { this.mkdir('app'); this.mkdir('app/templates'); this.copy('_package.json', 'package.json'); this.copy('_bower.json', 'bower.json'); }
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рддрд╛рдЬрд╛ рд╣реИ: рд╣рдо рд╕рд┐рд░реНрдл 2 рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ 2 рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИ: sourceRoot рд╕реЗ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдФрд░ targetRoot рдореЗрдВ рдмрдирд╛рдИ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдоред рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП index.html рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореИрдВ рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реВрдЪрдХрд╛рдВрдХ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдореИрдВ рд╕реНрдерд╛рдкрдирд╛ рд╕реЗ рдкрд╣рд▓реЗ рдЪреБрди рд╕рдХрддрд╛ рд╣реВрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо рдПрдХ рдЯреИрдЧ рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдпрд╣ред рдпрд╣рд╛рдВ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЯреЗрдордкреНрд▓реЗрдЯ рдпрд╣рд╛рдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧреАред рдЖрдЗрдП рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдВред рджреЛрдиреЛрдВ рдлрд╝рдВрдХреНрд╢рди
рдХреНрд░рд┐рдпрд╛рдУрдВ / рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЕрд╢реБрджреНрдзрддрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ, рдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде:
рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЗрд╕рдХреА рдорджрдж рд╕реЗ, рд╣рдо рдлрд╝рд╛рдЗрд▓ рдХреЛ sourceRoot рд╕реЗ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рдбреЗрдЯрд╛ рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реЗ targetRoot рдкрд░ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдЪрд▓реЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдРрдк / рдЯреЗрдореНрдкреНрд▓реЗрдЯ) рдХреЗ sourceRoot рдореЗрдВ _index.html рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдЗрд╕
рдЬрд┐рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдРрдк рдлрдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВ:
app: function () { this.mkdir('app'); this.mkdir('app/templates'); this.template('_index.html', 'index.html'); this.copy('_package.json', 'package.json'); this.copy('_bower.json', 'bower.json'); }
рддреЛ рд╣рдо рдЕрдкрдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХрд╣рд╛рдБ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ? рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдбреЗрдЯрд╛ рддреАрд╕рд░реА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╣реИрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрдирд░реЗрдЯрд░ рдХреЗ рджрд╛рдпрд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЬрдм рд╣рдордиреЗ app.ame рдХреЛ рдЗрд╕ .appName рдореЗрдВ рд╢реАрдШреНрд░рддрд╛ рд╕реЗ рд╕рд╣реЗрдЬрд╛ рд╣реИ, рддреЛ рд╣рдордиреЗ рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд╕рднреА рдЯреЗрдореНрдкреНрд▓реЗрдЯ (рдЬрд╣рд╛рдБ рдбреЗрдЯрд╛ рд╣реИрд╢ рд╕реАрдзреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ) рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рд╣реИред рдорд╣рд╛рди, рдЕрдм рд╣рдо рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛ рдХрджрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИред рдЪреВрдВрдХрд┐ рдореИрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдирд░реЗрдЯрд░ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЗрд╕рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реВрдВрдЧрд╛, рдЕрд░реНрдерд╛рддреН:
рдРрдк - рдПрдкреНрд▓реАрдХреЗрд╢рди рд░реВрдЯ
рдРрдк / рдЯреЗрдореНрдкреНрд▓реЗрдЯ - рдЯреЗрдореНрдкреНрд▓реЗрдЯ
рдРрдк / рдХреЛрд░ - рдЖрдзрд╛рд░ рдХрдХреНрд╖рд╛рдПрдВ
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдЖрдо - рд╡рд┐рднрд┐рдиреНрди рдЕрд╢реБрджреНрдзрд┐рдпрд╛рдБ, рдЖрджрд┐ред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╕реНрдЯреЗрдЯрд┐рдХ - рд╕реНрдЯреЗрдЯрд┐рдХреНрд╕ (рдЪрд┐рддреНрд░, рдлреЛрдВрдЯ)
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдШрдЯрдХ - рдШрдЯрдХ
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдореЙрдбреНрдпреВрд▓ - рдореЙрдбреНрдпреВрд▓
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ - рд╢реИрд▓рд┐рдпреЛрдВ
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдкрд░рд┐рд╡рд╛рдж - рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп
рдпрд╣ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рдШрдЯрдХ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдЙрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ: рд╣рдо рдПрдХ рдЬрдирд░реЗрдЯрд░ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдЖрд╡реЗрджрди рдХреЗ рд╡рд╛рд╕реНрддреБ рд╕рдорд╛рдзрд╛рди рдкрд░ рд╣рдорд╛рд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рдЙрдкрдХрд░рдг-рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ? рд╢рд╛рдпрдж рд╣реАред рд╣рдо, рд╕рднреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдкрд▓ рдХреА рдЙрдореНрдореАрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдХрдо рд╕реЗ рдХрдо рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЗ рдиреНрдпреВрдирддрдо рдЪрдпрди рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╣рдорд╛рд░рд╛ рдЬрдирд░реЗрдЯрд░ "рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░" рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ, рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдПрд╕рдПрдПрд╕ + рдХрдореНрдкрд╛рд╕ рд╣реЛрдЧрд╛, рдФрд░ рдЬрдм рднреА рдореИрдВ рдЕрдкрдиреЗ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкреВрдЫрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рд╡рд╣ рдХрд┐рд╕ рддрдХрдиреАрдХ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдФрд░ Gruntfile рдЬреЛрдбрд╝рдирд╛ рдордд рднреВрд▓рдирд╛! рдЗрди рдЕрддрд┐рд░рд┐рдХреНрддрддрд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдорд╛рд░реЗ рдРрдк рд╡рд┐рдзрд┐ рдХрд╛ рдХреЛрдб рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛:
app: function () {
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ, рдореИрдВ рдЕрдВрдд рдореЗрдВ .bowerrc рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рдЗрд╕рдореЗрдВ рдореИрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдРрдк / рд▓рд┐рдмрд╛рд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред
рдЪрд░рдг 4 - рдПрдХ рдЙрдк рдЬрдирд░реЗрдЯрд░ рдмрдирд╛рдирд╛
рдЗрд╕рд▓рд┐рдП, рдмрд╣реБрдд рдЧрд╣рд░рд╛рдИ рд╕реЗ рдирд╣реАрдВ, рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд░рдЪрдирд╛ рдФрд░ index.html рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЬрдирд░реЗрдЯрд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ, рдЬреЛ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╣реЛрдЧрд╛ред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд╣реИ рдирд╛? рд▓реЗрдХрд┐рди рдпреЗрдорди рдФрд░ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИ! рдЪрд▓реЛ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдФрд░ рдирд┐рдЪреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ!
рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рддреБрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ, рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ (рдХрдо рд╕реЗ рдХрдо рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ), рдореИрдВрдиреЗ рдРрдк / рдШрдЯрдХреЛрдВ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдЬреЛрдбрд╝рд╛, рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рдХреБрдЫ рд╕рд╛рд░ рдШрдЯрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ; рдЕрдм рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╕реНрддреГрдд: рдПрдХ рдШрдЯрдХ рджреНрд╡рд╛рд░рд╛ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдПрдорд╡реАрд╕реА рдЬреИрд╕реЗ рдХреЛрдб рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЧрдарди, рдЬреЛ рддрд╛рд░реНрдХрд┐рдХ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рдмреНрд▓реЙрдХ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдХрдИ рдкрдиреНрдиреЛрдВ рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдХреЛрдб рдХреЛ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рдПрдХ рд╕реБрд╕рдВрдЧрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдХрдореЗрдВрдЯрдкреЙрдЗрдВрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рдЗрд╕рдХреЗ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ:
var _this = this; var commentComponent = new CommentComponent; commentComponent.getUserComments({user_id: 1}).done(function(commentsView) { _this.layout.comments.show(commentsView); });
рддрджрдиреБрд╕рд╛рд░, рдпрд╣ рдореБрдЭреЗ рдЪреЛрдЯ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛ рдпрджрд┐ рдореИрдВ рдРрд╕реЗ рдШрдЯрдХреЛрдВ рдХреЛ рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ (рдЖрдЦрд┐рд░рдХрд╛рд░, рдХреЛрдИ рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдмрдирд╛рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?)ред рдЖрдк рдХреИрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рд╣рдорд╛рд░рд╛ рдШрдЯрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ
рддреЛ, рдЖрдЗрдП рддрдп рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдЯреАрдо рдХреНрдпрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдШрдЯрдХреЛрдВ / рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдПрдорд╡реАрд╕реА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдмрдирд╛рдПрдВ, рд╕рд╛рде рд╣реА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдиреНрдпреВрдирддрдо рд╕реЗрдЯ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ:
рдореЙрдбрд▓ / рдЯрд┐рдкреНрдкрдгреА .js
рд╕рдВрдЧреНрд░рд╣ / рдЯрд┐рдкреНрдкрдгреАред js
views / comments.js
рд╡рд┐рдЪрд╛рд░ / рдЯрд┐рдкреНрдкрдгреАред рдЬреЗрдПрд╕
controller.js
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЕрдкрдирд╛ рдЙрдк-рдЬрдирд░реЗрдЯрд░ рдлреНрд░реЗрдо рдмрдирд╛рдПрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдирд┐рдореНрди рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:
рддреЛ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЙрд╕рдиреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рдмрдирд╛рдпрд╛:
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдШрдЯрдХ
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдШрдЯрдХ / index.js
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдШрдЯрдХ / рдЯреЗрдореНрдкрд▓реЗрдЯ / somefile.js
рдЗрд╕рдХреЗ рдореВрд▓ рдореЗрдВ, рдПрдХ рдЙрдк-рдЬрдирд░реЗрдЯрд░ рдПрдХ рд╣реА рд╕рд╛рдзрд╛рд░рдг рдЬрдирд░реЗрдЯрд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣реА рдПрдкреАрдЖрдИ рдФрд░ рд▓рдЧрднрдЧ рдЙрд╕рдХреЗ рдмрдбрд╝реЗ рднрд╛рдИ рдХреЗ рд╕рдорд╛рди рд╕рдВрд░рдЪрдирд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрдм рд╣рдо index.js рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХреНрдпрд╛ рджреЗрдЦрддреЗ рд╣реИрдВ: рд╣рдорд╛рд░рд╛ рдШрдЯрдХ NamedBase рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ 2 рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ: init рдФрд░ filesред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, init рдореЗрдВ рд╣рдореЗрдВ рдХреЙрд▓рд┐рдВрдЧ рдЙрдк-рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдмрдзрд╛рдИ-рд╕рдВрджреЗрд╢ рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рд╣рдо рд╕реАрдзреЗ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рднреА рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рдХреБрдЫ рдирдпрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдлрд╛рдЗрд▓реЗрдВ рдЦреБрдж рд╣реА рдмрдирд╛рдПрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдпрд╣ рдКрдкрд░ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЖрдк
рдпрд╣рд╛рдВ рдореЗрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд░рдг 5 - рд╣рдорд╛рд░рд╛ рдЬреЗрдирд░реЗрдЯрд░ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛
рдЕрдкрдирд╛ рдЬрдирд░реЗрдЯрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ npm рдкреИрдХреЗрдЬ рдХрд╛ рд▓рд┐рдВрдХ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдирд░реЗрдЯрд░ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ, рдЖрдкрдХреЛ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
$ npm link
рдЕрдм рдЬрдм рд▓рд┐рдВрдХ рдмрди рдЧрдпрд╛ рд╣реИ, рд╣рдо рдПрдХ рдкрд░реАрдХреНрд╖рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рд╛:
$ mkdir TestProject && cd $_ && yo puppeteer