рдкрд┐рдЫрд▓реЗ рддреАрди рдпрд╛ рдЪрд╛рд░ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рдЬрдм PHP рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдЧрдИ, рддреЛ рдореИрдВрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП composer
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЕрдм nodejs
рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА nodejs
рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдХ рдкрд░рд┐рдЪрд┐рдд рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВ PhpStorm IDE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреЛ рдЖрдкрдХреЛ PHP рдФрд░ JS рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рднрд╛рдЧ рд▓реЗрддрд╛ рд╣реВрдВ рд╡рд╣ рдмрд╣реБ-рдкреНрд░рддрд┐рд░реВрдкрддрд╛ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмреАрдЪ рд╡рд┐рднрд╛рдЬрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рди рд╣реЛ рдХрд┐ рдЖрд╡реЗрджрди рдХреА рдЕрдВрддрд┐рдо рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рд╢рд┐рдерд┐рд▓ рдпреБрдЧреНрдорд┐рдд рдШрдЯрдХреЛрдВ рдореЗрдВ рдЕрдкрдШрдЯрди рдХреЗ рдХрд╛рд░рдг рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдЬрдм рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░, рдХрдИ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХрдИ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛрддреЗ рд╣реИрдВред

рдПрдХ nodejs
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ рдХреБрдЫ рдРрд╕реЗ рдлреАрдЪрд░реНрд╕ рдорд┐рд▓реЗ рдЬреЛ рдорд▓реНрдЯреА-рдореЙрдбреНрдпреВрд▓ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд╢рди рдХрд╛ рдЬрдиреНрдо рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рд╣реБрдЖ рдерд╛ред рдХрдЯ рдХреЗ рддрд╣рдд, nodejs
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдкрд░ PHP рдХреА рдирдЬрд╝рд░ред
рдбреЗрдореЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд░рдЪрдирд╛
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ 3 рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рдЖрд╡реЗрджрди : рд╕рд┐рд░ рдореЙрдбреНрдпреВрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ;
- рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдореЙрдбреНрдпреВрд▓ : рдЗрд╕рдореЗрдВ рд╣реЗрдб рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдмреБрд▓рд╛рдП рдЧрдП рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реИрдВ;
- рдЖрдзрд╛рд░ рдореЙрдбреНрдпреВрд▓ : рдЗрд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдмреБрд▓рд╛рдП рдЧрдП рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ;

рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрдб github рдкрд░ рд╕реНрдерд┐рдд рд╣реИ:
рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрдХреЛрдВ ( composer.json
package.json
рдФрд░ package.json
) рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рд╡рд┐рд╡рд░рдгрдХ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХреЛ php рдореЙрдбреНрдпреВрд▓ рдФрд░ js рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкреАрдПрдЪрдкреА рдХреЛрдб рдФрд░ рдЬреЗрдПрд╕ рдХреЛрдб рдХреЛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдХрд╛рдЯреЗ рдмрд┐рдирд╛, рдмрд╕ рд╕рд╛рдЗрдб рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдЪрд▓рд╛рдирд╛:
$ php index.php $ nodejs index.js
рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо:
This is application. This is func module. This is base module.
рд▓рдХреНрд╖реНрдпреЛрдВ
рдПрдХ рдХрд╛рдо рдХреЗ рдорд╛рд╣реМрд▓ рдореЗрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЕрдиреБрдорддрд┐ рдЪрд╛рд╣рд┐рдП:
- рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЖрдИрдбреАрдИ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреНрд░реИрдХ;
- IDE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдПрдХ рд╣реА рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВред
- рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХреЛрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбреАрдмрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
composer
рдорд╛рдзреНрдпрдо рд╕реЗ рддреИрдирд╛рддреА
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдкрд░рд┐рдЪрд┐рдд рд╣реИред рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╡рд░реНрдгрдирдХрд░реНрддрд╛ ( рдХрдВрдкреЛрдЬрд╝рд░.рдЬреЙрди ) рдореЗрдВ, рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдкрддреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреА рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ:
{ "require": { "flancer64/habr-cvsn-mod-base": "dev-master as 0.1.0", "flancer64/habr-cvsn-mod-func": "dev-master as 0.1.0" }, "repositories": [ { "type": "vcs", "url": "https://github.com/flancer64/habr-cvsn-mod-base" }, { "type": "vcs", "url": "https://github.com/flancer64/habr-cvsn-mod-func" } ] }
рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж:
$ composer install
рдореЙрдбреНрдпреВрд▓ рд╡рд╛рд▓реЗ ./vendor
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдмрджрд▓реЗ рдореЗрдВ ./vendor
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ:
./vendor/
./flancer64/
./habr-cvsn-mod-base/
./habr-cvsn-mod-base/
рдпрд╣реА рд╣реИ, composer
рддреБрд░рдВрдд рд╡рд┐рдХрд╛рд╕ (рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг) рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд░реВрдк рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ PhpStorm IDE (рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рддрд╣рдд рдЖрд╢реНрд░рд┐рдд рдореЙрдбреНрдпреВрд▓ рдбрд╛рд▓) рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ:

рдФрд░ рдЖрдк рд╕рднреА рд╡рд┐рдХрд╕рд┐рдд рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ:

рдФрд░ рд░рд┐рдореЛрдЯ рдХреЗ рд▓рд┐рдП рдзрдХреНрдХрд╛:

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

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рддрд╛рд╡рд░рдг, рдЪрдкреНрдкрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд░рд╛рдорджрд╛рдпрдХред
Npm рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рддреИрдирд╛рддреА
composer
рд╡рд┐рдкрд░реАрдд composer
npm
рдпрд╣ рдирд╣реАрдВ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ node_modules
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рдХреЛрдИ рднреА рдореЙрдбреНрдпреВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдкреИрдХреЗрдЬ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдмрд╛рд╣рд░реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧрд┐рдерд┐рдм рд╕реЗ) рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
{ "dependencies": { "habr-cvsn-mod-base": "github:flancer64/habr-cvsn-mod-base", "habr-cvsn-mod-func": "github:flancer64/habr-cvsn-mod-func" } }
рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ npm
рдХреЛ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ ( .git
рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛) рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд╛рдиреАрдп рднрдВрдбрд╛рд░ рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред
рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж:
$ npm install
рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд┐рдирд╛ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХреА рдЬрд╛рддреА рд╣реИрдВ:

(рдЕрдиреБрдкрд▓рдмреНрдз рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ ./.git/
./node_modules/habr-cvsn-mod-base/
)
рд▓реЗрдХрд┐рди рдбрд┐рдмрдЧрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдЖрдзрд╛рд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

рд▓рд┐рдВрдХ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ npm рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреИрдирд╛рдд рдХрд░реЗрдВ
рддрд╛рдХрд┐ рдореЙрдбреНрдпреВрд▓ ./node_modules/
рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХреЗ, npm
рдбреЗрд╡рд▓рдкрд░реНрд╕ ' рд▓рд┐рдВрдХ ' рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЬрд┐рди рдореЙрдбреНрдпреВрд▓реЛрдВ рдХреЛ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЙрдиреНрд╣реЗрдВ рдбреЗрд╡рд▓рдкрд░ рдХреА рдбрд┐рд╕реНрдХ рдкрд░ рдПрдХ рдордирдорд╛рдирд╛ рд╕реНрдерд╛рди рдкрд░ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, /home/alex/work/habr/
), рдФрд░ рдлрд┐рд░ /usr/lib/node_modules/
рд▓рд┐рдВрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
# npm link
(рдореБрдЭреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдЪрд╛рд╣рд┐рдП)
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
$ npm link habr-cvsn-mod-base $ npm link habr-cvsn-mod-func
/usr/lib/node_modules/
рдХреЛ /usr/lib/node_modules/
рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдореЙрдбреНрдпреВрд▓ /usr/lib/node_modules/
рдФрд░ рдЙрдирд╕реЗ ./node_modules/
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдБ рдмрдВрдж рдХрд░ рджреЗрдВред
$ ls -lh ./node_modules/ total 0 lrwxrwxrwx 1 alex alex 57 j┼лl 2 16:18 habr-cvsn-mod-base -> ../../../../../../usr/lib/node_modules/habr-cvsn-mod-base lrwxrwxrwx 1 alex alex 57 j┼лl 2 16:18 habr-cvsn-mod-func -> ../../../../../../usr/lib/node_modules/habr-cvsn-mod-func
рдореЙрдбреНрдпреВрд▓ /usr/lib/node_modules/
рдЦреБрдж, рдмрджрд▓реЗ рдореЗрдВ, рдореЙрдбреНрдпреВрд▓ рдХреЗ рдореВрд▓ рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдВрдХ рд╣реИрдВ:
$ ls -lh /usr/lib/node_modules/ ... lrwxrwxrwx 1 root root 39 j┼лl 2 16:18 habr-cvsn-mod-base -> /home/alex/work/habr/habr-cvsn-mod-base lrwxrwxrwx 1 root root 39 j┼лl 2 16:18 habr-cvsn-mod-func -> /home/alex/work/habr/habr-cvsn-mod-func ...
рдФрд░ рдЙрдирдХреЗ рд╕реНрдерд╛рдпреА рд╕реНрдерд╛рди рдореЗрдВ, "рдкрдВрдЬреАрдХрд░рдг" рдореЗрдВ рдПрдХ рд╕реНрдерд╛рдиреАрдп рднрдВрдбрд╛рд░ рд╣реЛрддрд╛ рд╣реИ:
$ ls -lha /home/alex/work/habr/habr-cvsn-mod-base ... drwxrwxr-x 8 alex alex 4,0K j┼лl 2 16:18 .git ...
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП IDE рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдЬрдм рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ:
$ nodejs index.js internal/modules/cjs/loader.js:670 throw err; ^ Error: Cannot find module 'habr-cvsn-mod-base' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:668:15) at Function.Module._load (internal/modules/cjs/loader.js:591:27) at Module.require (internal/modules/cjs/loader.js:723:19) at require (internal/modules/cjs/helpers.js:14:16) at Object.<anonymous> (/home/alex/work/habr/habr-cvsn-mod-func/src/index.js:3:14) ...
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдореЙрдбреНрдпреВрд▓ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдореЙрдбреНрдпреВрд▓ рд╕реНрд╡рдпрдВ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рдмреБрдирд┐рдпрд╛рджреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реИред рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП -preserve-symlinks рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
$ nodejs --preserve-symlinks index.js
IDE рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реЙрдиреНрдЪ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдЬреЛрдбрд╝реЗрдВ:

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

рдЖрдИрдбреАрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдХреИрд╢ рдлреНрд▓рд╢ рд╣реЛ рдЧрдпрд╛, рдЖрдИрдбреАрдИ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ)ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕ рдкреНрд░рдХрд╛рд╢рди рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЬреЗрдПрд╕-рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдХрд╛ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдХрд░рдирд╛ рдерд╛ рдХрд┐ рд╡реЗ рдПрдХ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреИрд╕реЗ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╕рдВрдпреЛрдЬрди рд╕рд╛рдордиреЗ рдЖрдпрд╛:
рдПрдирдкреАрдПрдо-рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЖрдВрддрд░рд┐рдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХреНрд▓реЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ composer
рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ ./vendor/
рд╕рдмрдбрд╛рдпрд░реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдмрдЬрд╛рдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рд╣рд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдмрдВрдзреЗ рд╣реЛрдиреЗ рдХреЗ, рддреЛ js рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ --preserve-symlinks
рдмрд┐рдирд╛ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, PhpStorm IDE рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рд╡рд┐рд░рд╛рдо рдмрд┐рдВрджреБ рджреЗрдЦрддрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдХреНрд▓реЛрдирд┐рдВрдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП composer
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдореИрдВрдиреЗ рд╕рд╛рдорд╛рдиреНрдп git
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ ./own_modules
рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ред рдлрд┐рд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рд╕реЗ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛:
- рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдЬреБрдбрд╝реЗ
./own_modules/...
рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА /usr/lib/node_modules/
; - рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЬреБрдбрд╝реЗ рдореЙрдбреНрдпреВрд▓;
./own_modules/
рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ./own_modules/
IDE рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛;

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдХреНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрд╢реНрд░рд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдВрджрд░ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдЙрд╕ рд╕рдордп рд╕реЗ рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрд╢реНрд░рд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд╣рд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВред
рд╕рд╛рд░рд╛рдВрд╢
рдорд▓реНрдЯреА-рдореЙрдбреНрдпреВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди ( composer
рд╕рд╛рде PHP рдФрд░ npm
рд╕рд╛рде рдЬреЗрдПрд╕) рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ composer
npm
рддреБрд▓рдирд╛ composer
рдЕрдзрд┐рдХ рдбреЗрд╡рд▓рдкрд░ рдЕрдиреБрдХреВрд▓ рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ composer
рдбреЗрд╡рд▓рдкрд░реНрд╕ (2012 рдореЗрдВ рдкрд╣рд▓реА рд░рд┐рд▓реАрдЬ) рдиреЗ npm
рдбреЗрд╡рд▓рдкрд░реНрд╕ (2010 рдореЗрдВ рдкрд╣рд▓реА рд░рд┐рд▓реАрдЬ) рдХреЗ рдЕрдиреБрднрд╡ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рд╕рд╛рде, npm
рднреА рдХрд╛рдлреА рдЖрд░рд╛рдорджрд╛рдпрдХ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдорд▓реНрдЯреА-рдореЙрдбреНрдпреВрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ: