{"id":252222,"date":"2015-03-02T17:36:02","date_gmt":"2015-03-02T13:36:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=252222"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=252222","title":{"rendered":"\u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u043e\u0441\u0442 \u043e \u0441\u0431\u043e\u0440\u043a\u0435 front-end \u043f\u0440\u043e\u0435\u043a\u0442\u0430"},"content":{"rendered":"\n<p>  \u042f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u0431\u043e\u0440\u043a\u0438 \u0444\u0440\u043e\u043d\u0442\u0430. \u0417\u0430\u0434\u0430\u0447\u0430 \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0438 \u0441\u0442\u043e\u0438\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e \u043d\u0435\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c.<\/p>\n<p>  \u0427\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u0449\u0438\u043a:<br \/>\n    \u0421\u043e\u0431\u0438\u0440\u0430\u0442\u044c front-end \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043b\u044f development &#038; production \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439.  \u0421\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e js\/css \u0431\u0430\u043d\u0434\u043b\u043e\u0432 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442.  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0438\u043b\u044c CommonJS \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c ES6-\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441.  \u0421\u043f\u0440\u0430\u0439\u0442\u044b, \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435  <\/p>\n<p>  \u0412\u0441\u0442\u0443\u043f\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435<br \/>\n  \u0427\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0439 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u043c\u044b\u0441\u043b\u044c\u044e, \u0441\u0440\u0430\u0437\u0443 \u043a\u0438\u0434\u0430\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0430: github.com\/alexfedoseev\/js-app-starter<\/p>\n<p>  \u041a\u0430\u043a \u0435\u0433\u043e \u0437\u0430\u0432\u0435\u0441\u0442\u0438\u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d npm.<br \/>\n  npm -v <\/p>\n<p>  \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 (\u0435\u0441\u043b\u0438 \u0435\u0449\u0451 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b):<br \/>\n  npm install -g gulp browserify babel jade stylus http-server <\/p>\n<p>  \u0421\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0444\u043e\u0440\u043a \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f.<br \/>\n  git clone https:\/\/github.com\/alexfedoseev\/js-app-starter.git <\/p>\n<p>  \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0432 \u043a\u043e\u0440\u043d\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f):<br \/>\n  npm install <\/p>\n<p>  \u0421\u043e\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 development \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440:<br \/>\n  npm start <\/p>\n<p>  \u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043d\u0430 lvh.me:3500<\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Gulp.<br \/>\n  \u0427\u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043a\u0430\u043a\u0438\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f:<br \/>\n    \u0421\u0431\u043e\u0440\u043a\u0430 HTML<br \/>\n   \u0428\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440: Jade  \u0421\u0431\u043e\u0440\u043a\u0430 CSS<br \/>\n   \u041f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440: Stylus<br \/>\n   \u041f\u0440\u0435\u0444\u0438\u043a\u0441\u0435\u0440: Autoprefixer  \u0421\u0431\u043e\u0440\u043a\u0430 JS<br \/>\n   \u041c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430: Browserify + Babel (ES6 transpiler)<br \/>\n   \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430: jsHint  \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439<br \/>\n   \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440: Imagemin  \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438: \u0441\u0431\u043e\u0440\u043a\u0430 \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 json, \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u043e\u043d\u0442\u043e\u0432 \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 public \u043f\u0430\u043f\u043a\u0443<br \/>\n   \u0421\u0431\u043e\u0440\u0449\u0438\u043a \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432: Spritesmith<br \/>\n   \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 json: gulp-json-editor<br \/>\n  \u0412\u043e\u0431\u0449\u0435 \u044f \u043b\u044e\u0431\u043b\u044e Slim \u0438 Sass, \u043d\u043e Ruby \u043a Ruby, a JS \u043a JS: \u0434\u043b\u044f frontend-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0448\u0442\u0443\u043a\u0438 \u0438\u0437 npm. \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043b\u044e\u0431\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c.<\/p>\n<p>  \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<br \/>\n  | dist\/  | lib\/   |&#8212; gulp\/       |&#8212; helpers\/       |&#8212; tasks\/       |&#8212; config.js  | node_modules\/  | public\/   |&#8212; css\/   |&#8212; files\/   |&#8212; fonts\/   |&#8212; img\/   |&#8212; js\/   |&#8212; json\/   |&#8212; favicon.ico   |&#8212; index.html  | src\/   |&#8212; css\/   |&#8212; files\/   |&#8212; fonts\/   |&#8212; html\/   |&#8212; img\/   |&#8212; js\/   |&#8212; json\/   |&#8212; sprite\/   |&#8212; favicon.ico  | .gitignore | .npmignore | gulpfile.js | npm-shrinkwrap.json | package.json  Github<\/p>\n<p>  .gitignore &#038; .npmignore<br \/>\n  \u0412\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f git \u0438 npm \u043f\u0440\u0438 \u043a\u043e\u043c\u043c\u0438\u0442\u0430\u0445\/\u043f\u0430\u0431\u043b\u0438\u0448\u0430\u0445.<\/p>\n<p>  node_modules\/<br \/>\n  \u0412 \u044d\u0442\u0443 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u043f\u0430\u0434\u0430\u044e\u0442 \u0432\u0441\u0435 \u043c\u043e\u0434\u0443\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0447\u0435\u0440\u0435\u0437 npm.<\/p>\n<p>  npm-shrinkwrap.json<br \/>\n  \u042f \u043d\u0435 \u0434\u0435\u0440\u0436\u0443 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 node_modules\/. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043b\u043e\u0447\u0443 \u0432\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b. \u041e\u043d \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439: `npm shrinkwrap`.<\/p>\n<p>  package.json<br \/>\n  \u042d\u0442\u043e \u0444\u0430\u0439\u043b \u0441 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041a \u043d\u0435\u043c\u0443 \u0435\u0449\u0451 \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f.<\/p>\n<p>  gulpfile.js<br \/>\n  \u041e\u0431\u044b\u0447\u043d\u043e \u0442\u0443\u0442 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u0441\u0435 \u0442\u0430\u0441\u043a\u0438 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0441 \u0434\u0430\u043b\u044c\u0448\u0435 \u0432 \u043f\u0430\u043f\u043a\u0443 \u0441 gulp-\u0442\u0430\u0441\u043a\u0430\u043c\u0438.<\/p>\n<p>  lib\/gulp\/<br \/>\n  \u0417\u0434\u0435\u0441\u044c \u0445\u0440\u0430\u043d\u0438\u043c \u0432\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430.<\/p>\n<p>  |&#8212; config.js<br \/>\n  \u0412\u044b\u043d\u043e\u0441\u0438\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0430\u0441\u043a\u043e\u0432 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0447\u0442\u043e\u0431\u044b \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u043a\u0443 \u0441\u0430\u043c\u0438\u0445 \u0442\u0430\u0441\u043a\u043e\u0432.<\/p>\n<p>  |&#8212; helpers\/<br \/>\n  \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430.<\/p>\n<p>  |&#8212; tasks\/<br \/>\n  \u0418 \u0441\u0430\u043c\u0438 gulp-\u0442\u0430\u0441\u043a\u0438.<\/p>\n<p>  src\/<br \/>\n  \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>  public\/<br \/>\n  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0431\u043e\u0440\u043a\u0438. \u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0432\u0441\u0451 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u044d\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c \u0438 \u043f\u0435\u0440\u0435\u0434 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u043e\u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0443\u0442 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0445\u0440\u0430\u043d\u0438\u043c.<\/p>\n<p>  dist\/<br \/>\n  \u0418\u043d\u043e\u0433\u0434\u0430 \u044f \u043f\u0438\u0448\u0443 opensource-\u043c\u043e\u0434\u0443\u043b\u0438. \u0412 \u044d\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0438 \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 js-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f public\/ \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043b\u044f \u0434\u0435\u043c\u043a\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0441\u0430\u0439\u0442 \u0438\u043b\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043f\u0440\u0438\u0437\u0435\u043c\u043b\u0435\u043d\u0438\u044f, \u0442\u043e \u043e\u043d\u043e \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f.<\/p>\n<p>  \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<br \/>\n  package.json<br \/>\n  \u042d\u0442\u043e \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<br \/>\n  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0435\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0443\u0442: browsenpm.org\/package.json<br \/>\n  \u041d\u0438\u0436\u0435 \u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0430\u0436\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u044f\u0445.<\/p>\n<p>  {   \/\/ \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430   &quot;name&quot;: &quot;js-app-starter&quot;,    \/\/ \u0412\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430   \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \/ \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f js+css \u0432 \u043a\u044d\u0448\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0431\u043e\u0440\u043a\u0438   &quot;version&quot;: &quot;0.0.1&quot;,    \/\/ \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0438\u0448\u0435\u0442\u0435 js-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0442\u043e \u0442\u0443\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443,   \/\/ \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 `require(&#8216;your-lib&#8217;)`   &quot;main&quot;: &quot;.\/dist\/app.js&quot;,    \/\/ \u041d\u0430\u0441\u0442\u043e\u0439\u043a\u0438 browserify   \/\/ \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c ES6 \u0432 ES5   &quot;browserify&quot;: {     &quot;transform&quot;: [       &quot;babelify&quot;     ]   },    \/\/ \u041a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043d\u0438\u0436\u0435)   &quot;scripts&quot;: {     &quot;start&quot;: &quot;NODE_ENV=development http-server -a lvh.me -p 3500 &#038; gulp&quot;,     &quot;build&quot;: &quot;NODE_ENV=production gulp build&quot;   },    \/\/ \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 jshint (\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430)   &quot;lintOptions&quot;: {     &quot;esnext&quot;: true     &#8230;   },    \/\/ Frontend \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438   &quot;dependencies&quot;: {     &quot;jquery&quot;: &quot;^2.1.3&quot;     &#8230;   },    \/\/ Development \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438   &quot;devDependencies&quot;: {     &quot;gulp&quot;: &quot;^3.8.11&quot;    &#8230;   } } Github<\/p>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<br \/>\n  \u0412 package.json \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0430\u043b\u0438\u0430\u0441\u044b \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0435\u043c \u0447\u0430\u0441\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<p>  &quot;scripts&quot;: {   &quot;start&quot;: &quot;NODE_ENV=development http-server -a lvh.me -p 3500 &#038; gulp&quot;,   &quot;build&quot;: &quot;NODE_ENV=production gulp build&quot; } <\/p>\n<p>  Development \u0441\u0431\u043e\u0440\u043a\u0430<br \/>\n  \u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e:<br \/>\n    \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0435\u0433\u043e \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 (\u0441 sourcemaps \u0434\u043b\u044f \u0434\u0435\u0431\u0430\u0433\u0430)  \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u00ab\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u0435\u0439\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432  \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440<br \/>\n  # \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c npm start  # \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 NODE_ENV=development http-server -a lvh.me -p 3500 &#038; gulp<br \/>\n  \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u043e \u0447\u0430\u0441\u0442\u044f\u043c# \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f NODE_ENV=development  # \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u0434\u043e\u043c\u0435\u043d\u0435 lvh.me \u0438 \u043f\u043e\u0440\u0442\u0435 3500 http-server -a lvh.me -p 3500  # \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c gulp \u0442\u0430\u0441\u043a\u0438 gulp <\/p>\n<p>  Production \u0441\u0431\u043e\u0440\u043a\u0430<br \/>\n  \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u0440\u0435\u043b\u0438\u0437\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u2014 \u0434\u0435\u043b\u0430\u0435\u043c production-\u0441\u0431\u043e\u0440\u043a\u0443.<\/p>\n<p>  # \u043d\u0430\u0436\u043c\u0438\u0442\u0435 Ctrl+C, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u0435\u0439, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b  # \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c npm run build  # \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 NODE_ENV=production gulp build<br \/>\n  \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u043e \u0447\u0430\u0441\u0442\u044f\u043c# \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f NODE_ENV=production  # \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c gulp-\u0442\u0430\u0441\u043a `build` gulp build <\/p>\n<p>  Gulp<br \/>\n  \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a Gulp. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0442\u0430\u0441\u043a\u043e\u0432 \u0432\u0437\u044f\u0442\u0430 \u0438\u0437 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u043e\u0442 Dan Tello.<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u043d\u044b\u0440\u043d\u0443\u0442\u044c, \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e gulp-\u0442\u0430\u0441\u043a\u0430:<\/p>\n<p>  var gulp = require(&#8216;gulp&#8217;);  gulp.task(&#8216;task_1&#8217;, [&#8216;pre_task_1&#8217;, &#8216;pre_task_2&#8217;], function() {   console.log(&#8216;task_1 is done&#8217;); });  \/\/ \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0438 `task_1`, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 `task_1 is done` \/\/ \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043e\u043d \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 `gulp task_1` \/\/ \u041d\u043e \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e `task_1` \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c\u0441\u044f \u0437\u0430\u0434\u0430\u0447\u0438 `[&#8216;pre_task_1&#8217;, &#8216;pre_task_2&#8217;]` \/\/ \u0412\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e &#8216;pre_task_1&#8217; &#038; &#8216;pre_task_2&#8217; &#8212; \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e, \/\/ \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435, \/\/ \u0430 `task_1` \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 2 pre-\u0437\u0430\u0434\u0430\u0447\u0438 &#8212; \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e  <\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0447\u0442\u043e \u0438 \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c.<\/p>\n<p>  Development \u0441\u0431\u043e\u0440\u043a\u0430<br \/>\n  `npm start` \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 `gulp`. \u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u043b\u044c\u0448\u0435:<\/p>\n<p>    Gulp \u0438\u0449\u0435\u0442 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 gulpfile.js. \u041e\u0431\u044b\u0447\u043d\u043e \u0432 \u043d\u0435\u0433\u043e \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0442\u0430\u0441\u043a\u0438, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0438\u0442 \u043d\u0430\u0441 \u0434\u0430\u043b\u044c\u0448\u0435 \u0432 \u043f\u0430\u043f\u043a\u0443 \u0441 gulp-\u0442\u0430\u0441\u043a\u0430\u043c\u0438.<\/p>\n<p>  \u041a\u043e\u0434 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438\/* file: gulpfile.js *\/  \/\/ \u043c\u043e\u0434\u0443\u043b\u044c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0442\u0430\u0441\u043a\u0438 \u0438\u0437 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 var requireDir = require(&#8216;require-dir&#8217;);  \/\/ \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \/\/ \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c \u0432 \u0442\u0430\u0441\u043a\u0430\u0445 development &#038; production \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f global.devBuild = process.env.NODE_ENV !== &#8216;production&#8217;;  \/\/ \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u0432 \u043f\u0430\u043f\u043a\u0443 \u0441 \u0442\u0430\u0441\u043a\u0430\u043c\u0438 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c requireDir(&#8216;.\/lib\/gulp\/tasks&#8217;, { recurse: true }); Github<\/p>\n<p>    \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043d\u0430\u0441 \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0438\u043b\u043e \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u0438\u0449\u0435\u0442 \u0442\u0430\u0441\u043a \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c `default`, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u00ab\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u0435\u0439\u00bb \u043d\u0430\u0434 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438, \u043f\u043e\u0442\u043e\u043c:<br \/>\n    \u043e\u0447\u0438\u0449\u0430\u0435\u0442 \u043f\u0430\u043f\u043a\u0438 `public\/` &#038; `dist\/`  \u043b\u0438\u043d\u0442\u0438\u0442 js-\u0444\u0430\u0439\u043b\u044b  \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u043f\u0440\u0430\u0439\u0442\u044b<br \/>\n  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442 (html, css, js \u0438 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435).<\/p>\n<p>  \u041a\u043e\u0434 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438default<\/p>\n<p>  \/* file: lib\/gulp\/tasks\/default.js *\/  var gulp = require(&#8216;gulp&#8217;);  \/\/ \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0439 \u0442\u0430\u0441\u043a `default`, \u043d\u043e \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0442\u0430\u0441\u043a `watch` gulp.task(&#8216;default&#8217;, [&#8216;watch&#8217;]);  Github<\/p>\n<p>  watch<\/p>\n<p>  \/* file: lib\/gulp\/tasks\/watch.js *\/  var gulp   = require(&#8216;gulp&#8217;),     finder = require(&#8216;..\/helpers\/finder&#8217;),  \/\/ \u0445\u0435\u043b\u043f\u0435\u0440 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0444\u0430\u0439\u043b\u043e\u0432     config = require(&#8216;..\/config&#8217;);          \/\/ \u043a\u043e\u043d\u0444\u0438\u0433  \/\/ \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0442\u0430\u0441\u043a `watch`, \u043f\u0435\u0440\u0435\u0434 \u043d\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0442\u0430\u0441\u043a\u0438 `watching` &#038; `build` gulp.task(&#8216;watch&#8217;, [&#8216;watching&#8217;, &#8216;build&#8217;], function() {    \/\/ \u0412\u0435\u0448\u0430\u0435\u043c \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f\u0445 `css`, `images` &#038; `html`    \/\/ \u041f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 gulp \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0442\u0430\u0441\u043a   gulp.watch(finder(config.css.src),  [&#8216;css&#8217;]);   gulp.watch(finder(config.images.src), [&#8216;images&#8217;]);   gulp.watch(finder(config.html.src), [&#8216;html&#8217;]);  });  gulp.task(&#8216;watching&#8217;, function() {    \/\/ \u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e `isWatching`,    \/\/ \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b   global.isWatching = true;  });  Github<\/p>\n<p>  build<\/p>\n<p>  \/* file: lib\/gulp\/tasks\/build.js *\/  var gulp = require(&#8216;gulp&#8217;);   \/\/ \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0442\u0430\u0441\u043a `build`, \u043f\u0435\u0440\u0435\u0434 \u043d\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0442\u0430\u0441\u043a\u0438:  \/\/ `clean`  &#8212; \u043f\u0435\u0440\u0435\u0434 \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 `public\/` &#038; `dist\/` \/\/ `lint`   &#8212; \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f jshint \u043f\u043e js-\u0444\u0430\u0439\u043b\u0430\u043c (\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430)  \/\/ `sprite` &#8212; \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u043f\u0440\u0430\u0439\u0442\u044b gulp.task(&#8216;build&#8217;, [&#8216;clean&#8217;, &#8216;lint&#8217;, &#8216;sprite&#8217;], function() {    \/\/ \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0442\u0440\u0438 \u0442\u0430\u0441\u043a\u0430 \u0432\u044b\u0448\u0435, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u0441\u043a `bundle`   \/\/ \u0412\u043e\u0431\u0449\u0435 \u043c\u0435\u0442\u043e\u0434 `gulp.start` deprecated,    \/\/ \u043d\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 sync\/async \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 Gulp 4.0,   \/\/ \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u043e\u043a\u0430 \u0435\u0433\u043e   gulp.start(&#8216;bundle&#8217;);  });  \/\/ \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 gulp.task(&#8216;bundle&#8217;, [&#8216;scripts&#8217;, &#8216;css&#8217;, &#8216;images&#8217;, &#8216;html&#8217;, &#8216;copy&#8217;], function() {    \/\/ \u0415\u0441\u043b\u0438 \u043c\u044b \u0432 dev-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438, \u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 `doBeep` = true   \/\/ `notifier` \u0445\u0435\u043b\u043f\u0435\u0440 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u043d\u0430\u043c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0438\u043b\u0438 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0430\u0441\u043a\u043e\u0432    \/\/ (\u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0438 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u043c \u0431\u0430\u043d\u043d\u0435\u0440\u043e\u043c)   if (devBuild) global.doBeep = true;  });  Github<br \/>\n  Production \u0441\u0431\u043e\u0440\u043a\u0430<br \/>\n  \u0421 \u043d\u0435\u0439 \u0432\u0441\u0451 \u043f\u0440\u043e\u0449\u0435. `npm run build` \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 `gulp build`, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0447\u0438\u0449\u0430\u0435\u0442 \u0446\u0435\u043b\u0435\u0432\u044b\u0435 \u043f\u0430\u043f\u043a\u0438, \u043b\u0438\u043d\u0442\u0438\u0442 js-\u043a\u043e\u0434, \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u043f\u0440\u0430\u0439\u0442\u044b \u0438 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0431\u0438\u0440\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 (\u0431\u0435\u0437 sourcemaps). \u041a\u043e\u0434 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438 \u0432\u044b\u0448\u0435.<\/p>\n<p>  \u0424\u0430\u0439\u043b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 gulp-\u0442\u0430\u0441\u043a\u043e\u0432<br \/>\n  \u0412\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0442\u0430\u0441\u043a\u043e\u0432 \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u044b \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b lib\/gulp\/config.js:<\/p>\n<p>  \/* file: lib\/gulp\/config.js *\/  var pkg     = require(&#8216;..\/..\/package.json&#8217;),   \/\/ \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c package.json     bundler = require(&#8216;.\/helpers\/bundler&#8217;);    \/\/ \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0445\u0435\u043b\u043f\u0435\u0440 \u0434\u043b\u044f \u0441\u043e\u0437\u043b\u0430\u043d\u0438\u044f \u0431\u0430\u043d\u0434\u043b\u043e\u0432   \/* \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u0443\u0442\u0438 *\/  var _src    = &#8216;.\/src\/&#8217;,     \/\/ \u043f\u0443\u0442\u044c \u0434\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432     _dist   = &#8216;.\/dist\/&#8217;,    \/\/ \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438     _public = &#8216;.\/public\/&#8217;;  \/\/ \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0441\u0430\u0439\u0442 \u0438\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438  var _js     = &#8216;js\/&#8217;,        \/\/ \u043f\u0430\u043f\u043a\u0430 \u0441 javascript \u0444\u0430\u0439\u043b\u0430\u043c\u0438     _css    = &#8216;css\/&#8217;,       \/\/ \u043f\u0430\u043f\u043a\u0430 \u0441 css     _img    = &#8216;img\/&#8217;,       \/\/ \u043f\u0430\u043f\u043a\u0430 \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u043c\u0438     _html   = &#8216;html\/&#8217;;      \/\/ \u043f\u0430\u043f\u043a\u0430 \u0441 html   \/*   * \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c js \/ css \u0431\u0430\u043d\u0434\u043b\u044b   *  * \u041f\u0440\u0438\u043c\u0435\u0440: app.js, app.css     &#8212; \u0441\u0430\u0439\u0442  *         admin.js, admin.css &#8212; \u0430\u0434\u043c\u0438\u043d\u043a\u0430  *  * \u041f\u0440\u0438\u043c\u0435\u0440: your-lib.js        &#8212; \u043c\u043e\u0434\u0443\u043b\u044c \u0431\u0435\u0437 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439  *         your-lib.jquery.js &#8212; \u043c\u043e\u0434\u0443\u043b\u044c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 jquery-\u043f\u043b\u0430\u0433\u0438\u043d\u0430  *  *\/  var bundles = [   {     name        : &#8216;app&#8217;, \/\/ \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0431\u0430\u043d\u0434\u043b\u0430     global      : &#8216;app&#8217;, \/\/ \u0435\u0441\u043b\u0438 \u043f\u0438\u0448\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044c, \u044d\u0442\u043e \u0438\u043c\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0451\u043d     compress    : true,  \/\/ \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c?     saveToDist  : true   \/\/ \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 `\/dist`? (true &#8212; \u0435\u0441\u043b\u0438 \u043f\u0438\u0448\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044c, false &#8212; \u0435\u0441\u043b\u0438 \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0430\u0439\u0442)   } ];   module.exports = {    \/* \u0442\u0443\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0430\u0441\u043a\u043e\u0432 *\/  }; Github<\/p>\n<p>  \u0421\u0431\u043e\u0440\u043a\u0430 HTML<br \/>\n  \u0414\u043b\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Jade. \u041e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u043f\u0430\u0440\u0442\u0438\u0430\u043b\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c inline-javascript, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043c\u0438\u043a\u0441\u0438\u043d\u044b \u0438 \u0435\u0449\u0451 \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u0440\u0443\u0442\u044b\u0445 \u0448\u0442\u0443\u043a.<\/p>\n<p>  Gulp\u041a\u043e\u043d\u0444\u0438\u0433<\/p>\n<p>  \/* file: lib\/gulp\/config.js *\/  html: {   src: _src + _html,              \/\/ \u043f\u0443\u0442\u044c \u0434\u043e jade-\u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432   dest: _public,                  \/\/ \u043a\u0443\u0434\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0435   params: {                       \/\/ \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f jade     pretty: devBuild,             \/\/ \u0443\u0431\u0438\u0432\u0430\u0435\u043c \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u0432 html?     locals: {                     \/\/ \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u044b       pkgVersion: pkg.version     \/\/ \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432\u0435\u0440\u0441\u0438\u044e \u0440\u0435\u043b\u0438\u0437\u0430 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e `pkgVersion`     }   } }  Github<\/p>\n<p>  \u0422\u0430\u0441\u043a<\/p>\n<p>  \/* file: lib\/gulp\/tasks\/html.js *\/  var gulp        = require(&#8216;gulp&#8217;),     jade        = require(&#8216;gulp-jade&#8217;),     jadeInherit = require(&#8216;gulp-jade-inheritance&#8217;),     gulpif      = require(&#8216;gulp-if&#8217;),     changed     = require(&#8216;gulp-changed&#8217;),     filter      = require(&#8216;gulp-filter&#8217;),     notifier    = require(&#8216;..\/helpers\/notifier&#8217;),     config      = require(&#8216;..\/config&#8217;).html;  gulp.task(&#8216;html&#8217;, function(cb) {    \/\/ \u0431\u0435\u0440\u0451\u043c \u0432\u0441\u0435 jade-\u0444\u0430\u0439\u043b\u044b \u0438\u0437 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 src\/html   gulp.src(config.src + &#8216;*.jade&#8217;)       \/\/ \u0435\u0441\u043b\u0438 dev-\u0441\u0431\u043e\u0440\u043a\u0430, \u0442\u043e watcher \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b       .pipe(gulpif(devBuild, changed(config.dest)))       \/\/ \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438       .pipe(jadeInherit({basedir: config.src}))       \/\/ \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043d\u0435-\u043f\u0430\u0440\u0442\u0438\u0430\u043b\u044b (\u0431\u0435\u0437 `_` \u0432\u043d\u0430\u0447\u0430\u043b\u0435)       .pipe(filter(function(file) {         return !\/\\\/_\/.test(file.path) || !\/^_\/.test(file.relative);       }))       \/\/ \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c jade \u0432 html       .pipe(jade(config.params))       \/\/ \u043f\u0438\u0448\u0435\u043c html-\u0444\u0430\u0439\u043b\u044b       .pipe(gulp.dest(config.dest))       \/\/ \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e       .on(&#8216;end&#8217;, function() {         notifier(&#8216;html&#8217;);  \/\/ \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 (\u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 + \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u0448\u043a\u0430)         cb();              \/\/ gulp-callback, \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0442\u0430\u0441\u043a\u0430       });  });  Github<br \/>\n  \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043f\u043a\u0438 src\/html<\/p>\n<p>  | src   |&#8212; html       |&#8212; index.jade        # \u0441\u043a\u0435\u043b\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b       |&#8212; components\/       # \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b           |&#8212; _header.jade       |&#8212; helpers\/          # \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043c\u0438\u043a\u0441\u0438\u043d\u044b           |&#8212; _params.jade           |&#8212; _mixins.jade       |&#8212; meta\/             # \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 head, \u043a\u043e\u0434\u044b \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0438 \u043f\u0440.           |&#8212; _head.jade  Github<\/p>\n<p>  \u0412\u0441\u0435 \u043f\u0430\u0440\u0442\u0438\u0430\u043b\u044b \u0441\u043d\u0430\u0431\u0436\u0430\u0435\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c `_` (\u043d\u0438\u0436\u043d\u0435\u0435 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435), \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0438\u0445 \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>  helpers\/_variables.jade<br \/>\n  \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0441\u0442\u043e\u0438\u0442 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0442\u043e \u0435\u0433\u043e \u043b\u0443\u0447\u0448\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0451.<\/p>\n<p>  \/* file: src\/html\/helpers\/_variables.jade *\/  &#8212; var release = pkgVersion          \/\/ \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0438\u0437 gulp-\u043a\u043e\u043d\u0444\u0438\u0433\u0430 &#8212; var phone = &#8216;8 800 CALL-ME-NOW&#8217;   \/\/ \u0442\u0435\u043b\u0435\u0444\u043e\u043d  Github<\/p>\n<p>  helpers\/_mixins.jade<br \/>\n  \u0427\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044c \u0432 mixin.<\/p>\n<p>  \/* file: src\/html\/helpers\/_mixins.jade *\/  mixin phoneLink(phoneString)   &#8212; var cleanPhone = phoneString.replace(\/\\(|\\)|\\s|\\-\/g, &#187;)   a(href=&quot;tel:#{cleanPhone}&quot;)= phoneString  \/\/ \u0432 \u0432\u0435\u0440\u0441\u0442\u043a\u0435 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \/\/ +phoneLink(phone)  Github<\/p>\n<p>  index.jade<br \/>\n  \u0421\u043a\u0435\u043b\u0435\u0442 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<p>  \/* file: src\/html\/index.jade *\/  include helpers\/_variables    \/\/ \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 include helpers\/_mixins       \/\/ \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043c\u0438\u043a\u0441\u0438\u043d\u044b  doctype html html    head     include meta\/_head    body     include components\/_header     include components\/_some_component     include components\/_footer  Github<\/p>\n<p>  meta\/_head.jade<br \/>\n  \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 head.<\/p>\n<p>  \/* file: src\/html\/meta\/_head.jade *\/  meta(charset=&quot;utf-8&quot;)  &#8230;  \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0431\u043e\u0440\u043a\u0438, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c js\/css \u0432 \u043a\u044d\u0448\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 link(rel=&quot;stylesheet&quot; href=&quot;css\/app.min.css?v=#{release}&quot;) script(src=&quot;js\/app.min.js?v=#{release}&quot;)  &#8230;  Github<\/p>\n<p>  \u0421\u0431\u043e\u0440\u043a\u0430 JavaScript<br \/>\n  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Browserify. C \u043d\u0438\u043c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0438\u043b\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f CommonJS \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u041a\u0440\u043e\u043c\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c ES6-\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441: Babel \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0435\u0433\u043e \u0432 ES5 \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a Browserify \u0441\u043e\u0431\u0435\u0440\u0435\u0442 js. \u0418 \u043f\u0435\u0440\u0435\u0434 \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u043c\u044b \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f jsHint \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u0423 Browserify \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u043c\u0438\u043d\u0443\u0441: \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0438\u0448\u0435\u0442\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 jQuery-\u043f\u043b\u0430\u0433\u0438\u043d), \u0442\u043e \u043e\u043d \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e UMD-\u043e\u0431\u0435\u0440\u0442\u043a\u0443. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u0437\u0430\u043c\u0435\u043d\u044f\u044e Browserify \u043d\u0430 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044e \u0438 \u043f\u0438\u0448\u0443 \u043e\u0431\u0451\u0440\u0442\u043a\u0443 \u0440\u0443\u043a\u0430\u043c\u0438.<\/p>\n<p>  \u041e \u0431\u0430\u043d\u0434\u043b\u0430\u0445\u041d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0431\u043e\u0440\u043e\u0432 js\/css. <\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b \u043f\u0438\u0448\u0438\u0442\u0435 \u0444\u0440\u043e\u043d\u0442 + \u0430\u0434\u043c\u0438\u043d\u043a\u0443. \u0418\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432 2 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445: \u0431\u0435\u0437 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 jQuery-\u043f\u043b\u0430\u0433\u0438\u043d\u0430. \u042d\u0442\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432:<\/p>\n<p>  \/* file: lib\/gulp\/config.js *\/  \/* \u0414\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 *\/ var bundles = [   {     name        : &#8216;myLib&#8217;, \/\/ \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0431\u0430\u043d\u0434\u043b\u0430     global      : &#8216;myLib&#8217;, \/\/ \u044d\u0442\u043e \u0438\u043c\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0451\u043d     compress    : true,    \/\/ \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c? (\u043d\u0435\u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u0434\u0430)     saveToDist  : true     \/\/ \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 `\/dist`?   } ];   \/* \u0414\u043b\u044f \u0441\u0430\u0439\u0442\u0430 \/ \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0440\u0438\u0437\u0435\u043c\u043b\u0435\u043d\u0438\u044f *\/ var bundles = [   {     name        : &#8216;app&#8217;, \/\/ \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0431\u0430\u043d\u0434\u043b\u0430     global      : false, \/\/ \u043d\u0438\u0447\u0435\u043c \u043e\u0442\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e     compress    : true,  \/\/ \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c?     saveToDist  : false  \/\/ \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 `\/dist`?   },     name        : &#8216;admin&#8217;,     global      : false,     compress    : true,     saveToDist  : false   } ];  Github<\/p>\n<p>  js\/css c\u0431\u043e\u0440\u0449\u0438\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441 js\/css \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 end-point \u0444\u0430\u0439\u043b (`app.js` \u0438\u043b\u0438 `app.styl`). \u0427\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 end-point \u0444\u0430\u0439\u043b \u043c\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0435\u043c\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 \u0431\u0430\u043d\u0434\u043b\u0430. \u0418\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0447\u0443\u0442\u044c \u043d\u0438\u0436\u0435.<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0431\u0430\u043d\u0434\u043b\u043e\u0432 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0443, \u043c\u044b \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0447\u0435\u0440\u0435\u0437 \u0445\u0435\u043b\u043f\u0435\u0440 `bundler`, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438.Gulp\u041a\u043e\u043d\u0444\u0438\u0433<\/p>\n<p>  \/* file: lib\/gulp\/config.js *\/  scripts: {   bundles: bundler(bundles, _js, _src, _dist, _public),       \/\/ \u043f\u0430\u043a\u0443\u0435\u043c \u0431\u0430\u043d\u0434\u043b\u044b   banner: &#8216;\/** &#8216; + pkg.name + &#8216; v&#8217; + pkg.version + &#8216; **\/\\n&#8217;,  \/\/ \u0437\u0430\u0434\u0430\u0435\u043c \u0444\u043e\u0440\u043c\u0430\u0442 \u0431\u0430\u043d\u043d\u0435\u0440\u0430 \u0434\u043b\u044f min.js   extensions: [&#8216;.jsx&#8217;],                                       \/\/ \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f   lint: {                                                     \/\/ \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f jshint     options: pkg.lintOptions,     dir: _src + _js   } }  Github<\/p>\n<p>  \u0422\u0430\u0441\u043a<\/p>\n<p>  \/* file: lib\/gulp\/tasks\/scripts.js *\/  var gulp       = require(&#8216;gulp&#8217;),     browserify = require(&#8216;browserify&#8217;),     watchify   = require(&#8216;watchify&#8217;),     uglify     = require(&#8216;gulp-uglify&#8217;),     sourcemaps = require(&#8216;gulp-sourcemaps&#8217;),     derequire  = require(&#8216;gulp-derequire&#8217;),     source     = require(&#8216;vinyl-source-stream&#8217;),     buffer     = require(&#8216;vinyl-buffer&#8217;),     rename     = require(&#8216;gulp-rename&#8217;),     header     = require(&#8216;gulp-header&#8217;),     gulpif     = require(&#8216;gulp-if&#8217;),     notifier   = require(&#8216;..\/helpers\/notifier&#8217;),     config     = require(&#8216;..\/config&#8217;).scripts;   gulp.task(&#8216;scripts&#8217;, function(cb) {    \/\/ \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u043b-\u0432\u043e \u0431\u0430\u043d\u0434\u043b\u043e\u0432   var queue = config.bundles.length;    \/\/ \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0431\u0430\u043d\u0434\u043b\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e,    \/\/ \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 bundle-\u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438   \/\/ \u043f\u043e\u0437\u0436\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0435\u0451 \u0432 \u0446\u0438\u043a\u043b   var buildThis = function(bundle) {      \/\/ \u043e\u0442\u0434\u0430\u0435\u043c bundle browserify     var pack = browserify({       \/\/ \u044d\u0442\u043e \u0434\u043b\u044f sourcemaps       cache: {}, packageCache: {}, fullPaths: devBuild,       \/\/ \u043f\u0443\u0442\u044c \u0434\u043e end-point (app.js)       entries: bundle.src,       \/\/ \u0435\u0441\u043b\u0438 \u043f\u0438\u0448\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044c, \u0442\u043e \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440       \/\/ browserify \u043e\u0431\u0435\u0440\u043d\u0435\u0442 \u0432\u0441\u0451 \u0432 UMD-\u043e\u0431\u0435\u0440\u0442\u043a\u0443       \/\/ \u0438 \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043a\u0430\u043a bundle.global       standalone: bundle.global,       \/\/ \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f       extensions: config.extensions,       \/\/ \u043f\u0438\u0448\u0435\u043c sourcemaps?       debug: devBuild     });      \/\/ \u0441\u0431\u043e\u0440\u043a\u0430     var build = function() {        return (           \/\/ browserify-\u0441\u0431\u043e\u0440\u043a\u0430           pack.bundle()               \/\/ \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u043c browserify-\u0441\u0431\u043e\u0440\u043a\u0443 \u0432 vinyl               .pipe(source(bundle.destFile))               \/\/ \u044d\u0442\u0430 \u0448\u0442\u0443\u043a\u0430 \u043d\u0443\u0436\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b `require` \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438               .pipe(derequire())               \/\/ \u0435\u0441\u043b\u0438 dev-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435, \u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438 \u043d\u0435\u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0432 `public\/` (\u0437\u0430\u0447\u0435\u043c &#8212; \u043d\u0435 \u043f\u043e\u043c\u043d\u044e))               .pipe(gulpif(devBuild, gulp.dest(bundle.destPublicDir)))               \/\/ \u0435\u0441\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u043f\u0430\u043f\u043a\u0443 `dist` &#8212; \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c               .pipe(gulpif(bundle.saveToDist, gulp.dest(bundle.destDistDir)))               \/\/ \u044d\u0442\u043e \u0434\u043b\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b sourcemaps \u043f\u0440\u0438 \u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438               .pipe(gulpif(bundle.compress, buffer()))               \/\/ \u0435\u0441\u043b\u0438 dev-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0438 \u043d\u0443\u0436\u043d\u0430 \u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u2014 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c sourcemaps               .pipe(gulpif(bundle.compress &#038;&#038; devBuild, sourcemaps.init({loadMaps: true})))               \/\/ \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c               .pipe(gulpif(bundle.compress, uglify()))               \/\/ \u043a \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0443\u0444\u0444\u0438\u043a\u0441 `.min`               .pipe(gulpif(bundle.compress, rename({suffix: &#8216;.min&#8217;})))               \/\/ \u0435\u0441\u043b\u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0434\u043b\u044f production &#8212; \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0431\u0430\u043d\u043d\u0435\u0440 \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0440\u0435\u043b\u0438\u0437\u0430               .pipe(gulpif(!devBuild, header(config.banner)))               \/\/ \u043f\u0438\u0448\u0435\u043c sourcemaps               .pipe(gulpif(bundle.compress &#038;&#038; devBuild, sourcemaps.write(&#8216;.\/&#8217;)))               \/\/ \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0432 `\/dist`               .pipe(gulpif(bundle.saveToDist, gulp.dest(bundle.destDistDir)))               \/\/ \u0438 \u0432 `public`               .pipe(gulp.dest(bundle.destPublicDir))               \/\/ \u0432 \u043a\u043e\u043d\u0446\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c callback handleQueue (\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u043d\u0438\u0436\u0435)               .on(&#8216;end&#8217;, handleQueue)       );      };      \/\/ \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u044b watchers     if (global.isWatching) {       \/\/ \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c browserify-\u0441\u0431\u043e\u0440\u043a\u0443 \u0432 watchify       pack = watchify(pack);       \/\/ \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u0437 \u0441\u0431\u043e\u0440\u043a\u0438 &#8212; \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0431\u0430\u043d\u0434\u043b       pack.on(&#8216;update&#8217;, build);     }      \/\/ \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0430\u043d\u0434\u043b\u0430     var handleQueue = function() {       \/\/ \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u043c, \u0447\u0442\u043e \u0432\u0441\u0451 \u0441\u043e\u0431\u0440\u0430\u043b\u0438       notifier(bundle.destFile);       \/\/ \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c       if (queue) {         \/\/ \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u043d\u0430 1         queue&#8212;;         \/\/ \u0435\u0441\u043b\u0438 \u0431\u0430\u043d\u0434\u043b\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0442, \u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u043c, \u0447\u0442\u043e \u0442\u0430\u0441\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d          if (queue === 0) cb();       }     };      return build();   };    \/\/ \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0430\u043d\u0434\u043b\u043e\u0432 \u0432 \u0446\u0438\u043a\u043b   config.bundles.forEach(buildThis);  });  Github<br \/>\n  \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043f\u043a\u0438 src\/js<\/p>\n<p>  | src\/   |&#8212; js\/       |&#8212; components\/  # \u043a\u043e\u0434 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432       |&#8212; helpers\/     # js-\u0445\u0435\u043b\u043f\u0435\u0440\u044b       |&#8212; app.js       # end-point \u0431\u0430\u043d\u0434\u043b\u0430  Github<\/p>\n<p>  app.js<br \/>\n  \u0427\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043c\u044b \u0440\u0443\u043b\u0438\u043c \u0432\u0441\u0435\u043c\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 \u0438 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f js-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u0431\u0430\u043d\u0434\u043b\u0430.<\/p>\n<p>  \/* file: src\/js\/app.js *\/  \/* Vendor *\/ import $ from &#8216;jquery&#8217;;  \/* Components *\/ import myComponent from &#8216;.\/components\/my-component&#8217;;   \/* App *\/  $(document).ready(() =&gt; {    myComponent();  });  Github<br \/>\n  \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0435\u0442 \u0432 npm\u0412 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c browserify-shim: \u043f\u043b\u0430\u0433\u0438\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 CommonJS-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438. \u0418\u0442\u0430\u043a, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c jQuery-\u043f\u043b\u0430\u0433\u0438\u043d `maskedinput`, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \u0432 npm.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 `package.json` \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438:<\/p>\n<p>  \/* file: package.json *\/  &quot;browserify&quot;: {   &quot;transform&quot;: [     &quot;babelify&quot;,     &quot;browserify-shim&quot;  \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435   ] },  \/\/ \u0443 `browserify-shim` \u043c\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \/\/ \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0434\u043e\u043a\u0438 \u043d\u0430 github: https:\/\/github.com\/thlorenz\/browserify-shim &quot;browser&quot;: {   &quot;maskedinput&quot;: &quot;.\/path\/to\/jquery.maskedinput.js&quot; }, &quot;browserify-shim&quot;: {   &quot;maskedinput&quot;: {     &quot;exports&quot;: &quot;maskedinput&quot;,     &quot;depends&quot;: [       &quot;jquery:jQuery&quot;     ]   } }  <\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c:<br \/>\n  require(&#8216;maskedinput&#8217;); <\/p>\n<p>  \u0421\u0431\u043e\u0440\u043a\u0430 CSS<br \/>\n  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Stylus. \u041f\u043b\u044e\u0441 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e css \u0430\u0432\u0442\u043e\u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0435\u0440\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0435\u043d\u0434\u043e\u0440\u043d\u044b\u0435 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b \u0440\u0443\u043a\u0430\u043c\u0438.<\/p>\n<p>  Gulp\u041a\u043e\u043d\u0444\u0438\u0433<\/p>\n<p>  \/* file: lib\/gulp\/config.js *\/  css: {   bundles: bundler(bundles, _css, _src, _dist, _public), \/\/ \u043f\u0430\u043a\u0443\u0435\u043c \u0431\u0430\u043d\u0434\u043b\u044b   src: _src + _css,                                      \/\/ \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0433\u0434\u0435 \u043b\u0435\u0436\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0434\u043b\u044f watcher   params: {},                                            \/\/ \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f stylus &#8212; \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0442\u0443\u0442   autoprefixer: {                                        \/\/ \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c autoprefixer     browsers: [&#8216;&gt; 1%&#8217;, &#8216;last 2 versions&#8217;],               \/\/ \u043f\u043e\u0434\u043e \u0447\u0442\u043e \u0441\u0442\u0430\u0432\u0438\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u044b     cascade: false                                       \/\/ \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u043d\u0435 \u043d\u0430\u0434\u043e, \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c   },   compress: {}                                           \/\/ \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 &#8212; \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0442\u0443\u0442 }  Github<\/p>\n<p>  \u0422\u0430\u0441\u043a<\/p>\n<p>  \/* file: lib\/gulp\/tasks\/css.js *\/  var gulp     = require(&#8216;gulp&#8217;),     process  = require(&#8216;gulp-stylus&#8217;),     prefix   = require(&#8216;gulp-autoprefixer&#8217;),     compress = require(&#8216;gulp-minify-css&#8217;),     gulpif   = require(&#8216;gulp-if&#8217;),     rename   = require(&#8216;gulp-rename&#8217;),     notifier = require(&#8216;..\/helpers\/notifier&#8217;),     config   = require(&#8216;..\/config&#8217;).css;  \/* \u041b\u043e\u0433\u0438\u043a\u0430 css-\u0442\u0430\u0441\u043a\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u043b\u043e\u0433\u0438\u043a\u0443 js-\u0442\u0430\u0441\u043a\u0430 *\/  gulp.task(&#8216;css&#8217;, function(cb) {    var queue = config.bundles.length;    var buildThis = function(bundle) {      var build = function() {       return (           gulp.src(bundle.src)               .pipe(process(config.params))               .pipe(prefix(config.autoprefixer))               .pipe(gulpif(bundle.compress, compress(config.compress)))               .pipe(gulpif(bundle.compress, rename({suffix: &#8216;.min&#8217;})))               .pipe(gulp.dest(bundle.destPublicDir))               .on(&#8216;end&#8217;, handleQueue)       );     };      var handleQueue = function() {       notifier(bundle.destFile);       if (queue) {         queue&#8212;;         if (queue === 0) cb();       }     };      return build();   };    config.bundles.forEach(buildThis);  });  Github<br \/>\n  \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043f\u043a\u0438 src\/css<\/p>\n<p>  | src\/   |&#8212; css\/       |&#8212; components\/            # \u0441\u0442\u0438\u043b\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432           |&#8212; header.styl           |&#8212; footer.styl       |&#8212; globals\/           |&#8212; fonts.styl         # \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0444\u043e\u043d\u0442\u044b           |&#8212; global.styl        # \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430           |&#8212; normalize.styl     # \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u043c \/ \u0440\u0435\u0441\u0435\u0442\u0438\u043c           |&#8212; variables.styl     # \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435           |&#8212; z-index.styl       # z-\u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430       |&#8212; helpers\/           |&#8212; classes.styl       # \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b           |&#8212; mixins.styl        # \u0438 \u043c\u0438\u043a\u0441\u0438\u043d\u044b       |&#8212; sprite\/           |&#8212; sprite.json        # json, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 gulp.spritesmith           |&#8212; sprite.styl        # \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0438\u0437 json css-\u043a\u043b\u0430\u0441\u0441\u044b       |&#8212; vendor\/                # \u0432\u0435\u043d\u0434\u043e\u0440\u043d\u044b\u0435 css \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u0441\u044e\u0434\u0430       |&#8212; app.styl               # end-point \u0431\u0430\u043d\u0434\u043b\u0430  Github<\/p>\n<p>  app.styl<br \/>\n  \u0427\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043c\u044b \u0440\u0443\u043b\u0438\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f css-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u0431\u0430\u043d\u0434\u043b\u0430.<\/p>\n<p>  \/* file: src\/css\/app.styl *\/  @import &quot;helpers\/mixins&quot; @import &quot;helpers\/classes&quot; @import &quot;globals\/variables&quot; @import &quot;globals\/normalize&quot; @import &quot;globals\/z-index&quot; @import &quot;globals\/fonts&quot; @import &quot;globals\/global&quot; @import &quot;sprite\/sprite&quot; @import &quot;vendor\/*&quot; @import &quot;components\/*&quot;  Github<\/p>\n<p>  \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0430\u0441\u043a\u0438 \u2014 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438, \u0441\u043f\u0440\u0430\u0439\u0442\u044b, \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0438 \u043f\u0440. \u2014 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0441\u0442\u0430\u043b \u0443\u0436\u0435 \u0441\u0442\u0440\u043e\u0447\u0438\u0442\u044c). \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043b\u0435\u0436\u0430\u0442 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438: github.com\/alexfedoseev\/js-app-starter<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043a\u043e\u0441\u044f\u043a\u0438 \u0438\u043b\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u2014 \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0442\u0443\u0442 \u0438\u043b\u0438 issues \/ pull requests \u043d\u0430 Github. \u0423\u0434\u0430\u0447!      \t \t   \thttp:\/\/habrahabr.ru\/post\/251807\/<\/p>\n","protected":false},"excerpt":{"rendered":"\n<p>  \u042f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u0431\u043e\u0440\u043a\u0438 \u0444\u0440\u043e\u043d\u0442\u0430. \u0417\u0430\u0434\u0430\u0447\u0430 \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0438 \u0441\u0442\u043e\u0438\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e \u043d\u0435\u0439 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c.<\/p>\n<p>  \u0427\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u0449\u0438\u043a:<br \/>\n    \u0421\u043e\u0431\u0438\u0440\u0430\u0442\u044c front-end \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043b\u044f development &#038; production \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439.  \u0421\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e js\/css \u0431\u0430\u043d\u0434\u043b\u043e\u0432 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442.  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0438\u043b\u044c CommonJS \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c ES6-\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441.  \u0421\u043f\u0440\u0430\u0439\u0442\u044b, \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435  <\/p>\n<p>  \u0412\u0441\u0442\u0443\u043f\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435<br \/>\n  \u0427\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0439 \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u043c\u044b\u0441\u043b\u044c\u044e, \u0441\u0440\u0430\u0437\u0443 \u043a\u0438\u0434\u0430\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0430: github.com\/alexfedoseev\/js-app-starter<\/p>\n<p>  \u041a\u0430\u043a \u0435\u0433\u043e \u0437\u0430\u0432\u0435\u0441\u0442\u0438\u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d npm.<br \/>\n  npm -v <\/p>\n<p>  \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 (\u0435\u0441\u043b\u0438 \u0435\u0449\u0451 \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b):<br \/>\n  npm install -g gulp browserify babel jade stylus http-server <\/p>\n<p>  \u0421\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0444\u043e\u0440\u043a \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f.<br \/>\n  git clone https:\/\/github.com\/alexfedoseev\/js-app-starter.git <\/p>\n<p>  \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0432 \u043a\u043e\u0440\u043d\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f):<br \/>\n  npm install <\/p>\n<p>  \u0421\u043e\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 development \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440:<br \/>\n  npm start <\/p>\n<p>  \u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043d\u0430 lvh.me:3500<\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Gulp.<br \/>\n  \u0427\u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043a\u0430\u043a\u0438\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f:<br \/>\n    \u0421\u0431\u043e\u0440\u043a\u0430 HTML<br \/>\n   \u0428\u0430\u0431\u043b\u043e\u043d\u0438\u0437\u0430\u0442\u043e\u0440: Jade  \u0421\u0431\u043e\u0440\u043a\u0430 CSS<br \/>\n   \u041f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440: Stylus<br \/>\n   \u041f\u0440\u0435\u0444\u0438\u043a\u0441\u0435\u0440: Autoprefixer  \u0421\u0431\u043e\u0440\u043a\u0430 JS<br \/>\n   \u041c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430: Browserify + Babel (ES6 transpiler)<br \/>\n   \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430: jsHint  \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439<br \/>\n   \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440: Imagemin  \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438: \u0441\u0431\u043e\u0440\u043a\u0430 \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 json, \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u043e\u043d\u0442\u043e\u0432 \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 public \u043f\u0430\u043f\u043a\u0443<br \/>\n   \u0421\u0431\u043e\u0440\u0449\u0438\u043a \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432: Spritesmith<br \/>\n   \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 json: gulp-json-editor<br \/>\n  \u0412\u043e\u0431\u0449\u0435 \u044f \u043b\u044e\u0431\u043b\u044e Slim \u0438 Sass, \u043d\u043e Ruby \u043a Ruby, a JS \u043a JS: \u0434\u043b\u044f frontend-\u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0448\u0442\u0443\u043a\u0438 \u0438\u0437 npm. \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043b\u044e\u0431\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c.<\/p>\n<p>  \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<br \/>\n  | dist\/  | lib\/   |&#8212; gulp\/       |&#8212; helpers\/       |&#8212; tasks\/       |&#8212; config.js  | node_modules\/  | public\/   |&#8212; css\/   |&#8212; files\/   |&#8212; fonts\/   |&#8212; img\/   |&#8212; js\/   |&#8212; json\/   |&#8212; favicon.ico   |&#8212; index.html  | src\/   |&#8212; css\/   |&#8212; files\/   |&#8212; fonts\/   |&#8212; html\/   |&#8212; img\/   |&#8212; js\/   |&#8212; json\/   |&#8212; sprite\/   |&#8212; favicon.ico  | .gitignore | .npmignore | gulpfile.js | npm-shrinkwrap.json | package.json  Github<\/p>\n<p>  .gitignore &#038; .npmignore<br \/>\n  \u0412\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f git \u0438 npm \u043f\u0440\u0438 \u043a\u043e\u043c\u043c\u0438\u0442\u0430\u0445\/\u043f\u0430\u0431\u043b\u0438\u0448\u0430\u0445.<\/p>\n<p>  node_modules\/<br \/>\n  \u0412 \u044d\u0442\u0443 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u043f\u0430\u0434\u0430\u044e\u0442 \u0432\u0441\u0435 \u043c\u043e\u0434\u0443\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0447\u0435\u0440\u0435\u0437 npm.<\/p>\n<p>  npm-shrinkwrap.json<br \/>\n  \u042f \u043d\u0435 \u0434\u0435\u0440\u0436\u0443 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 node_modules\/. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043b\u043e\u0447\u0443 \u0432\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b. \u041e\u043d \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439: `npm shrinkwrap`.<\/p>\n<p>  package.json<br \/>\n  \u042d\u0442\u043e \u0444\u0430\u0439\u043b \u0441 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041a \u043d\u0435\u043c\u0443 \u0435\u0449\u0451 \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f.<\/p>\n<p>  gulpfile.js<br \/>\n  \u041e\u0431\u044b\u0447\u043d\u043e \u0442\u0443\u0442 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u0441\u0435 \u0442\u0430\u0441\u043a\u0438 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0441 \u0434\u0430\u043b\u044c\u0448\u0435 \u0432 \u043f\u0430\u043f\u043a\u0443 \u0441 gulp-\u0442\u0430\u0441\u043a\u0430\u043c\u0438.<\/p>\n<p>  lib\/gulp\/<br \/>\n  \u0417\u0434\u0435\u0441\u044c \u0445\u0440\u0430\u043d\u0438\u043c \u0432\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430.<\/p>\n<p>  |&#8212; config.js<br \/>\n  \u0412\u044b\u043d\u043e\u0441\u0438\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0430\u0441\u043a\u043e\u0432 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0447\u0442\u043e\u0431\u044b \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u043a\u0443 \u0441\u0430\u043c\u0438\u0445 \u0442\u0430\u0441\u043a\u043e\u0432.<\/p>\n<p>  |&#8212; helpers\/<br \/>\n  \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430.<\/p>\n<p>  |&#8212; tasks\/<br \/>\n  \u0418 \u0441\u0430\u043c\u0438 gulp-\u0442\u0430\u0441\u043a\u0438.<\/p>\n<p>  src\/<br \/>\n  \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>  public\/<br \/>\n  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u0431\u043e\u0440\u043a\u0438. \u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0432\u0441\u0451 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u044d\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c \u0438 \u043f\u0435\u0440\u0435\u0434 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u043e\u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0443\u0442 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0445\u0440\u0430\u043d\u0438\u043c.<\/p>\n<p>  dist\/<br \/>\n  \u0418\u043d\u043e\u0433\u0434\u0430 \u044f \u043f\u0438\u0448\u0443 opensource-\u043c\u043e\u0434\u0443\u043b\u0438. \u0412 \u044d\u0442\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 \u043f\u043e\u0441\u043b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0438 \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 js-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f public\/ \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043b\u044f \u0434\u0435\u043c\u043a\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0441\u0430\u0439\u0442 \u0438\u043b\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043f\u0440\u0438\u0437\u0435\u043c\u043b\u0435\u043d\u0438\u044f, \u0442\u043e \u043e\u043d\u043e \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f.<\/p>\n<p>  \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<br \/>\n  package.json<br \/>\n  \u042d\u0442\u043e \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<br \/>\n  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0435\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0442\u0443\u0442: browsenpm.org\/package.json<br \/>\n  \u041d\u0438\u0436\u0435 \u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0430\u0436\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u044f\u0445.<\/p>\n<p>  {   \/\/ \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430   &quot;name&quot;: &quot;js-app-starter&quot;,    \/\/ \u0412\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430   \/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \/ \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f js+css \u0432 \u043a\u044d\u0448\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0431\u043e\u0440\u043a\u0438   &quot;version&quot;: &quot;0.0.1&quot;,    \/\/ \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0438\u0448\u0435\u0442\u0435 js-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0442\u043e \u0442\u0443\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443,   \/\/ \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 `require(&#8216;your-lib&#8217;)`   &quot;main&quot;: &quot;.\/dist\/app.js&quot;,    \/\/ \u041d\u0430\u0441\u0442\u043e\u0439\u043a\u0438 browserify   \/\/ \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c ES6 \u0432 ES5   &quot;browserify&quot;: {     &quot;transform&quot;: [       &quot;babelify&quot;     ]   },    \/\/ \u041a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043d\u0438\u0436\u0435)   &quot;scripts&quot;: {     &quot;start&quot;: &quot;NODE_ENV=development http-server -a lvh.me -p 3500 &#038; gulp&quot;,     &quot;build&quot;: &quot;NODE_ENV=production gulp build&quot;   },    \/\/ \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 jshint (\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430)   &quot;lintOptions&quot;: {     &quot;esnext&quot;: true     &#8230;   },    \/\/ Frontend \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438   &quot;dependencies&quot;: {     &quot;jquery&quot;: &quot;^2.1.3&quot;     &#8230;   },    \/\/ Development \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438   &quot;devDependencies&quot;: {     &quot;gulp&quot;: &quot;^3.8.11&quot;    &#8230;   } } Github<\/p>\n<p>  \u041a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<br \/>\n  \u0412 package.json \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0430\u043b\u0438\u0430\u0441\u044b \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0435\u043c \u0447\u0430\u0441\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n<p>  &quot;scripts&quot;: {   &quot;start&quot;: &quot;NODE_ENV=development http-server -a lvh.me -p 3500 &#038; gulp&quot;,   &quot;build&quot;: &quot;NODE_ENV=production gulp build&quot; } <\/p>\n<p>  Development \u0441\u0431\u043e\u0440\u043a\u0430<br \/>\n  \u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e:<br \/>\n    \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0435\u0433\u043e \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 (\u0441 sourcemaps \u0434\u043b\u044f \u0434\u0435\u0431\u0430\u0433\u0430)  \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u00ab\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u0435\u0439\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432  \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440<br \/>\n  # \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c npm start  # \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 NODE_ENV=development http-server -a lvh.me -p 3500 &#038; gulp<br \/>\n  \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u043e \u0447\u0430\u0441\u0442\u044f\u043c# \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f NODE_ENV=development  # \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u0434\u043e\u043c\u0435\u043d\u0435 lvh.me \u0438 \u043f\u043e\u0440\u0442\u0435 3500 http-server -a lvh.me -p 3500  # \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c gulp \u0442\u0430\u0441\u043a\u0438 gulp <\/p>\n<p>  Production \u0441\u0431\u043e\u0440\u043a\u0430<br \/>\n  \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u0440\u0435\u043b\u0438\u0437\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u2014 \u0434\u0435\u043b\u0430\u0435\u043c production-\u0441\u0431\u043e\u0440\u043a\u0443.<\/p>\n<p>  # \u043d\u0430\u0436\u043c\u0438\u0442\u0435 Ctrl+C, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u0435\u0439, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b  # \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c npm run build  # \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 NODE_ENV=production gulp build<br \/>\n  \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u043e \u0447\u0430\u0441\u0442\u044f\u043c# \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f NODE_ENV=production  # \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c gulp-\u0442\u0430\u0441\u043a `build` gulp build <\/p>\n<p>  Gulp<br \/>\n  \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a Gulp. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0442\u0430\u0441\u043a\u043e\u0432 \u0432\u0437\u044f\u0442\u0430 \u0438\u0437 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u043e\u0442 Dan Tello.<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u043d\u044b\u0440\u043d\u0443\u0442\u044c, \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e gulp-\u0442\u0430\u0441\u043a\u0430:<\/p>\n<p>  var gulp = require(&#8216;gulp&#8217;);  gulp.task(&#8216;task_1&#8217;, [&#8216;pre_task_1&#8217;, &#8216;pre_task_2&#8217;], function() {   console.log(&#8216;task_1 is done&#8217;); });  \/\/ \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0438 `task_1`, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 `task_1 is done` \/\/ \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043e\u043d \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 `gulp task_1` \/\/ \u041d\u043e \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e `task_1` \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c\u0441\u044f \u0437\u0430\u0434\u0430\u0447\u0438 `[&#8216;pre_task_1&#8217;, &#8216;pre_task_2&#8217;]` \/\/ \u0412\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e &#8216;pre_task_1&#8217; &#038; &#8216;pre_task_2&#8217; &#8212; \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e, \/\/ \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435, \/\/ \u0430 `task_1` \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 2 pre-\u0437\u0430\u0434\u0430\u0447\u0438 &#8212; \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e  <\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0447\u0442\u043e \u0438 \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c.<\/p>\n<p>  Development \u0441\u0431\u043e\u0440\u043a\u0430<br \/>\n  `npm start` \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 `gulp`. \u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u043b\u044c\u0448\u0435:<\/p>\n<p>    Gulp \u0438\u0449\u0435\u0442 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 gulpfile.js. \u041e\u0431\u044b\u0447\u043d\u043e \u0432 \u043d\u0435\u0433\u043e \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0442\u0430\u0441\u043a\u0438, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0438\u0442 \u043d\u0430\u0441 \u0434\u0430\u043b\u044c\u0448\u0435 \u0432 \u043f\u0430\u043f\u043a\u0443 \u0441 gulp-\u0442\u0430\u0441\u043a\u0430\u043c\u0438.<\/p>\n<p>  \u041a\u043e\u0434 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438\/* file: gulpfile.js *\/  \/\/ \u043c\u043e\u0434\u0443\u043b\u044c, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0442\u0430\u0441\u043a\u0438 \u0438\u0437 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439 var requireDir = require(&#8216;require-dir&#8217;);  \/\/ \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \/\/ \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c \u0432 \u0442\u0430\u0441\u043a\u0430\u0445 development &#038; production \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f global.devBuild = process.env.NODE_ENV !== &#8216;production&#8217;;  \/\/ \u043f\u0440\u043e\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u0432 \u043f\u0430\u043f\u043a\u0443 \u0441 \u0442\u0430\u0441\u043a\u0430\u043c\u0438 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u043c requireDir(&#8216;.\/lib\/gulp\/tasks&#8217;, { recurse: true }); Github<\/p>\n<p>    \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043d\u0430\u0441 \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0438\u043b\u043e \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e, \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u0438\u0449\u0435\u0442 \u0442\u0430\u0441\u043a \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c `default`, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u00ab\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u0435\u0439\u00bb \u043d\u0430\u0434 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438, \u043f\u043e\u0442\u043e\u043c:<br \/>\n    \u043e\u0447\u0438\u0449\u0430\u0435\u0442 \u043f\u0430\u043f\u043a\u0438 `public\/` &#038; `dist\/`  \u043b\u0438\u043d\u0442\u0438\u0442 js-\u0444\u0430\u0439\u043b\u044b  \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u043f\u0440\u0430\u0439\u0442\u044b<br \/>\n  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442 (html, css, js \u0438 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435).<\/p>\n<p>  \u041a\u043e\u0434 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438default<\/p>\n<p>  \/* file: lib\/gulp\/tasks\/default.js *\/  var gulp = require(&#8216;gulp&#8217;);  \/\/ \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0439 \u0442\u0430\u0441\u043a `default`, \u043d\u043e \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0442\u0430\u0441\u043a `watch` gulp.task(&#8216;default&#8217;, [&#8216;watch&#8217;]);  Github<\/p>\n<p>  watch<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-252222","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/252222","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=252222"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/252222\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=252222"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=252222"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=252222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}